算法時間複雜度

1,算法時間複雜度的定義html

算法時間複雜度用來度量算法執行時間。影響算法執行時間的因素有:算法

  1. 算法選用的策略
  2. 問題的規模
  3. 程序設計語言
  4. 編譯程序所產生的機器碼的質量
  5. 計算機執行指令的速度

衡量時間複雜度一般有兩種方法:過後統計和事前分析。函數

過後統計是指運行依據算法編制的程序,由計算機統計算法執行的時間。依據算法編制程序耗時耗力,並且同一個算法選用不一樣的程序語言編寫執行效率可能不一樣,同一個程序選用不一樣的編譯器編譯的機器碼質量也可能不一樣,不一樣配置的計算機執行機器指令的速度也千差萬別。這些因素都有可能掩蓋算法自己的優劣,不適合做爲算法評估的通用方法。spa

爲了避開過後統計的諸多缺點,採用事前分析,單單評價算法選用的策略的優劣。此時算法執行時間與算法語句執行的次數相關,而語句執行的次數每每與問題的規模相關,即與輸入數據的數量的多少有關。因爲只是定性的分析算法的優劣,因此沒有必要精確計算算法執行的時間,使注意力集中在增加率上,由此引入漸進時間複雜度,簡稱時間複雜度。常使用最深層循環內的語句中的原操做的執行頻度來表示。.net

2,算法時間複雜度的計算方法設計

  • 原始方法
    1. 計算出基本操做的執行次數T(n)
    2. 計算出T(n)的數量級:忽略常量,低次冪,最高次冪的係數
    3. 用大O來表示時間複雜度
  • 進階方法
    1. 用常數1取代執行次數中的全部加法常數
    2. 在修改後的運行次數函數中,只保留最高階項
    3. 若是最高階項存在且不是1,則去除與這個項相乘的常數
  • 先進方法
    1. 找到執行次數最多的語句
    2. 計算語句執行次數的數量級
    3. 用大O來表示結果

3,經常使用算法時間複雜度的比較code

  1. 常數階
  2. 對數階
  3. 線性階
  4. 線性對數階
  5. 冪方階
  6. 指數階
  7. 階乘

1-4代表算法時間效率比較高,5代表通常,6-7比較糟糕htm

4,算法時間複雜度分析實例blog

  1. O(1)
    1 temp = i;
    2 i = j;
    3 j = temp;
  2. O(logn)
    1 i = 1;
    2 while(i <= n)
    3 {
    4     i = i * 2;
    5 }
  3. O(n)
    1 sum = 0;
    2 for(i=1;i<=n;i++)
    3 {
    4     sum = sum + i;
    5 }
  4. O(n2)
    1 sum = 0;
    2 for(i=1;i<=n;i++)
    3 {
    4     for(j=1;j<=n;j++)
    5     {
    6         sum++;
    7     }
    8 }
  5. O(n3)
     1 sum = 0;
     2 for(i=1;i<=n;i++)
     3 {
     4     for(j=1;j<=i;j++)
     5     {
     6         for(k=0;k<j;k++)
     7         {
     8             sum = sum + 2;
     9         }
    10     }
    11 }

5,參考資料編譯器

  1. http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/4070.shtml
  2. https://baike.baidu.com/item/%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6/1894057?fr=aladdin
  3. https://www.cnblogs.com/davygeek/p/4375497.html
  4. http://blog.csdn.net/zolalad/article/details/11848739
  5. http://blog.csdn.net/zhangliangzi/article/details/50680694
相關文章
相關標籤/搜索