演算法設計與分析學習筆記 第一章 演算法引論

2021-09-11 22:39:41 字數 1643 閱讀 2804

通俗定義:解決問題的方法或過程。

嚴格定義:

•輸入 有0個或多個輸入

•輸出 有乙個或多個輸出

•確定性 每條指令清晰、無歧義

•有限性 指令執行次數和時間都有限

演算法的效能標準

•正確性

•效率與低儲存量需求

演算法的事前估計

時間複雜度度量:

•執行時間=演算法中每條語句執行時間之和。

•每條語句執行時間=該語句的執行次數(頻度)* 語句執行一次所需時間。

•語句執行一次所需時間取決於機器的指令性能和速度和編譯所產生的**質量,很難確定。

•設每條語句執行一次所需時間為單位時間,則乙個演算法的執行時間就是該演算法中的所有語句的頻度之和。

時間複雜度的表示

•演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間複雜度量度記作:

t(n)=o(f(n))

稱作演算法的漸進時間複雜度,簡稱時間複雜度

•常見演算法時間複雜度:

o(1): 表示演算法的執行時間為常量

o(n): 表示該演算法是線性演算法

o(logn): 對數時間複雜度,如二分查詢演算法

o(n2): 陣列排序的簡單演算法,如直接插入排序

o(n3): 做兩個n階矩陣的乘法運算

o(2n): 求具有n個元素集合的所有子集的演算法

o(n!): 求具有n個元素的全排列的演算法

演算法複雜性在漸進意義下的階:

設f(n)和g(n)是定義在正數集上的正函式。

o的定義:如果存在正的常數c和自然數n0,使得當n>=n0時有:

f(n)<=c*g(n)

則稱函式f(n)當n充分大時上有界,且g(n)是它的乙個上界,記為:

f(n)=o(g(n))

即f(n)的階不高於g(n)的階

根據o的定義,容易證明它有如下運算規則:

(1)o(f)+o(g)=o(max(f,g));

(2)o(f)+o(g)=o(f+g);

(3)o(f)o(g)=o(fg);

(4)如果g(n)=o(f(n)),則o(f)+o(g)=o(f);

(5)o(c x f(n))=o(f(n)),其中c是乙個正的常數

(6)f=o(f).

ω的定義:如果存在正的常數c和自然數n0,使得當n>=n0時有f(n)>=cg(n),則稱函式f(n)當n充分大時下有界,且g(n)是它的乙個下界,記為f(n)=ω(g(n))。即f(n)的階不低於g(n)的階。

θ的定義:定義f(n)=θ(g(n))當且僅當f(n)=o(g(n))且f(n)=ω(g(n))。此時稱f(n)與g(n)同階。

o的定義:對於任意給定的ε>0,都存在正整數n0,使得當n>=n0時有f(n)/cg(n)<=ε,則稱函式f(n)當n充分大時的階比g(n)低,記為f(n)=o(g(n)).

例如,4nlogn+7=o(3n2+4nlogn+7)

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

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

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

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

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

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