[英]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
取每個數組編號的余數,那么余數總是保證從0
到13
,因此如果你有使用除法的鍵,你可以使用13
大小的桶
[100, 1, 3, 56, 80]
與 13 的余數 -> [9, 1, 3, 4, 5]
因此,您將100
的值存儲在索引9
處,依此類推。
碰撞:
但是如果在數組中我們有一個值5
和80
,兩者之后都會給出余數5
。 現在要在索引5
處存儲什么?
在我們的示例圖像中,
現在假設“SACHU”,這在散列后也給出03
現在兩個鍵給出相同的索引,所以這稱為沖突,可以使用兩種方法解決
線性探測:簡單來說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.