Hash演算法原理

2021-03-03 21:50:04 字數 1655 閱讀 6777

1樓:慣性水瓶

雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。

雜湊演算法用來產生一些資料片段(例如訊息或會話項)的雜湊值的演算法。使用好的雜湊演算法,在輸入資料中所做的更改就可以更改結果雜湊值中的所有位;因此,雜湊對於檢測資料物件(例如訊息)中的修改很有用。

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

雜湊函式的計算結果是一個儲存單位地址,每個儲存單位稱為「桶」。設一個雜湊表有m個桶,則雜湊函式的值域應為 [0,m-1]。

hash演算法原理

2樓:匿名使用者

雜湊表,它是基於高速存取的角度設計的,也是一種典型的「空間換時間」的做法。顧名思義,該資料結構能夠理解為一個線性表,可是當中的元素不是緊密排列的,而是可能存在空隙。

雜湊表(hash table,也叫雜湊表),是依據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

比方我們儲存70個元素,但我們可能為這70個元素申請了100個元素的空間。70/100=0.7,這個數字稱為負載因子。

我們之所以這樣做,也是為了「高速存取」的目的。我們基於一種結果儘可能隨機平均分佈的固定函式h為每一個元素安排儲存位置,這樣就能夠避免遍歷性質的線性搜尋,以達到高速存取。可是因為此隨機性,也必定導致一個問題就是衝突。

所謂衝突,即兩個元素通過雜湊函式h得到的地址同樣,那麼這兩個元素稱為「同義詞」。這類似於70個人去一個有100個椅子的飯店吃飯。雜湊函式的計算結果是一個儲存單位地址,每一個儲存單位稱為「桶」。

設一個雜湊表有m個桶,則雜湊函式的值域應為[0,m-1]。

3樓:匿名使用者

這個問題有點難度,不是很好說清楚。 我來做一個比喻吧。

我們有很多的小豬,每個的體重都不一樣,假設體重分佈比較平均(我們考慮到公斤級別),我們按照體重來分,劃分成100個小豬圈。

然後把每個小豬,按照體重趕進各自的豬圈裡,記錄檔案。 好了,如果我們要找某個小豬怎麼辦呢?我們需要每個豬圈,每個小豬的比對嗎?

當然不需要了。 我們先看看要找的這個小豬的體重,然後就找到了對應的豬圈了。

在這個豬圈裡的小豬的數量就相對很少了。

我們在這個豬圈裡就可以相對快的找到我們要找到的那個小豬了。 對應於hash演算法。

就是按照hashcode分配不同的豬圈,將hashcode相同的豬放到一個豬圈裡。

查詢的時候,先找到hashcode對應的豬圈,然後在逐個比較裡面的小豬。 所以問題的關鍵就是建造多少個豬圈比較合適。 如果每個小豬的體重全部不同(考慮到毫克級別),每個都建一個豬圈,那麼我們可以最快速度的找到這頭豬。

缺點就是,建造那麼多豬圈的費用有點太高了。 如果我們按照10公斤級別進行劃分,那麼建造的豬圈只有幾個吧,那麼每個圈裡的小豬就很多了。我們雖然可以很快的找到豬圈,但從這個豬圈裡逐個確定那頭小豬也是很累的。

所以,好的hashcode,可以根據實際情況,根據具體的需求,在時間成本(更多的豬圈,更快的速度)和空間本(更少的豬圈,更低的空間需求)之間平衡。

hash演算法的數學原理是什麼,如何保證儘可能少的碰撞

基於概率分析 在使用雜湊函式時選擇 正確 的雜湊函式可以很大程度減少碰撞比如字串雜湊可以用bkdrhash 當然也可以針對輸入資料特點設計雜湊演算法 這個就要分情況了 分別敘述hash函式關於訊息x是弱無碰撞的,強無碰撞的以及是單向的 已知hash函式f x 單來向是指已知自x可以求bai出f x ...

貪吃蛇演算法原理問題,貪吃蛇演算法原理問題

貪吃蛇最主要的演算法就是碰撞檢測,其資料結構的難點在於蛇身的儲存,以及按鍵佇列。先說資料結構 蛇身的儲存最容易想到的一種資料結構,就是陣列。但是,用陣列,一開始就得開闢一螢幕的蛇身那麼多記憶體,才確保不會溢位。而如果玩家只玩了一會兒就撤了,導致蛇身到了最後也沒多長,那豈不是對記憶體的浪費 真正優秀的...

簡便演算法72438,簡便演算法

7 24 9 24 4 24 7 24 13 24 7 24 24 13 7 13 怎樣計算簡便怎樣算 5 6 3 4 1 3 1 24 8 21 16 7 26 13 9 給我採納 我給你答案 5 6 3 4 1 3 1 24 20 18 8 10 脫式計算,能簡便就簡便。7 27 4 15x0....