算法設計與分析複習——第一章:算法引論

 

第一章:算法引論

1,什麼是算法?算法有哪些基本特徵?請指出算法同程序的相同點與不一樣點 算法

         答:算法是解決問題的方法或過程,是知足如下四個性質的指令序列 ide

1輸入:有 0 個以上的輸入                               2輸出:至少有 1 個輸出 函數

3肯定性:指令清晰、無歧義                            4有限性:指令執行次數有限,時間有限 測試

5)可行性: spa

        算法和程序的相同點:二者都具備輸入、輸出和肯定性的特徵 不一樣點:程序是算法用某種程序語言的具體實現,程序不知足算法具備的有限性性質 請描述算法設計的通常過程。 設計

2,請描述算法設計的通常過程。 3d

答:算法設計的通常過程是 1)提出問題 2)肯定數學模型 3)明確目的、條件和約束關係 4)設計求解步驟 5)結果評估與分析 若是在第 5 步的分析中對算法時間、空間複雜度或結果不滿意,能夠返回第 1 步或第 4 步進一步迭代,直至找到滿意的算法。 orm

3,什麼是算法複雜性?它主要有哪兩個方面構成? blog

         答:算法複雜性是算法運行時所須要的計算機資源的量,它包括兩個方面:時間複雜性(需 要時間資源的量)和空間複雜性(須要空間資源的量) ci

4,時間複雜性分析主要分哪三種狀況,哪一種狀況的可操做性最好,最具備實際價值?

         答:時間複雜性分爲 3 種狀況,最好狀況、平均狀況、最壞狀況,可操做性最好,最具備實 際價值的是最壞狀況下的時間複雜性。

         最壞狀況時間複雜性是規模爲n的全部輸入中,基本運算執行次數爲最多的時間複雜性。

   平均狀況時間複雜性是規模爲n的全部輸入的算法時間複雜度的平均值 (通常均假設每種輸入狀況以等機率出現)。

5,表示漸進時間複雜性的三個記號的具體定義是什麼?

答:1. T(n)= O(f(n)):若存在c > 0,和正整數n01,使得當nn0時, 總有 T(n)c*f(n) (給出了算法時間複雜度的上界,不可能比c*f(n)更大)

       2. T(n)=Ω(f(n)):若存在c > 0,和正整數n01,使得當nn0時, 存在無窮多個n ,使得T(n)c*f(n)成立。(給出了算法時間複雜度的下界,複雜度不可能比c*f(n)更小)

       3. T(n)= Θ(f(n)):若存在c1,c2>0,和正整數n01,使得當nn0時, 總有 T(n)c1*f(n),且有無窮多個n,使得T(n)c2*f(n)成立, 即:T(n)= O(f(n))T(n)=Ω(f(n))都成立。(既給出了算法時間複雜度的上界,也給出了下界)。

 

6,算法研究有哪幾個主要步驟?主要從哪幾個方面評價算法?

答:算法研究的主要步驟是1)設計2)表示 3)確認,合法輸入和不合法輸入的處理 4)分析 5)測試。

評價算法的標準有1)正確性 2)健壯性 3)簡單性 4)高效性 5)最優性

 

7,各類增加函數的含義。

         答:

        

數學表達式

相對增加率

T(N)=O(g(N))

T(N)的增加 g(N)的增加

T(N)=Ω(g(N))

T(N)的增加 g(N)的增加

T(N)=θ(g(N))

T(N)的增加 g(N)的增加

T(N)=o(g(N))

T(N)的增加 g(N)的增加

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(an)<O(n!)<O(nn)

例題:

1

2,

 

3,

 

4,

 

5,

 

6,若是算法A由三個步驟組成,其中第一步的時間複雜性爲O(n2),第二步的時間複雜性爲O(nlogn),第三步的時間複雜性爲O(n),請問算法A的時間複雜性是多少?

答:O(n2)

7, 解決某問題有三種算法,複雜性分別爲1000N10N2 2N ,在一臺機器上可處理問題的規模分別爲S1 S2 S3 。若機器速度提升到原來的10倍,問在一樣時間內可處理問題的大小如何?

         答:

複雜性       原來處理問題規模      速度提升之後    

 1000N            S1                    10S1

  10N2            S2                   3.16S2

   2N             S3               S3 +log10 S3 +3.32

8,問題P的算法複雜度爲T(n)=n3(毫秒),現改善爲T(n)=n2(毫秒)。問原來運行一小時的問題實例,如今要運行多少時間?

答:

設實例大小爲n

        n3=3600*1000

        n=153.3

       如今須要時間t=153.32毫秒≈ 23.5

 

9

1),f(n) = 2n + 3 = O(n)

n3時,2n+33n,因此,可選c = 3n0 = 3。對於nn0f(n) = 2n + 33n,因此,f(n) = O(n),即2n + 3O(n)。這意味着,當n3時,程序2-1的程序步不會超過3n2n + 3 = O(n)

 

2),f(n) = 10n2 + 4n + 2 = O(n2)

對於n2時,有10n2 + 4n + 210n2 + 5n,而且當n5時,5nn2,所以,可選c = 11, n0 = 5;對於nn0f(n) = 10n2 + 4n + 211n2,因此f(n) = O(n2)

3),10n2 + 9  O(n)

使用反證法,假定存在cn0,使得對於nn010n2 + 9cn始終成立,那麼有10n + 9/nc,即nc/10  9/(10n)總成立。但此不等式不可能總成立,取n = c/10 + 1時,該不等式便再也不成立。

相關文章
相關標籤/搜索