簡體   English   中英

散列除余法

[英]Hashing with division remainder method

我不明白這個練習。

Hash 鍵:(13,17,39,27,1,20,4,40,25,9,2,37) 使用除法余數法轉換為大小為 13 的 hash 表。 a) 為 m 找到合適的值。 b) 使用鏈表處理沖突並在這樣的表格中可視化結果

0→ 1→ 2→ 3→ 4→ 5→ 6→...

c) c) 使用序列 s(j) = j 處理與線性探測的沖突,並通過為每個插入開始一個新列來說明表格中的發展(不要忘記復制已經填充到右側的單元格)並通過使用向下箭頭顯示發生碰撞時的探測步驟。

我的嘗試:a)如果表大小是 13,由於剩余的類,m 也必須是 13 b)例如 0→39->13 .... c)我不知道

如果有人能幫我解決它,那就太好了。 :)

讓我簡要概述一下將在此處使用的所有主題。

哈希映射是一種數據結構,它使用 hash function 到 map 標識值(稱為鍵)及其關聯值。 它包含“鍵值”對,並允許通過鍵檢索值。

就像在數組中一樣,您可以使用索引獲取任何元素,類似地,您可以使用哈希映射中的鍵獲取任何值。

基本上會發生這樣的事情,這里給你一個字符串鍵,然后對它進行哈希處理,然后我們將值放在數組中的那個索引處。

在此處輸入圖像描述

在我們的示例圖像中,如果您想要“Billy”的值,我們再次使用 hash“Billy”,我們得到03 現在我們只檢查索引3處的值,這是“Billy”(鍵)的存儲值

在您的情況下,您必須使用 hash 整數而不是字符串。


現在如何獲得 hash 鍵?

可以有多種方法,比如您可以對字符串字符的 ascii 值求和,或者任何您能想到的方法。

假設您有這個數組[100, 1, 3, 56, 80]並且您必須將它存儲在大小為13的桶中。 我們不能直接使用這些數組值作為索引,因為我們需要索引1和索引100 ,這將使桶的大小為100

但是如果你用13取每個數組編號的余數,那么余數總是保證從013 ,因此如果你有使用除法的鍵,你可以使用13大小的桶

[100, 1, 3, 56, 80]與 13 的余數 -> [9, 1, 3, 4, 5]因此,您將100的值存儲在索引9處,依此類推。

碰撞:

但是如果在數組中我們有一個值580 ,兩者之后都會給出余數5 現在要在索引5處存儲什么?

在我們的示例圖像中,
現在假設“SACHU”,這在散列后也給出03現在兩個鍵給出相同的索引,所以這稱為沖突,可以使用兩種方法解決

  1. 類似存儲的鏈表(使用鏈表將兩個值存儲在同一索引中,就像這樣) 在此處輸入圖像描述

  2. 線性探測:簡單來說03索引已經被占用我們嘗試找到下一個空索引,就像使用最簡單的探測我們的圖像示例一樣, 06是空的所以我們將“SACHU”值存儲在06而不是03
    (現在這有點難所以我強烈建議你閱讀 inte.net 上的散列和沖突)

現在,有一種方法,我們 h(x) 表示 integer x 的 hash。 如果數字是x ,首先 hash 將是,h1 = h(x) 如果 h1 索引不為空,我們再次 hash 相同的索引,h2 = h(h1) 等等,我不確定,但我想這就是s[j] = j方法的意思。

這些是您在解決問題時必須使用的方法。
我希望您先嘗試一下。

您可以在線閱讀更多相關信息,如果仍然無法解決問題,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM