哈希(Hash)又稱散列,它是一個很常見的算法。在Java的HashMap數據結構中主要就利用了哈希。哈希算法包括了哈希函數和哈希表兩部分。我們數組的特性可以知道,可以通過下標快速(O(1))的定位元素,同理在哈希表中我們可以通過鍵(哈希值)快速的定位某個值,這個哈希值的計算就是通過哈希函數(hash(key) = address )計算得出的。通過哈希值即能定位元素[address] = value,原理同數組類似。
最好的哈希函數當然是每個key值都能計算出唯一的哈希值,但往往可能存在不同的key值的哈希值,這就造成了沖突,評判一個哈希函數是否設計良好的兩個方面:
1.沖突少。
2.計算快。
下面給出幾種常用的哈希函數,它們的背后都有一定的數學原理且經過大量實踐,其數學原理不在這里探究。
BKDR哈希函數(h = 31 * h + c)
這個哈希函數被應用在Java的字符串哈希值計算。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26
