算法:算法是解決特定問題的求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或者多個操作
一:算法的特性
算法的5個基本特性:輸入,輸出,有窮性,確定性,可行性
1》輸入:算法具有零個或多個輸入。大多數算法都需要輸入參數,但對于個別例如NSLog輸出文本算法們就沒有輸入,所以輸入有零個或者多個
2》輸出:算法至少有一個或者多個輸出。算法必須有輸出,要不你要這個算法干嘛,輸出可以是打印嗎,也可以是返回值等
3》有窮性:指算法在執行有限的步驟之后,自動結束而不會出現無限循環,并且每一個步驟在可接受的時間內完成。(像平時的我們寫了一個死循環,這就不滿足算法要求。還有這個有窮性不一定是理論的有窮,加入一個算法執行10年一定會結束,但是這個算法其實意義也不大)
4》確定性:算法的每一步驟都具有確定的含義,不會出現二義性。也就是說輸出相同的值會出現唯一的輸出結果,每個步驟都會被精確定義而無歧義
5》可行性:算法的每一步都必須是可行的,也就是說,每一步都能通過執行有限的次數完成。也說:可行性意味著算法可以轉換為程序上機運行,并能得道正確的結果
二:算法設計的要求
1》正確性:算法的正確性是指算法至少應該具有輸入,輸出和加工處理無歧義性,能正確反映問題的需求,能夠得道為題的正確答案
2》可讀性:算法設計的另一目的是為了便于閱讀,理解和交流
3》健壯性:當輸入數據不合法時,算法也能做出相關處理,而不是產生異?;蚰涿畹慕Y果
4》時間效率高和存儲量低:也就是我們平時說的時間復雜度和空間復雜度
三:時間復雜度
1,時間復雜度我們一般記作大O,那么這個大O推導方法是什么呢?
1》用常數1取代運行實踐中的所有加法常數
2》在修改后的運行次數函數中,只保留最高階項
3》如果最高階項存在且不是1,則去除與這個項相乘的常數
最后得到的結果就是大O階
2,常見的時間復雜度
上面這些時間復雜度所耗費時間從小到大排序
其實算法時間復雜度有:平均時間復雜度和最壞時間復雜度。
我們一般說的都是最壞時間復雜度
平均的時間復雜度我們一般在概率學上認為是n/2,但是在實際情況中,平均時間復雜度是通過一定數量的實驗數據之后估算出來的
四:算法的空間復雜度
算法的空間復雜度通過計算算法所需的存儲空間實現,算法空間復雜度的計算公式記作S(n)=O(f(n)),其中n位問題的規模,f(n)為語句關于n所占存儲空間的函數