程式員必知的10大經典基礎實用演算法,程式員必知實用演算法
程式員必知的10大經典實用演算法
程式員實用演算法是C的還是C++的,還希望各位前輩可以推薦一本好點的C++得資料結構的書
演算法不屬於某一具體語言,一般用虛擬碼來表達邏輯,你用什麼語言,就把這個虛擬碼轉換,改寫為那門語言的具體實現代碼,但要保持演算法邏輯不變。
編程領域上一些經典演算法同時也是程式員必須掌握的演算法
這是我在一個論壇裡看到的,你也參考參考吧。C++的虛函數
======================
C++使用虛函數實現了其對象的多態,C++對象的開始四個位元組是指向虛函數表的指標,其初始化順序是先基類後衍生類別,所以該虛函數表永遠指向最後一個衍生類別,從而實現了相同函數在不同對象中的不同行為,使得對象既有共性,又有其個性。
記憶體池分配、回收之夥伴演算法
=======================
夥伴演算法是空閑鏈表法的一個增強演算法,依次建立2^0\2^1\2^2\2^3...2^n大小的 記憶體塊空閑鏈表,利用相鄰記憶體塊的夥伴性質,很容易將互為夥伴的記憶體塊進行合并移到相應的空閑鏈表或將一塊記憶體拆分成兩塊夥伴記憶體,一塊分配出去,另一塊掛入相應空閑鏈表,使得記憶體的分配和回收變得高效。
AVL樹
=======================
AVL樹是一個平衡二叉樹,其中序遍曆是從小到大排序的,該結構插入節點和檢索非常高效,被廣泛應用
快速排序
=======================
通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。效率非常高
密碼學之非對稱式加密協議(公開金鑰、私密金鑰加密協議)
======================
非對稱式加密演算法需要兩個密鑰,用其中一個加密產生的密文,只能通過另外一個密鑰解密,密鑰持有人A可以將其中一個公開,稱為公用密鑰,另外一個秘密儲存稱為私密金鑰,這樣當某人B想給A傳一封秘信時,只要將密信使用A的公開金鑰加密後,就可以放心使用各種通道將迷信傳給A了,因為該密信只有A可以解密,第三者截取因為無法解密而毫無意義。
該演算法很好地解決了密鑰的安全傳遞的問題,因為公開金鑰和密碼編譯演算法都是公開的,私密金鑰不需要傳輸。
密碼學之數位簽章協議(身份鑒別、防抵賴)
======================
數位簽章也是建立在非對稱式加密基礎之上的,如果A君用它的私密金鑰將檔案加密後在發布,A君就無法抵賴該檔案是其發布的,因為其他人能通過A君的公開金鑰將檔案解密就說明,如果演算法可靠,該檔案一定是A君用其私密金鑰加密的。
由於非對稱式加密演算法的加密和解密很慢,現在的數位簽章並非是將其要發布的資訊用其私密金鑰加密,而是先用一個單項散列演算法如(MD5)產生一個該資訊的比較短的指紋(hash值),對其指紋用其私密金鑰加密後和資訊一併發布,同樣達到了防抵賴的作用。
無回溯字串模式比對-kmp演算法
======================
他是根據子串的特徵,當匹配失敗時,不需要回溯,而是直接將字串向後滑動若干個位元組,繼續匹配,極大提高了匹配速度。該演算法被廣泛使用。詳細請參考資料結構教程。
最小路徑選路-迪傑斯特拉演算法、弗洛伊德演算法
======================
學習資料結構的時候,印象最深的就要算kmp演算法和最小路徑演算法了,因為理解他們比較費腦子,我是不可能發明這些演算法了,發明他們的都是天才,呵呵。
使用最短路徑的演算法曾經幫人寫過一個小東西,還是很有效,記得是使用的弗洛伊德演算法的一個變種,要詳細瞭解的朋友可以尋找相關資料,想將他們使用在你的項目中,代碼直接從教科書上抄就可以了,不需要理解。
tcp協議之-nagle演算法
======================
tcp、ip中令人叫絕的想法很多,印象最深的要算nagle演算法了。
tcp出於效率和流量控制......餘下全文>>