如何判別乙個演算法的好壞:首先,這個演算法必須是正確的
其次,好的演算法應具有幸福感,便於人們理解和交流,並且是機器可執行的。
這個演算法還需要足夠健壯,即當輸入的資料非法或不合理時,也能適當的做出正確的反應或進行相應的處理
最後它還必須擁有高效率和低儲存量要求。也就是時間複雜度和空間複雜度佔的地方越小,算得越快的演算法才是好演算法。
什麼是時間複雜度?在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。
時間複雜度為什麼不使用時間來衡量而使用基本語句的執行次數來衡量?因為時間複雜度可以推演,能**就是它的價值所在。
而實際執行時間只能在實踐中記錄,不能**。這就意味著,想要看看是否改進了,還得先執行一遍。對於執行一遍時間成本太高的程式以及需要通過預估來衡量不同演算法優劣時,**的價值就會顯現出來。
時間複雜度的o漸進表示法?1.用常數1取代執行時間中的所有加法常數.2.在修改後的執行次數函式中,只保留最高端項3.如果最高端項存在且不唯1,則去除與這個專案相乘的常數,得到的結果就是大o階.
時間複雜度的:最優、平均、最差情況,為什麼時間複雜度看的是最差情況?
1.如果最差情況下的複雜度符合我們的要求,我們就可以保證所有的情況下都不會有問題。
2、也許你覺得平均情況下的複雜度更吸引你,但是:第一,難計算. 第二,有很多演算法的平均情況和最差情況的複雜度是一樣的. 第三,而且輸入資料的分布函式很可能是你沒法知道。
什麼是空間複雜度?
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。
如何求空間複雜度? 普通函式&遞迴函式
普通函式使用了常數個額外空間,一般空間複雜度為o(1),遞迴函式一般空間複雜複雜度位為o(n).
分析遞迴斐波那契數列的:時間、空間複雜度,並對其進行優化,偽遞迴優化--->迴圈優化
可參考以下博文:
關於時間複雜度和空間複雜度
空間複雜度 大o表示法是演算法的漸進時間複雜度,感覺是從數量級?的角度來描述演算法時間複雜度的增長趨勢?大o表達其實表示的不是精確的時間消耗,而是關注其屬於的量級。比如o n n 2 o n 2 而過分糾結o 2n o 3n 和o 2n 3n 是沒有意義的,因為其全可以表達為o n 看該演算法以怎樣...
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...