日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

算法的复杂度分析

發(fā)布時(shí)間:2025/4/5 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法的复杂度分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1 算法效率的度量
      • 1.1 算法效率度量的方法
      • 1.2 事后統(tǒng)計(jì)法
      • 1.3 事前分析估算法
    • 2 算法的復(fù)雜度
      • 2.1 算法的復(fù)雜度
      • 2.2 算法的時(shí)間復(fù)雜度
      • 2.3 算法的空間復(fù)雜度

1 算法效率的度量

1.1 算法效率度量的方法

思考:如果兩個(gè)算法都滿足功能性需求,那工程中最關(guān)心的其它特性是什么?如何比較評判呢?

注意:性價(jià)比(比率)是工程中最關(guān)注的算法附件特性!

算法效率度量的方法主要分為兩種:事后統(tǒng)計(jì)法和事前分析估算法。

1.2 事后統(tǒng)計(jì)法

比較不同算法對同一組輸入數(shù)據(jù)的運(yùn)行處理時(shí)間。

缺陷:

  • 為了獲得不同算法的運(yùn)行時(shí)間必須編寫相應(yīng)程序。
  • 運(yùn)行時(shí)間嚴(yán)重依賴硬件以及運(yùn)行時(shí)的環(huán)境因素。
  • 算法的測試數(shù)據(jù)的選取相當(dāng)困難。

事后統(tǒng)計(jì)法不容易準(zhǔn)確度量算法的效率。

1.3 事前分析估算法

依據(jù)統(tǒng)計(jì)的方法對算法效率進(jìn)行估算。

影響算法效率的主要因素:

  • 算法采用的策略和方法。
  • 問題的輸入規(guī)模。
  • 編譯器所產(chǎn)生的代碼。
  • 計(jì)算機(jī)執(zhí)行速度。
  • 事前分析估算法通過操作數(shù)量度量算法效率。







    判斷一個(gè)算法效率時(shí)只需要關(guān)注最高階項(xiàng)就能得出結(jié)論。某個(gè)算法,隨著問題規(guī)模n的增大,它會(huì)越來越優(yōu)于另一個(gè)算法,或者越來越差于另一個(gè)算法。

    結(jié)論:判斷一個(gè)算法的效率時(shí),操作數(shù)量中的常數(shù)項(xiàng)和其他次要項(xiàng)常常可以忽略,只需要關(guān)注最高階項(xiàng)就能得出結(jié)論。


    2 算法的復(fù)雜度

    2.1 算法的復(fù)雜度

    問題:如何用符號(hào)定性的判斷算法的效率?

    算法的復(fù)雜度:

    • 時(shí)間復(fù)雜度:算法運(yùn)行后對事件需求量的定性描述。
    • 空間復(fù)雜度:算法運(yùn)行后對空間需求量的定性描述。

    注意:

    • 數(shù)據(jù)結(jié)構(gòu)課程重點(diǎn)關(guān)注的是算法的效率問題,因此,整個(gè)課程會(huì)集中于討論算法的時(shí)間復(fù)雜度;但其使用的方法完全可以用于空間復(fù)雜度的判斷!

    2.2 算法的時(shí)間復(fù)雜度

    時(shí)間復(fù)雜度是算法運(yùn)行時(shí)對于時(shí)間的需求量,大O表示法用于描述算法的時(shí)間復(fù)雜度,大O表示法只關(guān)注操作數(shù)量的最高次項(xiàng)。

    大O表示法:

    • 算法效率嚴(yán)重依賴于操作(Operation)數(shù)量。
    • 操作數(shù)量的估算可以作為時(shí)間復(fù)雜度的估算。
    • 在判斷時(shí)首先關(guān)注操作數(shù)量的最高次項(xiàng)。

      常見的時(shí)間復(fù)雜度如下:



      常見的時(shí)間復(fù)雜度列出如下:

      常見的時(shí)間復(fù)雜度的比較:

      一般而言,工程中使用的算法,時(shí)間復(fù)雜度不超過O(n^3)。

    算法分析示例:

    算法的最好與最壞情況:

    • 當(dāng)算法在最壞情況下仍然能滿足需求時(shí),可以推斷,算法的最好情況和平均情況都滿足需求。
    • 一般情況下,如果沒有特殊說明,我們所分析算法的時(shí)間復(fù)雜度都是指最壞時(shí)間復(fù)雜度。

    2.3 算法的空間復(fù)雜度

    算法的空間復(fù)雜度(Space Complexity):

    • 定義:S(n) = S(f(n))
      • n為算法的問題規(guī)模。
      • f(n)為空間使用函數(shù),與n相關(guān)。

    推到時(shí)間復(fù)雜度的方法同樣適用于空間復(fù)雜度,例如:當(dāng)算法所需要的空間是常數(shù)時(shí),空間復(fù)雜度為S(1)。

    空間復(fù)雜度計(jì)算示例:

    空間與時(shí)間的策略:

    • 多數(shù)情況下,算法的時(shí)間復(fù)雜度更令人關(guān)注。
    • 如果有必要,可以通過增加額外空間降低時(shí)間復(fù)雜度。
    • 同理,也可以通過增加算法的耗時(shí)降低空間復(fù)雜度。

    實(shí)例分析:空間換時(shí)間

    /*問題: 在一個(gè)由自然數(shù)1-1000中某些數(shù)字所組成的數(shù)組中,每個(gè)數(shù)字可能出現(xiàn)零次或者多次。設(shè)計(jì)一個(gè)算法,找出出現(xiàn)次數(shù)最多的數(shù)字。 */#include <iostream>using namespace std;void search(int a[], int len) // O(n) {int sp[1000] = {0};int max = 0;for(int i=0; i<len; i++){sp[a[i] - 1]++;}for(int i=0; i<1000; i++){if( max < sp[i] ){max = sp[i];}}for(int i=0; i<1000; i++){if( max == sp[i] ){cout << i + 1 << endl;}} }int main(int argc, char* argv[]) {int a[] = {1, 1, 3, 4, 5, 6, 6, 6, 3, 3};search(a, sizeof(a)/sizeof(*a));return 0; }

    面試題:當(dāng)兩個(gè)算法的大O表示法相同時(shí),是否意味著兩個(gè)算法的效率完全相同?

    • 不相同,只是在一個(gè)數(shù)量級(jí)上。

    參考資料:

  • 數(shù)據(jù)結(jié)構(gòu)實(shí)戰(zhàn)開發(fā)教程
  • 總結(jié)

    以上是生活随笔為你收集整理的算法的复杂度分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。