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

2021-09-20 22:34:47 字數 3240 閱讀 5846

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

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

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

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

5)可行性:

演算法和程式的相同點:兩者都具有輸入、輸出和確定性的特徵

不同點:程式是演算法用某種程式語言的具體實現,程式不滿足演算法具有的有限性性質

請描述演算法設計的一般過程。

2,請描述演算法設計的一般過程。

答:演算法設計的一般過程是 1)提出問題 2)確定數學模型 3)明確目的、條件和約束關係 4)設計求解步驟 5)結果評估與分析

如果在第 5 步的分析中對演算法時間、空間複雜度或結果不滿意,可以返回第 1 步或第 4 步進一步迭代,直至找到滿意的演算法。

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

答:演算法複雜性是演算法執行時所需要的計算機資源的量,它包括兩個方面:時間複雜性(需

要時間資源的量)和空間複雜性(需要空間資源的量)。

4,時間複雜性分析主要分哪三種情況,哪種情況的可操作性最好,最具有實際價值?

答:時間複雜性分為 3 種情況,最好情況、平均情況、最壞情況,可操作性最好,最具有實

際價值的是最壞情況下的時間複雜性。

最壞情況時間複雜性是規模為n的所有輸入中,基本運算執行次數為最多的時間複雜性。

平均情況時間複雜性是規模為n的所有輸入的演算法時間複雜度的平均值

(一般均假設每種輸入情況以等概率出現)。

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

答:1. t(n)= o(f(n)):若存在c > 0,和正整數n0≥1,使得當n≥n0時,

總有 t(n)≤c*f(n)。

(給出了演算法時間複雜度的上界,不可能比c*f(n)更大)

2. t(n)=ω(f(n)):若存在c > 0,和正整數n0≥1,使得當n≥n0時,

存在無窮多個n ,使得t(n)≥c*f(n)成立。(給出了演算法時間複雜度的下界,複雜度不可能比c*f(n)更小)

3. t(n)= θ(f(n)):若存在c1,c2>0,和正整數n0≥1,使得當n≥n0時,

總有 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)logn

)nlogn

)n2)n3

)an)nn)。

例題:

1, 2,

3,4,

5,6,如果演算法a由三個步驟組成,其中第一步的時間複雜性為o(n2

),第二步的時間複雜性為o(nlogn),第三步的時間複雜性為o(n),請問演算法a的時間複雜性是多少?

答:o(n2

)7, 解決某問題有三種演算法,複雜性分別為1000n,10n2, 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)

當n≥3時,2n+3≤3n,所以,可選c = 3,n0 = 3。對於n≥n0,f(n) = 2n + 3≤3n,所以,f(n) = o(n),即2n + 3o(n)。這意味著,當n≥3時,程式2-1的程式步不會超過3n,2n + 3 = o(n)。

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

對於n≥2時,有10n2 + 4n + 2≤10n2 + 5n,並且當n≥5時,5n≤n2,因此,可選c = 11, n0 = 5;對於n≥n0,f(n) = 10n2 + 4n + 2≤11n2,所以f(n) = o(n2)。

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

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

演算法設計與分析 第一章演算法概論

可由乙個給定計算模型機械地執行的規則或計算步驟序列稱為該計算模型的乙個計算 演算法是滿足下列條件的計算 輸出 滿足給定約束條件地結果 演算法的目的是求解問題 乙個演算法面向乙個問題,而不是僅求解乙個問題的乙個或幾個例項 偽 例項 input a 1,n n個數 output a 1,n n個sort...

演算法設計與分析 第一章 遞迴演算法

緒論 演算法的五大特性 輸入 乙個演算法有零個或多個輸入。輸出 乙個演算法有乙個或多個輸出。有窮性 乙個演算法必須總是在執行有窮步之後結束,且每一步都在有窮時間內完成。確定性 演算法中的每一條指令必須有確切的含義,對於相同的輸入只能得到相同的輸出。可行性 演算法描述的操作可以通過已經實現的基本操作執...

演算法設計技巧與分析筆記 第一章

1.搜尋 設a 1 n 為乙個n個元素的陣列,判定給定元素x是否在a中 線性搜尋 直接掃瞄a中所有專案,將每個專案與x做比較。二分搜尋 a low high 為有序非空陣列 假定為公升序 a mid 為中間元素 演算法分析 時間複雜度 o log n 2.排序 設a 1 n 為乙個n個元素的陣列,將...