1.樹
二叉樹相對于數組來說身腻,查找平均時間為 O(log n) 产还,最早的情況下為O(n),但是插入和刪除速度更快嘀趟。
數組 | 二叉查找樹 | |
---|---|---|
查找 | O(log n) | O(log n) |
插入 | O(n) | O(log n) |
刪除 | O(n) | O(log n) |
平衡的二叉樹脐区,即左右分支分布均勻,查找起來更快她按。如紅黑樹牛隅。
B樹是一種特殊的二叉樹,數據庫常用來存儲數據酌泰。
2.反向索引
散列表的鍵為單詞媒佣,值為包含指定單詞的頁面。這種把單詞映射到包含它的頁面的數據結構陵刹,就是反向索引默伍。用于創(chuàng)建搜索引擎。
3.傅里葉變換
給定一首歌曲衰琐,傅里葉變換能夠將其中的各種頻率分離出來也糊。傅里葉變換非常適合用于處理信號,可用來壓縮音樂碘耳。
4.并行算法
當處理器的速度達到瓶頸時显设,就需要采用并行來加快處理速度。并行算法對于速度的提升是非線性的辛辨,需要注意兩個點:
(1)并行性管理開銷捕捂,最后的合并需要時間瑟枫。
(2)負載均衡,均勻的分配工作指攒。
5.MapReduce
分布式算法慷妙,MapReduce,映射函數和歸并函數允悦。先使用映射函數處理加快處理速度膝擂,然后把處理結果進行合并。
6.布隆過濾器和 HyperLogLog
用來判斷某一個元素是否包含在某個集合中隙弛,如果這個集合非常大架馋,對內存的占用就會很高,這時候就不能使用散列表全闷。
布隆過濾器是一種概率型數據結構叉寂,相比于散列表的絕對可靠性,它的可靠性是很可能总珠。
HyperLogLog近似的計算集合中不同的元素數屏鳍,也不能給出正確答案,但占用內存空間很少局服。
7. SHA 算法
SHA 是一個散列函數钓瞭,用于把一個字符串生成一個新的較短的字符串,可用于對文件進行這種處理淫奔,然后使用生成的字符串來比較山涡,判斷兩個文件是否相同。
由于 SHA 算法是單向加密的搏讶,可以使用對密碼進行 SHA 算法佳鳖,然后只驗證處理后的字符串,這樣就可以避免密碼被竊取媒惕。
8系吩,局部敏感的散列算法
SHA 算法在處理字符串時,如果字符串有微小的改動妒蔚,比如改了一個字符串中的一個字母穿挨,這時候生成的新字符串和沒有修改的結果相差會很大,這也保證了密碼驗證的安全性肴盏,不會被輕易破解科盛。
然而有些時候卻需要這種敏感性,就是新生成的字符串要和原先的字符串修改程度大小有關系菜皂,這樣在比較兩個文件時贞绵,有利于判斷相似度。Simhash 就可以用來實現這個效果恍飘。
9.Diffie–Hellma
Diffie–Hellman 密鑰交換是一個特殊的交換密鑰的方法榨崩。它是密碼學領域內最早付諸實踐的密鑰交換方法之一谴垫。 DH可以讓雙方在完全缺乏對方(私有)信息的前提條件下通過不安全的信道達成一個共享的密鑰。此密鑰用于對后續(xù)信息交換進行對稱加密.
10.線性規(guī)劃
線性規(guī)劃用于在給定約束條件下最大限度地改善指定的指標母蛛。簡單的說翩剪,線性規(guī)劃就是在給定限制的情況下,求解目標彩郊。