理解:
輸入到輸出的計算過程稱為演算法。
1.演算法描述
2.證明演算法正確性
3.分析演算法效率
兩個例子:
1.插入排序
思想:
從未排序的序列中取出乙個元素,將其插入到已排序序列的正確位置。
實現:
#include
#include
using
namespace
std;
int main()}}
for (int i=0; icout
<< order[i] << " ";
cout
<< endl;
return
0;}
2.歸併排序
思想:
分治,遞迴的思想,對於乙個未排序的序列將其遞迴的分成兩份,再將其合併為有序序列。
實現:
#include
#include
#include
using
namespace
std;
vector
merge_sort( vector
arr, int start, int end);
vector
merge( vector
arr, int start, int mid, int end);
vector
merge_sort( vector
arr, int start, int end)
return arr;
}vector
merge( vector
arr, int start, int mid, int end)
else
}return comb;
} int main()
漸近記號包括:
(1)θ(theta):緊確界。 相當於」=」
(2)o (大歐):上界。 相當於」<=」
(3)o(小歐):非緊的上界。 相當於」<」
(4)ω(大omega):下界。 相當於」>=」
(5)ω(小omega):非緊的下界。 相當於」>」
主方法:
t(n) = at(n/b)+h(n)
a >=1 ; b >1 ; h(n) : 不參與遞迴的複雜度函式
判斷n^log b (a)與h(n)的大小關係
等於θ(h(n)) :該方法的複雜度為 θ(h(n)*lg(n))
大於θ(h(n)) :該方法的複雜度為 θ(n^(log a/log b))
小於θ(h(n)) :該方法複雜度為 θ(h(n))
讀書筆記 演算法導論
第2章演算法入門 浮於表面不如深入其中,送給自己,自己是最大的敵人,那麼就盡最大努力去克服自己,沉思,冷靜,不浮躁!勘誤 在演算法導論第9頁,扼要的扼 內容提要 1 偽 的表示方法 2 插入排序演算法分析 3 迴圈不變式 4 演算法設計之分治法 divide and conquer 5 合併排序演算...
演算法導論 讀書筆記2010 12 6
演算法就是一系列的計算步驟,用來將輸入資料轉換為輸出結果。資料結構師儲存和組織資料的一種方式,以便於對資料進行訪問和修改。插入排序演算法,對n個資料項的時間大約是c1n 2,其中c1是乙個不依賴於n的常量。亦即該演算法所需的時間大致與n 2成正比。合併排序演算法,排序n個資料項的時間大約是c2log...
演算法導論讀書筆記(3)
當輸入規模大到使執行時間只和增長的量級有關時,就是在研究演算法的漸近效率。就是說,從極限角度看,我們只關心演算法執行時間如何隨著輸入規模的無限增長而增長。表示演算法的漸近執行時間的記號是用定義域為自然數集n 的函式來定義的。這些記號便於用來表示最壞情況執行時間 t n 對乙個給定的函式 g n 用 ...