因本人最近在惡補數據結構與算法,學識經驗有限,如有不正之處望讀者指正,不勝感激;也望藉此平臺留下學習筆記以溫故而知新。這一篇博客主要是最近剛開始接觸算法圖解一書,寫的通俗易懂,很多圖表幫忙理解,所以講隨手筆記分享至此,希望對您有所幫助。
算法圖解
一些常見的大O運行時間:
說明:
廣度優先搜索:
廣度優先搜索的最終代碼如下
狄克斯特拉算法包含的步驟(針對加權圖場景)
說明:如果有負權邊,就不能使用狄克斯特拉算法
NP問題:
以難解著稱的問題
如何判別沒辦法解決的問題是不是NP完全問題呢
動態規劃
遞歸的子集,遞歸部分有重疊,爲了減少時間複雜度,所以將中間過程都保存下來的遞歸
動態規劃實際應用的場景:
K最近鄰算法
K最近鄰算法常見應用:
推薦系統中基於用戶的推薦和基於物品的推薦
將KNN用於兩項基本工作:分類和迴歸
分類就是編組
迴歸就是預測一個數字
二叉查找樹
對於其中每個節點,左子節點的值都比它小,右子節點的值都比它大
優勢:插入和刪除操作的速度很快
反向索引(倒排索引)
也就是搜索引擎的基本工作原理
並行算法
影響並行算法不能線性提高算法速度的原因有兩個:
MapReduce
是一種流行的分佈式算法:主要包括映射函數和歸併函數兩部分
Map
Reduce
布隆過濾器和HyperLogLog
是一種概率型數據結構,提供的答案有可能不對,但很可能是正確的
可能出現報錯的情況,即可能指出在集合中查找某個主鍵是存在的,但是實際上並沒有
不可能出現漏報的情況,如果布隆過濾器說集合中沒有這個主鍵,那就一定不存在
SHA:secure hash algorithm 安全散列算法
典型應用1;可用於比較兩個文件是否相同
典型應用2:計算密碼的散列值