算法應該滿足的五個特性
1、有窮性
2、確定性
3、可行性
4、有輸入
5、有輸出
設計算法考慮的因素:
1、正確性:a.程序中不含語法錯誤b.程序對於幾組輸入數據能滿足要求c、對於精心選擇、典型、可可且帶有刁難性d、對於所有一切合法的輸入數據都能滿足要求
2、可讀性:易於人的理解;晦澀難讀的程序易於隱藏較多錯誤而難以調試;
3、健壯性:
4:高效率與地存儲
三、算法效率的衡量方法和準則
事後統計法
缺點:1、必須執行程序
2、其他因素掩蓋算法本質
事前分析估算法
和算法執行時間相關的因素:
1、算法選用的策略
2、問題的規模
3、編寫程序的語言
4、編譯程序產生的機器代碼的質量
5、計算機執行指令的速度
T(n) = O(f(n))
稱T(n)爲算法的(漸進)時間複雜度
如何估算算法的時間複雜度?
算法 = 控制結構 + 原操作(固有數據類型的操作)
算法的執行時間 與 原操作執行次數之和成正比
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
c[i,j] = 0;
for(k = 1; k <= n;++k)
選擇排序
void select_sort(int a[], int n) {
基本操作:比較(數據元素)操作
語句的頻度
void bubble_sort(int a[], int n) {
for (i = n-1,change=TRUE; i>1&&change; --i)
{
change = FLASE;
for (j =0;j<i;++j)
{
if (a[j]>a[j+1])
{
a[j] <-->a[j+i];
change =TRUE;
}
}
}
}
算法的存儲量包括:
1、輸入數據所佔空間