資料結構與演算法 演算法的時間複雜度和空間複雜度

2021-10-08 21:29:46 字數 1056 閱讀 8637

無論**執行了多少行,只要是沒有迴圈等複雜結構,那這個**的時間複雜度就都是o(1),如:

int i =1;

int j =2;

++i;

j++;

int m = i + j;

上述**在執行的時候,它消耗的時候並不隨著某個變數的增長而增長,那麼無論這類**有多長,即使有幾萬幾十萬行,都可以用o(1)來表示它的時間複雜度。

例如有乙個迴圈:

for

(i=1

; i<=n;

++i)

這段**,for迴圈裡面的**會執行n遍,因此它消耗的時間是隨著n的變化而變化的,因此這類**都可以用o(n)來表示它的時間複雜度。

**如下所示:

int i =1;

while

(i

像這樣while迴圈裡每次都乘2,i距離n就會越來越近,最後大於等於n了。此時我們可以算2x=

n2^ = n

2x=n

從而推出x

=log⁡(

n)

x = \log(n)

x=log(n)

。線性對數階o(nlogn) 其實非常容易理解,將時間複雜度為o(logn)的**迴圈n遍的話,那麼它的時間複雜度就是 n * o(logn),也就是了o(nlogn)。

for

(m=1

; m)}

簡單來說就是有兩個迴圈**。

for

(x=1

; i<=n; x++

)}

如果演算法執行所需要的臨時空間不隨著某個變數n的大小而變化,即此演算法空間複雜度為乙個常量,可表示為 o(1)。如下所示:

int i =1;

int j =2;

++i;

j++;

int m = i + j;

如果你在**中開了額外空間如陣列、佇列、棧等,就會消耗記憶體空間。

資料結構與演算法 演算法與時間複雜度

演算法的五大特性 1.輸入,0 個或多個 2.輸入 1 個或多個 3.有窮性 4.確定性 5.可行性 如果乙個演算法執行效率 步驟 標記成 t n n 3 2 那麼這個2 可以看作乙個常數 k 就可以寫成 t n n 3 k 可以看出,如果改變常數k的值,並不會影響 t n 這個函式在座標軸的走勢,...

演算法與資料結構 時間複雜度

複雜度是衡量乙個演算法效率高低的乙個重要的因素,一般分為時間複雜度和空間複雜度。空間複雜度,一般在排序等 抽象資料型別的運算和物理實現 有關。本篇主要介紹時間複雜度的一些概念。我們在ram模型 1 記憶體無限大 2 基本運算o 1 下面考慮接下來的內容。準確的說,演算法的複雜性是執行演算法所需要的計...

資料結構與演算法 演算法的時間複雜度

乙個演算法花費的時間與演算法中語句執行次數成正比,哪個演算法中語句執行次數多,它花費的時間就多。乙個演算法中語句的執行次數稱為語句頻度或時間頻度。記為t n 複製 比如計算1到100所有數字之和,我們設計倆種演算法 int count 0 int end 100 該演算法中使用了for迴圈,迴圈了1...