假設我們有一個散列函式H,和兩個位元組的字串a和b(可能很長,例如大小為幾個 MiB,因此我們希望避免再次散列它們)。我們已經知道H(a)and的值H(b),并且想要計算H(a b)(連接在一起的兩個字串的哈希值)。
我們希望有一個功能F是可以計算H(a b)的H(a),H(b)和其他任何性質a和b我們可以事先計算(如長度),并花費較少的時間不僅僅是散列整個字串。
散列函式H不需要是加密的,但對于 HashMaps 或類似用途應該足夠好。
這樣的功能H和F存在嗎?或者如果我想知道,我應該搜索/研究什么?
uj5u.com熱心網友回復:
Java 的字串哈希是s[0]*31^(n-1) s[1]*31^(n-2) ... s[n-1](modulo int size)。
這個散列的一個屬性是,H(a b) = (31^b.length())*H(a) H(b)。您可以31^b.length()通過對數時間平方來使用冪運算進行計算。如果您希望預先計算,您可以預先計算31^length每個字串并將其與預先計算的散列一起存盤。
uj5u.com熱心網友回復:
您需要詳細說明您對哈希函式的期望。否則我的答案是:使用位奇偶校驗作為哈希,因為 B(a b)=(B(a) B(b)) mod 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/388165.html
上一篇:圖中有時間限制的最短路徑
