資料結構與演算法 雜湊函式與雜湊表

2021-09-29 10:50:09 字數 1044 閱讀 4434

1.雜湊函式的特點:

(1)理論上輸入域是無窮大的,輸出域是固定的。

(2)雜湊一般是16位的,每一位是0 ~ 9 + a ~ f 的隨機數所以一共16的16次方種也就是2^64種

(3)雜湊函式輸出的值會均勻分布。比如說輸入域是0 ~ 98,輸出域是0 ~ 2,我們輸入99個數字,那麼所有輸入的值%3後,0、1、2後面基本都有33個數字。這裡面是有大量的異或運算進行雜湊分布。

(4)相同的值經過雜湊函式後輸出的值都是一樣的

(5)不同的值經過雜湊函式後輸出的值可能會有一樣的(雜湊碰撞)

2.雜湊表的特點:

(1)查詢時間複雜度時o(1) 增刪改由於會出現對空間進行擴容,但是不是每次都會擴容,這樣時間複雜度就平均下來還是o(1) jvm裡面實現的雜湊表是用陣列+平衡搜尋二叉樹(紅黑樹)實現的,經典的雜湊表是用單鏈表實現的,也就是相同的key用鍊錶連線起來。時間複雜度準確的說是logxn 這個x是底數,再jvm裡面底數會非常大

(2)擴容就是當本身有1000個空間,每個空間後面連線很多很多個值了,就是說這個鍊錶很大了,我們需要擴容,可以選擇把原有的經過雜湊函式後得到的雜湊碼再%3000(比如我們每次擴3倍)然後對應放入,或者可以選擇離線擴容。擴好了,再把新的請求直接打到新的雜湊表裡,原有的複製重新計算。

3.雜湊函式的應用:

假設,這裡的資料是可以直接讀取出來的,我們可以呼叫100臺機器來計算該檔案。

那麼,現在我們需要怎樣通過雜湊函式來統計重複字串呢。

首先,我們需要將這一百臺機器分別從0-99標好號,然後我們在分布式檔案系統中一行行讀取檔案(多台機器並行讀取),通過雜湊函式計算hashcode,將計算出的hashcode模以100,根據模出來的值,將該行存入對應的機器中。

根據雜湊函式的性質,相同的字串的雜湊碼值一樣,所以會存入相同的機器中。

然後我們就能並行100臺機器,各自分別計算相應的資料,大大加加快統計的速度。

注意:這10tb檔案並不是均分成100gb,分給100臺機器,而是這10tb檔案中不同字串的種類,均分到100臺機器中。如果還嫌單個機器處理的資料過大,可以按照同樣的方法,在一台機器中並行多個程序,處理資料。

資料結構與演算法 雜湊表

對映在數學上相當於乙個函式f x a b。雜湊表的核心是乙個雜湊函式 hash function 這個函式規定了集合a中的元素如何對應到集合b中的元素。根據設定的雜湊函式 h key 和處理衝突的方法 將一組關鍵字映像到乙個有限的連續的位址集 區間 上,並以關鍵字在位址集中的 像 作為相應記錄在表中...

資料結構與演算法 雜湊表

雜湊表也叫雜湊表,hash表是一種根據關鍵字值 key value 而直接進行訪問的資料結構。是把記錄的儲存位置和記錄的關鍵字之間建立對應關係的一種儲存結構。雜湊表又叫 雜湊表,速度很快,最常用的一種儲存機構是順序表 鍊錶的結構 主結構是順序表,每個順序表中的元素又對應一張鍊錶。雜湊表的常用資料結構...

資料結構與演算法 雜湊表

雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。如下圖,定義了16個陣列,每個陣列用來存放一條鍊錶.在插入資料時,首先...