pascal之父——nicklaus wirth,當初憑藉一句話就獲得圖靈獎。這句話就是他提出的著名公式:「演算法 + 資料結構 = 程式」。由此可見資料結構和演算法的重要性。但是現在高階語言滿天飛,隨便乙個學過幾天程式設計的人也能寫出一些簡單的程式,更甚者是現在已經開始流行「低**」、「無**」程式設計,這在一定程度上降低了資料結構和演算法的重要性。但是我們想一想,這樣寫出來的**質量和效率怎麼樣。
很多使用者並不在意軟體背後的**,這也在一定程度上支援安迪比爾定律: 硬體效能的提高總會迅速被新的軟體消耗掉,對使用者來說,除了不知道用不用得上的新功能,最終得到的沒什麼區別。但是寫軟體的人可不能這麼想。想象一下,如果我們要編寫微控制器上執行的**,微控制器的cpu的頻率只有1m,記憶體只有256個位元組,硬碟只有10k。要在這樣的環境下執行的**,我們必須珍惜每一分cpu效率、每乙個byte的記憶體。只有這樣才能寫出高質量、高效率的**。
本書介紹了很多演算法,其中很大一部分只有在特定情況下才需要使用,而有的演算法基本上不會有人用。例如dijkstra演算法,往往在編寫地圖類軟體時才會用到,而floyd-warshall演算法由於時間複雜度過高,基本沒人使用。是不是說這些演算法演算法就沒有價值了呢?顯然不是的,學習這些演算法可以加深我們對各種演算法的理解,提高我們的程式設計能力。所謂厚積而薄發,我們只有在平時多花一點功夫,把這些演算法都熟練掌握 (至少要知道有什麼演算法,能解決什麼問題),才能在寫**時處亂不驚,從容以對,甚至開發出一些演算法的新應用 (例如將dfs演算法用於窮舉)。
Python資料結構和演算法筆記總結
python資料結構 鍊錶鍊錶練習 佇列和棧 雜湊表遞迴 樹二叉樹總結 優劣排序 o 1 o logn o n o nlogn o n 2 o 2 n o n leetcode 力扣 刷題 演算法題多使用內建函式和考慮時間複雜度 內建函式 pytest 測試工具 when changed 自動監控檔...
資料結構和演算法
判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...
資料結構和演算法
程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...