演算法分析與設計 演算法及效率分析基礎(一)

2021-10-03 03:51:39 字數 3113 閱讀 5224

1、演算法 :解決問題的一種方法或乙個過程,是乙個由若干運 算或指令組成的有窮序列

2、演算法—問題:求解問題的演算法可以看作是輸入例項與輸出之間的函式

3、演算法的特點 :input, output(輸入,輸出) 

deterministic (確定性)

feasible(可行性)

finite(有窮性)

1、正確的演算法 :對任意乙個輸入,演算法能得到乙個正確的輸出

2、迴圈不變數 :與程式變數有關的乙個語句,它在迴圈剛開始前,以及在 迴圈的每個迭代執行後為真,特別是在迴圈結束後,仍然 為真。

3、 插入排序的迴圈不變數  :在for迴圈第j個迭代執行前,子陣列a[1.. j-1]由最初a[1.. j-1]中的元素構成,不過現在是有序的。

4、利用迴圈不變數證明演算法的正確性 

最壞情形是任何規模為的問題例項運w行時間的上界,即任何規模為的例項,其執行時間都不會超過最壞情形的執行時間。 知道最壞情形執行時間後,我們就知道演算法最差到什麼程度。對某些演算法,最壞情形經常發生。例如在某個資料庫中查詢不存在的某條資料就是查詢演算法的最壞情形,平均情形有時跟最壞情形差不多。

賦值語句:←

分支語句:if …then … [else…]

迴圈語句:while,  for,repeat  until

轉向語句:goto

輸出語句:return

呼叫:直接寫過程的名字

注釋://…

演算法最壞情況下

平均情形下

插入排序

o(n^2)

o(n^2)

氣泡排序

o(n^2)

o(n^2)

快速排序

o(n^2)

o(nlogn)

堆排序o(nlogn)

o(nlogn)

二分歸併排序

o(nlogn)

o(nlogn)

• 建模:對輸入引數和解給出形式化或半形式化的描述

• 設計演算法: 採用什麼演算法設計技術 正確性——是否對所有的例項都得 到正確的解

• 分析演算法——效率

定義:設  f  和 g是定義域為自然數集  n上的函式.  若存在正數 c 和 n0,使得 對一切 n > n0有                      

0 < f(n) < c g(n)  成立,

則稱 f(n) 的漸近的上界是 g(n), 記作 f (n) = o(g(n)) 

例子:設 f(n) = n^2 + n,則      

f(n)=o(n^2),取 c = 2,n0 =1 即可      

f(n)=o(n^3),取 c = 1,n0 =2 即可 

1.  f (n) = o(g(n)) ,f(n)的階不高於g(n)的階.

2. 可能存在多個正數c,只要指出乙個即可. 

3. 對前面有限個值可以不滿足不等式. 

4. 常函式可以寫作o(1). 

定義:設  f  和 g是定義域為自然數集  n上的函式.  若存在正數 c 和 n0,使 得對一切 n >= n0有                    

0 <= cg(n) <= f(n) 成立,

則稱 f(n) 的漸近的下界是 g(n), 記作 f (n) =ω(g(n)) 

例子:

設 f(n) = n^2 + n,則      

f(n) =ω(n^2),  取 c = 1, n0 =1即可      

f(n) =ω(100n), 取 c=1/100,  n0 =1即可 

1.  f (n)=ω(g(n)),f(n)的階不低於g(n)的階.

2. 可能存在多個正數c,指出乙個即可.

3. 對前面有限個 n 值可以不滿足上述不等式.

定義 :設  f  和 g是定義域為自然數集 n上 的函式. 若對於任意正數 c 都存在 n0,使得對一切 n >= n0有                      

0 <=  f(n) < c g(n)  成立,

則記作 f (n) = o(g(n))  

例子:

f(n)=n^2+n,則f(n)=o(n^3)例子 c>=1顯然成立,因為n^2+n任給1>c >0, 取 n0 > [2/c] 即可.  因為cn >= cn0 > 2        (當n > n0)                

n^2+n < 2n^2 < cn^3 

1.  f (n) = o(g(n)) , f(n)的階低於g(n)的階

2. 對不同正數c, n0不一樣.  c越小n0越大 

3. 對前面有限個 n 值可以不滿足不等式

定義:設  f  和 g是定義域為自然數集 n上 的函式.  若對於任意正數 c 都存在 n0,使 得對一切 n >= n0有

0 <= cg(n) < f(n) 成立,

則記作f (n) =ω(g(n))  

例子:

設 f (n) = n^2 + n,則f (n) =ω(n),不能寫  f (n) =ω(n^2),因為取 c = 2,不存在n0使得對一切 n> n0有下式成立                 c n^2 = 2n^2< n^2 + n   

1.  f (n)=ω(g(n)), f (n)的階高於g(n) 的階.  

2. 對不同的正數c, n0不等,c 越大n0 越大.  

3. 對前面有限個 n 值可以 不滿足不等式. 

若 f (n) = o (g(n)) 且 f (n) =ω(g(n)),  則記作 f (n) =θ(g(n))   

例子:f(n) =n^2 + n, g(n) =100n^2,那麼有 f (n) =θ(g(n))

1.  f(n) 的階與 g(n) 的階相等.

2.  對前面有限個n 值可以不滿足條件.

演算法分析 演算法的漸進效率分析

一般用於界定函式集合的上界,漸進表示式o g n 的含義就是,c為正常數,函式集合o中的元素的最大值不會超過c.g n f n o g n 的含義是,函式f n 的屬於集合o g n 因為函式集合o中的最大值為c.g n 所以f n 的最大值為c.g n 由於只是漸進的上界,所以當函式g n 的階數...

演算法設計與分析

輸入輸出 確定性有窮性 np類問題是非確定性計算模型下的易驗證問題類。所有可以在多項式時間內求解的判定問題構成p類問題 1 二分搜尋技術 二分搜尋演算法的基本思路是對給定已排好序的n個元素a 0 n 1 在這n個元素中找出乙個特定元素x。運用分治的思想,將n個元素以n 2為中心對半分。if x a ...

演算法分析與設計

分析,此題可以用動態規劃來做。子問題為 max i max i 1 0 max i 1 nums i nums i max i 表示以nums i 結尾的子串的最大和,最後返回最大的那個即為所求,複雜度為o n class solution return max 另一種實現方法,更加簡潔,即從前往後...