雜湊表又叫
雜湊表,根據關鍵字直接進行訪問的資料結構,也就是說,它通過把關鍵字的值對映到表中某乙個位置來訪問記錄,
以加快查詢的速度
,這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表或者叫雜湊表。
很多人在第一次接觸雜湊表的時候一直弄不明白雜湊表怎麼能過快速定位到目標,其實關鍵就在於你在建立雜湊表的時候就相當於對資料記錄進行了有規律(這個規律就是雜湊函式了)的存入操作,而在進行查詢時也是按你存入的規律去查詢,這樣自然就很快了。比如乙個陣列array[500]=,你在存入5的時候特意儲存了5對應的下標3,這樣你在要查詢5的時候就沒必要去遍歷陣列了,而是直接array[3]就成功取出了你想要的資料,所以說雜湊表並沒有你想象的那麼神奇,它只不過是進行了有規律的存入,然後再按照一樣的規律去檢索而已。
學習雜湊表的關鍵就在於理解雜湊表的關鍵字、雜湊值和雜湊函式,舉個例子說,大家小時候都學過數學裡面的函式概念,比如一次函式y = k*x + b,x是自變數,y是因變數,k和b引數,你在實際應用中,會考慮用什麼來做自變數,然後對每個自變數的值因變數都有唯一乙個值和它對應,就像陣列中每乙個下標都對應乙個資料一樣,其實雜湊表和這個差不多,x就好比你選取的關鍵字,y就是雜湊值,而雜湊函式就是這個對應關係,它是從資料特徵中抽象出來的表示式,雜湊表的好壞很大程度上就取決於你所選取的雜湊函式,這也是雜湊表設計的難點,而且在雜湊表的設計中不可避免的會碰到衝突問題,如何去解決衝突這也是非常關鍵的問題,但雜湊函式的選取一直沒有乙個統一的標準,需要根據實際情況才能確定。 下面
具體說一些常見的雜湊函式構造法。
1. 雜湊表定義:
儲存位置 = f(
關鍵字)
在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f
,使得每個關鍵字
key對應乙個儲存位置
f(key)
。對應關係
f稱為雜湊函式、雜湊函式。
2. 雜湊函式的構造方法
2.1 直接定址法
直接定址就是取關鍵字的某個線性函式值為雜湊位址。
如:f(key) = a*key+b (a,b
為常數)
適合:需要知道關鍵字分布情況,適合查詢表較小且連續的情況
2.2 數字分析法
抽取關鍵字中一部分來計算雜湊位置
適合:關鍵字的位數比較大且若干位分布均勻
2.3 平方取中法
假設關鍵字1234
,它的平方
1522756
,在取中間三位
227作為雜湊位址
適合:不知道關鍵字的分布且位數不大
2.4 摺疊法
比如關鍵字為0123456789
,我們將其分為四組
0123|4567|89
,然後疊加求和
0123+4567+89=4779
,在取後四位
4799
作為雜湊位址。
適合:事先不知道關鍵字的分布,且關鍵字位數較多
2.5 隨機數法
f(key) = random(key) // random是隨機函式
適合:關鍵字長度不等的情況
2.6 除留餘數法
f(key) = key mod p (p<=m)
適合:知道雜湊表的長度m
2.7 開放定址法
h(key) = (f(key) + di) mod m
一旦發生衝突,就去尋找下乙個空的雜湊位址,只要雜湊表足夠大,空的雜湊位址總能找到。其中h(key)
為雜湊函式,
m為雜湊表長,
di為增量序列,可有下列三種取法
di=1,2,3,…
, m-1
,稱線性探測再雜湊
di=12, (-1)2, 22,(-2)2,…,±
(k)^2,(k<=m/2)
稱二次探測再雜湊
; di=偽隨機數序列,稱偽隨機探測再雜湊
2.8 再雜湊法
hi=rhi(key), i=1,2,…
,k rhi
均是不同的雜湊函式,即在同義詞產生位址衝突時
計算另乙個雜湊函式位址,直到衝突不再發生,這種方法不易產生「聚集」,但增 加了計算時間
2.9 鏈位址法
(拉鍊法)
將產生衝突的元素鏈成一條鍊錶,它是一種雜湊表與遍歷或二分查詢等其它檢 索方法相結合的一種方法
PMI理論學習
pmi九大知識領域 整合管理 工作範圍管理 時間管理 費用管理 質量管理 人力資源管理 溝通管理 風險管理和採購管理 和五個專案管理過程 啟動 計畫 執行 控制 收尾 九大知識領域包括 1 專案範圍管理 是為了實現專案的目標,對專案的工作內容進行控制的管理過程。它包括範圍的界定,範圍的規劃,範圍的調...
LSTM理論學習
lstm最關鍵的就是實現cell state的傳輸,而gate的存在決定傳輸過程中,以前的cell state資訊多少需要拋棄,多少輸入資訊需要加入新的cell state,多少資訊需要輸出。所以有forget,input,output三個gate 忘記多少cell state forget gat...
AI理論學習
關於ai理論學習的筆記 淺顯地理解ai領域,輸入如感知推理,輸出如下棋寫詩,有為了更好通過圖靈測試的仿生,或則是減少人工介入的 智慧型 圖靈測試就是讓人分不清是人還是機器,涉及自然語言處理 表達 推理和學習,刻意避免了直接的物理互動,完全的圖靈測試還包括計算機視覺和機械人控制,用以增強感知和輸出。亞...