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

2021-08-15 02:26:13 字數 1907 閱讀 5180

我們可以使用著名的高斯定理來解釋什麼是時間複雜度,時間複雜度的重要性

也就是從小到大我們所熟悉的乙個定理 1+2+3+4+5+6+….+100的結果

使用高斯定理我們可以很輕鬆的算出答案大家可以看出高斯定理是可以非常迅速的算出答案,我們可以使用程式來計算我們先用最基礎的for迴圈來計算答案

int

sum = 0;

for (int i = 1; i <= 100; i++)

system.out.println(sum);

}

由程式可知for迴圈 迴圈了 100次才算出答案

當我們使用等差數列中的高斯定理來運算時

int n = 100 ;

intsum = (1 + n)*n/2;

system.out.println(sum);

可以看到我們只運算了一次就可以算出答案而最開始的for迴圈則需要迴圈100次才能算出答案

接下來我們就可以對時間複雜度來下乙個定義了

對於時間複雜度是怎麼算的下面給出幾種比較常見的計算方式與型別第一種 o(1)

int n = 100 ;//執行一次

intsum = (1 + n)*n/2;//執行一次

system.out.println(sum);//執行一次

上面一共有三次操作 但是每次操作都是單條操作也就是指執行一次不管執行多少次,次數都是乙個常數 所以我們都將這種的時間複雜度稱為o(1)

第二種 o(n)

for (int i = 1; i <= n; i++)
這裡的sum = sum+i;是執行了一次的但是for迴圈是必須要迴圈n次所以我們將其的時間複雜度稱為o(n) ,通常大部分的o(n)演算法也被稱之為線性演算法

第三種 o(logn)

int i=1;

while (i

<=n)

i=i*2;

上面的 i = i*2 執行了一次 但是每次的 i 都是 *2 我們的跳出迴圈條件 也就是時間執行的結束點是以i<=n來作為結束的,當每次i乘以2的時候也就離n更近了,所以我們可以得出 多少個2 相乘等於n 也就是

2^x = n 也就是log2^n

則得出 時間複雜度為 o(log2n)

第四種o(n^2)

for(int j = 1 ; j<=n ;j++) 

}

上面的可以看出是有兩個for迴圈,裡面的迴圈我們剛才已經分析過了,為o(n)的時間複雜度,內迴圈再次迴圈n次也就是n^2所以這段**時間複雜度為 o(n^2)

最後還要說一點就是,我們上面算的都是時間複雜度的最壞情況,完成這段**的運算最壞情況下需要的時間,應該有的演算法情況有著不確定性,有可能是第一次就算出來了也有可以能最後一次也就是第n次才算出,所以我們算的一般都是時間複雜度的最壞情況

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

解決乙個問題的方法可能有很多,但能稱得上演算法的,首先它必須能徹底解決這個問題 稱為準確性 且根據其編寫出的程式在任何情況下都不能崩潰 稱為健壯性 程式和演算法是完全不同的概念。演算法是解決某個問題的想法 思路 而程式是在根據演算法編寫出來的真正可以執行的 例如,要依次輸出一維陣列中的資料元素的值,...

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

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

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

一 階數比較 時間複雜度判斷理論 o 1 o log2 n o n o n log2 n o n 2 o n k o 2 n 二 計算方法 用常數1代替執行時間中的所有加法常數 修改後的執行次數中只保留最高端項 去除最高端項的係數 三 常見的求時間複雜度例子 1 常數階 int a 1 int b ...