读书笔记-《大话数据结构》第二章算法
2.3兩種算法的比較
?
#include <iostream> #if 0 //需要運行 100次 int main() {int i,sum=0,n=100;for(i=1;i<=n;i++){sum=sum+i;} std::cout << sum;return 0; } #endif #if 1 int main() {//運行一次 int sum=0,n=100;sum=(1+n)*n/2;std::cout << sum; } #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)<O(n)<O(n2)<O(2n)
排序法
| ? | 最差時間分析 | 平均時間復雜度 | 穩定度 | 空間復雜度 |
| 冒泡排序 | 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) |
| 希爾排序 | O | O | 不穩定 | O(1) |
?
轉載于:https://www.cnblogs.com/hiwoshixiaoyu/p/10035074.html
總結
以上是生活随笔為你收集整理的读书笔记-《大话数据结构》第二章算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs--bookmark用法
- 下一篇: 《OD大数据实战》Flume环境搭建