散列表(hash表)
阿新 • • 發佈:2018-02-16
關系 技術 優點 圖片 數據 span height 中間 表頭 1. hash表:
又稱散列表,以key-value的形式存儲數據,能夠由key快速定位到其指定的value,而不經過查找。它采用了函數式的映射思想,將記錄的存儲位置與關鍵詞相關聯,從而快速定位進行查找,復雜度為O(1)。
2. hash函數:
(3)折疊法:將關鍵詞拆分成幾部分,然後以特定方式組合構成hash地址。
缺點:不能排序,占用空間大,記錄的關鍵詞不能重復。
4.常用hash函數:
- key和value的映射關系稱為HASH函數,通過該函數可以計算key所對應的存儲位置(表中存儲位置,不是實際物理地址),即HASH地址。
- 構造HASH地址的方法有:
- 避免hash地址發生沖突的解決辦法:
/* 除余法哈希函數( 不適用於表很大的情況 ) */ int hash(const std::string & key,int tablesize) { int hashvalue = 0; for(unsigned int i=0;i<key.length();++i) hashvalue += key[i]; return hashvalue % tablesize; } /* RS哈希函數 */ int RSHash(conststd::string & str) { int b = 378551; int a = 63689; int hash = 0; for(unsigned int i = 0; i < str.length(); i++) { hash = hash * a + str[i]; a = a * b; } return hash; }
散列表(hash表)