算法(Algorithms)三
16.貪心算法::局部最優(yōu)解的合集,以實現(xiàn)全局最優(yōu)解
17.NP 完全問題:
元素較少時算法的運行速度非??欤S著元素數(shù)量的增加,速度會變得非常慢。
涉及“所有組合”的問題通常是NP完全問題。
不能將問題分成小問題,必須考慮各種可能的情況。這可能是NP完全問題。
如果問題涉及序列(如旅行商問題中的城市序列)且難以解決,它可能就是NP完全問題。
如果問題涉及集合(如廣播臺集合)且難以解決,它可能就是NP完全問題。
如果問題可轉(zhuǎn)換為集合覆蓋問題或旅行商問題,那它肯定是NP完全問題。
18.動態(tài)規(guī)劃:處理小問題,集合起來處理大問題,但每個小問題要是離散的,不依賴于其他子問題才行
1.對于前面的背包問題,最終答案總是在最后的單元格中。但對于最長公共子串問題,答案為網(wǎng)格中最大的數(shù)字——它可能并不位于最后的單元格中。
2.最長公共子序列:
需要在給定約束條件下優(yōu)化某種指標時,動態(tài)規(guī)劃很有用。
問題可分解為離散子問題時,可使用動態(tài)規(guī)劃來解決。
每種動態(tài)規(guī)劃解決方案都涉及網(wǎng)格。
單元格中的值通常就是你要優(yōu)化的值。
每個單元格都是一個子問題,因此你需要考慮如何將問題分解為子問題。
沒有放之四海皆準的計算動態(tài)規(guī)劃解決方案的公式。
19.KNN算法:
1.按距離歸類:K系數(shù)
2.特征抽?。?/span>
3.分類:編組
4.回歸:線性預測
5.余弦相似度計算:角度分類
20.二叉查找樹(全O(logn):對于每個節(jié)點,該節(jié)點左邊的節(jié)點都比它小,右邊的節(jié)點都這個基準節(jié)點大,但左右不平衡會導致性能不佳。
1.紅黑樹:平衡狀態(tài)的特殊二叉樹
21.反向索引:通過關(guān)鍵字反向找到目標頁面,常用于搜索引擎。
22.傅里葉變換:處理信號,如地震預測、DNA分析、音樂識別。
23.并行算法:使內(nèi)核平衡分配資源
24.分布式算法:屬于特殊的并行算法,如MapReduce,map:映射函數(shù) reduce:歸并函數(shù)
1.映射函數(shù)map:接受一個數(shù)組,并對其進行處理轉(zhuǎn)換為另一個數(shù)組,使用多臺計算機同時處理
2.歸并函數(shù)reduce:將多項歸并為一項
25.布隆過濾器:一種概率型數(shù)據(jù)結(jié)構(gòu),判斷網(wǎng)頁是否已經(jīng)搜集,散列表的答案絕對可靠,布隆過濾器的答案不絕對可靠,但可能規(guī)避惡意網(wǎng)站,且占用存儲空間小。
26.Hyperloglog:HyperLogLog近似地計算集合中不同的元素數(shù),與布隆過濾器一樣,它不能給出準確的答案,但也八九不離十,而占用的內(nèi)存空間卻少得多。
27:SHA算法:安全散列算法函數(shù),給定一個字符串,返回其散列值
1.通過計算散列值來比較文件是否相同
2.網(wǎng)站密碼本質(zhì)上是網(wǎng)站服務(wù)器計算輸入值的散列值,同數(shù)據(jù)庫中的散列值進行比較
3.散列值無法轉(zhuǎn)換成原始字符串
4.目前完善的SHA算法:SHA-2、SHA-3
5.最安全的密碼散列函數(shù):bcrypt
6.局部不敏感
Simhash算法:
1.局部敏感
2.通過比較散列值來判斷兩個字符的相似程度
3.檢查兩項內(nèi)容的相似程度
4.用途:1.判斷網(wǎng)頁是否已搜集 2.判斷文章是否來自于網(wǎng)上 3.判斷用戶上傳的文檔是否與有版權(quán)內(nèi)容類似,從而拒絕
Diffie-Hellman算法:
1.兩個密鑰:公鑰和私鑰。公鑰就是公開的,可使用其他任何方式來發(fā)布。使用公鑰對對象進行加密。加密后的消息只有使用私鑰才能解密。