2.3兩種演算法的比較
#include #if 0 //需要執行 100次
int main()
std::cout << sum;
return 0;
}#endif
#if 1
int main()
#endif
//顯然 第二個演算法更優秀
//演算法:解決特定問題求解的描述, 在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作
2.4演算法定義
演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
2.5演算法的特性
輸入輸出:零個或多個輸入,至少乙個或多個輸出。
有窮性:有限的步驟,每個步驟在可接受的時間內完成
確定性:每一步都有確定的含義,沒有二義性
可行性:每一步都必須可行,執行有限次數完成
2.6演算法的設計
正確性可讀性
健壯性時間效率高和儲存量低
2.7演算法效率的度量方法
2.7.1事後統計方法:通過寫好的測試程式和資料,利用計算機對不同演算法比較,然後確定效率
缺點:必須事先把程式寫好,時間的快慢依賴計算機,演算法測試資料設計困難
2.7.2事前分析估計方法 :程式設計前對程式進行估計
缺點:依賴演算法的好壞
2.10常見的時間複雜度
o(1):表示演算法的執行時間為常量
o(n):表示該演算法是線性演算法
o(㏒2n):二分查詢演算法
o(n2):對陣列進行排序的各種簡單演算法,例如直接插入排序的演算法。
o(n3):做兩個n階矩陣的乘法運算
o(2n):求具有n個元素集合的所有子集的演算法
o(n!):求具有n個元素的全排列的演算法
優
o(1)2n)2)n)
排序法
最差時間分析
平均時間複雜度
穩定度
空間複雜度
氣泡排序
o(n2)
o(n2)
穩定 o(1)
快速排序
o(n2)
o(n*log2n)
不穩定
o(log2n)~o(n)
選擇排序
o(n2)
o(n2)
穩定 o(1)
二叉樹排序
o(n2)
o(n*log2n)
不一頂
o(n)
插入排序
o(n2)
o(n2)
穩定 o(1)
堆排序o(n*log2n)
o(n*log2n)
不穩定
o(1)
希爾排序oo
不穩定
大話資料結構 第二章 演算法(讀書筆記)
第二章演算法 2.1 開場白 2.2 資料結構與演算法關係 梁山伯與祝英台 2.3兩種演算法的比較 2.4 演算法定義 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。2.5演算法的特性 2.5.1輸入輸出 演算法具有零個或多個輸入,至少有乙個或多...
《大話資料結構》筆記 第二章 演算法(下)
給定兩個函式 f n 和 g n 如果存在乙個整數 n,使得對於所有的 n n,f n 總大於 g n 那麼我們說 f n 的增長漸近快於 g n 例如,演算法 a 要 2n 3 次操作,而演算法 b 要 3n 1 次。隨著 n 的增大,比較執行次數時,我們可以忽略加法常數。再例如,演算法 c 是 ...
老楊《大話資料結構》第二章 演算法
演算法是解決特定問題求解步驟的描述,計算機中表現為指令的有限序列,每條指令表示乙個或者多個操作。輸入輸出 有窮性確定性 可行性正確性 可讀性健壯性 時間效率高和儲存量低 事後統計方法 事前分析估計方法 通過書中所給1 2 99 100的例子,可以明顯對比出幾種不同演算法具有不同的空間和時間開銷。某個...