算法:算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或多個操作。
為什么把數據結構和算法一起說?
想想羅密歐與朱麗葉,梁山伯和祝英臺,少了一個你總會覺得奇怪吧。
算法的五個基本特性:
- 輸入:有0個或多個輸入;
- 輸出:有1個或多個輸出;
- 有窮性:步驟有限,不能無窮循環下去;
- 確定性:有確定的含義,不能出現二義性;
- 可行性:每一步都能通過有限次數完成。
算法設計的要求:
- 正確性:能正確反映問題,得到問題的正確答案;
- 可讀性:便于閱讀、理解和交流;
- 健壯性:即使輸入不合法,算法也能處理,而不是出現異常或中止;
- 時間效率高和存儲量低:像生活中人們所希望的花最少時間,辦最大的事。
算法效率的度量方法:
- 事后統計法:利用測試好的程序和數據,用計算機測試運行時間判斷算法的優劣。這種方法有很大缺陷,必須事先設計好程序,風險大;時間很可能依賴于計算機硬件配置;算法測試的數據選擇困難,如數據量大小會影響運行時間。
- 事前分析估算法:在程序編制前,進行估算。取決于以下因素:算法采用的策略、方法(算法好壞的根本);編譯產生的代碼質量(軟件);問題的輸入規模;機器指令執行的速度(硬件條件)。
算法時間復雜度推導方法:
- 用行數1取代運行時間中的所有加法常數;例如,f(n)=1,f(n)=5等的時間復雜度都是O(1),也稱為常數街;
- 在修改后的運行次數函數中,只保留最高階的項;
- 如果最高階存在且不是1,則去除與這個項相乘的常數。
得到的結果就是大O階。