雜湊演算法訪問之所以快,是因為其 直接通過關鍵字key得到要訪問的記錄記憶體儲存位置
試想這樣的場景,
你很想學太極拳,聽說學校有個叫張三丰的人打得特別好,於是你
到學校學生處找人,學生處的工作人員可能會拿出學生名單,乙個乙個的查詢,
最終告訴你,學校沒這個人,並說張三丰幾百年前就已經在武當山作古了。可如果你
找對了人,比如在操場上找那些愛運動的同學,人家會告訴你,"哦,你找張三丰呀,
有有有,我帶你去。於是他把你帶到了體育館內,並告訴你,那個教大家打太極的小
伙子就是張三丰',原來"張三丰是因為他太極拳打得好而得到的外號。學生處的老
師找張三丰,那就是順序表查詢,依賴的是姓名關鍵字的比較。而通
過愛好運動的同學
詢問時,沒有遍歷,沒有比較,就憑他們"欲找太極'張三丰',必
在體育館當中"的經驗,
直接告訴你位置。
也就是說,我們只需要通過某個函式f,使得
儲存位置=f (關鍵字)
那樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。這就
是一種新的儲存技術一一雜湊技術(雜湊演算法)。
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得
每個關鍵字key 對應乙個儲存位置f (key)
。查詢時,根據這個確定的對應關係找到
給定值key 的對映f (key) ,若查詢集合中存在這個記錄,則必定在f (key) 的位
置上。這裡
我們把這種對應關係f 稱為雜湊函式, 又稱為雜湊(hash) 函式
。按這個思
想,採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊
表或雜湊表(hash table)
。 那麼關鍵字對應的記錄儲存位置我們稱為雜湊位址。
整個雜湊過程其實就是兩步:
(1) 在儲存時,通過雜湊函式計算記錄的雜湊位址,並按此雜湊位址儲存該記錄。
(2) 當查詢記錄時,我們通過同樣的雜湊函式計算記錄的雜湊位址,按此雜湊地
址訪問該記錄。由於訪問用的是同乙個雜湊函式, 因此結果當然也是相同的。
所以說,雜湊技術既是一種儲存方法,也是一種查詢方法。然而它與線性表、
樹、圖等結構不同的是,前面幾種結構,資料元素之間都存在某種邏輯關係,可以用
連線圖示表示出來,而雜湊技術的記錄之間不存在什麼邏輯關係,它只與關鍵字有關
聯。因此,雜湊主要是面向查詢的儲存結構。
我們時常會碰到兩個關鍵字key1 != key2,但是卻有f(key1) = f(key2),這種現象
我們稱為雜湊衝突,如果沒有雜湊衝突,雜湊表是一種非常高效的查詢資料結構,
其時間複雜度為o(1);
雜湊表的簡單理解
雜湊表具有查詢速度快,效率高的優點,是基於陣列,特定情況下結合鍊錶 紅黑樹 的資料結構。設計思路 設想用陣列儲存英文本母a zzzzzzzz的字串,這樣的話總共有26 8種結果,而如果想要查詢字母absdaw就只能通過遍歷陣列,非常影響速度。靈感一閃而過,如果能把每個字母與陣列下標繫結不就能快速查詢...
雜湊表的簡單理解
我們要在陣列或者煉表裡查詢乙個指定得資料,唯一能做得事情就是遍歷的去查詢,這樣的時間複雜度是o n 那有沒有一種方法可以以o 1 的時間複雜度找到這個資料呢?現在來想這個乙個問題,現實生活中我們的衣物都是分類存放的,放的時候根據是什麼種類的衣物放到指定的地方,取的時候依照要取的衣物種類去指定的地方找...
雜湊演算法 雜湊演算法hash 理解筆記 編輯中
雜湊演算法 有兩個特點 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最終輸出的雜湊資料的變化。在區塊鏈中,通常使用sha 256 安全雜湊演算法 進行區塊加密,這種演算法的輸入長度為256位,輸出的是一串...