在學c語言程式設計的時候,相信很多朋友都不會涉及時間複雜度和空間複雜度的概念,我在學譚浩強的c的時候,也不曾有過關於複雜度的概念,後來學習了資料結構,其中裡面的幾種結構,才真正對複雜度有了認識,原因是c語言程式設計,即使是acm程式題,也未必有嚴格的時間和空間限制,乙個小小的程式,少則30行,多則6、70行,恐怕也就0.幾秒,但是一旦當程式的功能逐漸增多,需要解決的問題逐漸細化,而使程式變得異常龐大時,一旦執行起來,就不是幾秒的問題,更何況使用者還不是我們這些親生的父母!想想那些使用者們如何受得了!
拿氣泡排序來說,時間複雜度是n的平方,即使最理想的情況下, 也只是可憐的n,所以可見,乙個好的演算法對乙個問題的解決是多麼的重要!
空間複雜度說的應該是記憶體的問題,從記憶體的角度來分析和看問題,乙個程式的好壞,程式占用的記憶體的資源的優劣,看它記憶體的申請情況,記憶體是否得到有效的利用。
比如分配記憶體有兩種方法:1、直接定義變數,因為定義變數的同時就申請了記憶體空間;2,malloc,這是在堆記憶體中申請,當然因為不同的變數,其空間的性質是不一樣的,根據記憶體的實際情況,有棧 堆 文字常量區 靜態儲存區,雖然都是記憶體,但每乙個的使用又都是不一樣的,可自己看書
我對空間複雜度的理解就是對記憶體的使用效率
這兩個概念是乙個程式好壞的判斷指標吧,當然,不一定兩個都好才是最優的,這要看使用者的需求,可能使用者需要程式的時間盡可能短,那就有可能犧牲空間複雜度換來時間複雜度,有的可能剛好相反。比如陣列,就是典型的以時間換空間的結構,而鍊錶則是典型的以空間換時間的資料結構。
注意:以上僅是我個人在閒人一枚的時候,發發吐沫,可能會有表述和知識上的錯誤認識,望路過的朋友給予指點和批評,也希望和你**和交流程式設計
關於時間複雜度和空間複雜度
如何判別乙個演算法的好壞 首先,這個演算法必須是正確的 其次,好的演算法應具有幸福感,便於人們理解和交流,並且是機器可執行的。這個演算法還需要足夠健壯,即當輸入的資料非法或不合理時,也能適當的做出正確的反應或進行相應的處理 最後它還必須擁有高效率和低儲存量要求。也就是時間複雜度和空間複雜度佔的地方越...
關於時間複雜度和空間複雜度
空間複雜度 大o表示法是演算法的漸進時間複雜度,感覺是從數量級?的角度來描述演算法時間複雜度的增長趨勢?大o表達其實表示的不是精確的時間消耗,而是關注其屬於的量級。比如o n n 2 o n 2 而過分糾結o 2n o 3n 和o 2n 3n 是沒有意義的,因為其全可以表達為o n 看該演算法以怎樣...
時間複雜度和空間複雜度(一)
如何度量演算法的效率?效率一般指演算法的執行時間。那麼如何度量演算法的執行時間?事後統計方法 可以把演算法跑若干次,用計時器計時 通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率高低。缺陷 必須依據演算法,事先編制好測試程式,大量耗費時間精力。...