天天看點

算法時間複雜度

     算法複雜度分為時間複雜度和空間複雜度,一個好的算法應該具體執行時間短,所需空間少的特點。

     随着計算機硬體和軟體的提升,一個算法的執行時間是算不太精确的。隻能依據統計方法對算法進行估算。我們抛開硬體和軟體的因素,算法的好壞直接影響程式的運作時間。

     我們看一下小例子:

     int value = 0;                         // 執行了1次

     for (int i = 0; i < n; i++) {       // 執行了n次

          value += i;

     }

     這個算法執行了 1 + n 次,如果n無限大,我們可以把前邊的1忽略,也就是說這個算法執行了n次

     時間複雜度常用大O符号表示,這個算法的時間複雜度就是O(n).

     概念: 一般情況下,算法的基本操作重複執行的次數是子產品n的某一函數f(n),是以,算法的時間複雜度記做 T(n) = O(f(n))。 随着子產品n的增大,算法執行的時間增長率f(n)的增長率成正比,是以f(n)越小,算法 的時間複雜度越低,算法的效率越高。

     計算時間複雜度

     1.去掉運作時間中的所有加法常數。

     2.隻保留最高階項。

     3.如果最高階項存在且不是1,去掉與這個最高階相乘的常數得到時間複雜度

我們看一個例子

     for (int i = 0; i < n; i++) {

          for (int j = i; j < n; j++) {

               // do .....

          }

當 i = 0 時 裡面的fo循環執行了n次,當i等待1時裡面的for循環執行了n -  1次,當i 等于2裡裡面的fro執行了n - 2次........是以執行的次數是

算法時間複雜度

根據我們上邊的時間複雜度算法

     1.去掉運作時間中的所有加法常數: 沒有加法常數不用考慮

     2.隻保留最高階項: 隻保留 

算法時間複雜度

     3. 去掉與這個最高階相乘的常數:  去掉

算法時間複雜度

  隻剩下 

算法時間複雜度

     最終這個算法的時間複雜度為

算法時間複雜度

再看一個線性的

      for ( int i = 0; i < n; i++) {

          // do .....

     因為循環要執行n次是以時間複雜度為O(n)

其它的我也就不一個一個算了,下面給出了常用的時間複雜度

排序法

最差時間分析

平均時間複雜度

穩定度

空間複雜度

冒泡排序

O(n2)

穩定

O(1)

快速排序

O(n*log2n)

不穩定

O(log2n)~O(n)

選擇排序

二叉樹排序

不一頂

O(n)

插入排序

堆排序

希爾排序

O

上一篇: vue元件插槽
下一篇: Vue拖拽元件

繼續閱讀