《演算法圖解》 第11章 簡介一些演算法
一些有趣的演算法:
回顧 陣列+二分查詢 簡介了 二叉查詢樹(binary search tree)的資料結構.
反向索引 很有用的資料結構: 一個散列表,將單詞對映到包含它的頁面。這種資料結構被稱為反向索引(inverted index),常用於建立搜尋發動機。
傅立葉變換非常適用於處理訊號,可使用它來壓縮音樂。首先將音訊檔案分解為音符,傅立葉變換能準確地指出各個音符對整個歌曲的貢獻,讓你能夠把不重要的音符刪除。這就是MP3的工作原理。JPG也是一種壓縮格式,也用到了上述的工作原理。
可擴充套件性與海量處理:
並行演算法,多核也難以多倍提升速度:
並行性管理開銷。
負載均衡。
特殊的演算法——分散式演算法MapReduce:
對映(map)函式:
歸併(reduce)函式:
布隆過濾器和HyperLogLog(佔用記憶體空間少,預測結果比較準確,用來處理海量資料):
布隆過濾器是概率型資料結構
可能錯報 報蒐集過實際上未蒐集
不可能漏報 舉例;這個網站未蒐集就肯定未蒐集
HyperLogLog 一種類似於布隆過濾器的演算法:
SHA演算法 (區域性不敏感,稍微修改就會生成大不同的雜湊值):
安全雜湊演算法(secure hash algorithm,SHA)函式 根據一個字串生成另一個字串(雜湊值)
密碼登入 時,可以通過比較雜湊值。儲存在 資料庫中的 雜湊值 和 使用者密碼生成的 雜湊值 做比較
simhash (區域性敏感,可以查重文章之類的)
Diffie-Hellman金鑰交換
雙方無需知道加密演算法,不必會面協商要使用的加密演算法
要破解加密的訊息比登天還難
Diffie-Hellman:公鑰和私鑰。
公鑰加密再發布,接收的人用私鑰進行解密得知解密資訊。替代者為RSA。
線性迴歸:
線性規劃用於在給定約束條件下最大限度地改善指定的指標。
所有的圖演算法都可以用線性規劃來實現。線性規劃師寬泛得多的框架,圖問題只是其中的一個子集。
線性規劃使用simplex演算法,這個演算法比較複雜,此書沒有介紹。