|
|
Line 1: |
Line 1: |
| '''Double hashing''' is a [[computer programming]] technique used in [[hash table]]s to resolve [[hash collision]]s, cases when two different values to be searched for produce the same hash key. It is a popular [[hash collision|collision]]-resolution technique in [[open addressing|open-addressed]] hash tables. Double hashing is implemented in many popular [[library (computing)|libraries]].
| | == 「まあ、それは私たちの番です == |
|
| |
|
| Like [[linear probing]], it uses one hash value as a starting point and then repeatedly steps forward an interval until the desired value is located, an empty location is reached, or the entire table has been searched; but this interval is decided using a second, independent hash function (hence the name double hashing). Unlike [[linear probing]] and [[quadratic probing]], the interval depends on the data, so that even values mapping to the same location have different bucket sequences; this minimizes repeated collisions and the effects of clustering.
| | 秦Yuは笑った: 'フェイフェイ、このことは、彼の冒険があなたよりも強いものを多分黒、言うのは難しいことができます?'<br>「ありそうになりました [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_4.php クリスチャンルブタン 取扱店]。」<br><br><br>侯飛Mozhuoxiabaは、のように見えるために被疑者を出す [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_0.php クリスチャンルブタン]。<br><br>「まあ、それは私たちの番です。 [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_2.php クリスチャンルブタンジャパン] '秦Yuは大声で思い出しました。侯飛秦ゆう、その後、姿を消した星間霧ランプ付Chuansongジェン、秦ゆうと侯飛に入った。<br><br>今回黄金の妖精の手がコミュニケーションLingzhuを保持している:」大人、秦ゆうと侯チュアンSongzhen料はCuiyunスターIIIの出発を掛けた」<br><br>悪魔の世界。多くのマスターは不滅であり、悪魔は、結局、理由の星間Chuansongジェンのキム·シンの強さ以上のように多くの人が他のコミュニティに来た [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_3.php クリスチャンルブタン 東京]。<br><br>×××<br><br>皇帝西安の木製の拡張は雲の中で飛んで、目的地は現在、皇帝玄ゆう黄、土地の所有権、名前のない島です。木のヤン皇帝西安強度はもちろん、テレポートの過去をキャスト、しかし [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_5.php クリスチャンルブタン スニーカー]......木製の拡張子が、飛んでいる妖精神感を楽しむことができますが、飛行中に、彼がどのように考えることができます |
| | 相关的主题文章: |
| | <ul> |
| | |
| | <li>[http://www.vst520.com/home.php?mod=space&uid=209166 http://www.vst520.com/home.php?mod=space&uid=209166]</li> |
| | |
| | <li>[http://107.163.165.13/forum.php?mod=viewthread&tid=299012 http://107.163.165.13/forum.php?mod=viewthread&tid=299012]</li> |
| | |
| | <li>[http://www.volvobertone.com/cgi-bin/guestbook/guestbook.cgi http://www.volvobertone.com/cgi-bin/guestbook/guestbook.cgi]</li> |
| | |
| | </ul> |
|
| |
|
| Given two randomly, uniformly, and independently selected hash functions <math>h_1</math> and <math>h_2</math>, the ''i''th location in the bucket sequence for value ''k'' in a hash table <math>T</math> is: <math>h(i,k)=(h_1(k) + i \cdot h_2(k))\mod |T|.</math>
| | == 非常に柔軟ではないですか == |
| Generally, <math>h_1</math> and <math>h_2</math> are selected from a set of [[universal hash]] functions.
| |
|
| |
|
| == Classical applied data structure ==
| | また、唐シャンルー柯、戦争はサイレントボイド立っているすべての背後に法執行機関と並んで立っていた。<br>ビッグ6と天のゲートアレイを見<br>、秦ゆう人Dudou [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_8.php クリスチャンルブタン 店舗 東京] 5殿下は、秦Yuは、黄金の光のようなものです5殿下も賢くながら、お互いに3架空のミッド殿下のアクションでこれらの3つの穴。<br><br>ディロンのすべての方法、ディアロー、ディ徐ヤンディ·ディベアトリオずっとずっと、この三方攻撃秦ゆう、レジストされていません [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_12.php クリスチャンルブタン 値段]。<br><br>「ルー柯、あなたの頭は、あなたが秦ゆうがどのくらいの時間のために固執することができると言う?非常に柔軟ではないですか? [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_7.php クリスチャンルブタン 銀座] '唐シャン、現時点では生きて出てくることができ秦ゆう唐シャンは、少し希望を持っていなかった、笑顔で尋ねた。<br><br>秦ゆう高速だが、常にそう速度飛行が、星の多くの電力を消費する必要がある。<br><br>「彼らは、道路なしでキャッチされ、どのくらい?邪悪寺院9 [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_4.php クリスチャンルブタン 店舗] 5殿下は、常にそう愚か追いかけるなら、私は推測する秦ゆうを殺すことはできません。「ルー柯ペア自信のある表情を。<br><br>テン山はこれが不満です [http://www.lamartcorp.com/modules/mod_menu/rakuten_cl_1.php クリスチャンルブタン 東京]。<br>これ<br>「ルー柯、 |
| Double hashing with open addressing is a classical data structure on a table <math>T</math>. Let <math>n</math> be the number of elements stored in <math>T</math>, then <math>T</math>'s load factor is <math>\alpha = \frac{n}{|T|}</math>.
| | 相关的主题文章: |
| | | <ul> |
| Double hashing approximates uniform open address hashing.
| | |
| That is, start by randomly, uniformly and independently selecting two [[universal hash]] functions <math>h_1</math> and <math>h_2</math> to build a double hashing table <math>T</math>.
| | <li>[http://www.laocheng.cc/forum.php?mod=viewthread&tid=108550&extra= http://www.laocheng.cc/forum.php?mod=viewthread&tid=108550&extra=]</li> |
| | | |
| All elements are put in <math>T</math> by double hashing using <math>h_1</math> and <math>h_2</math>.
| | <li>[http://www.029find.com/bbs/home.php?mod=space&uid=186645 http://www.029find.com/bbs/home.php?mod=space&uid=186645]</li> |
| Given a key <math>k</math>, determining the <math>(i+1)</math>-st hash location is computed by:
| | |
| | | <li>[http://bbs.gonbes.com/home.php?mod=space&uid=24617 http://bbs.gonbes.com/home.php?mod=space&uid=24617]</li> |
| <math> h(i,k) = ( h_1(k) + i \cdot h_2(k) ) \mod |T|.</math>
| | |
| | | </ul> |
| Let <math>T</math> have fixed load factor <math>\alpha: 1 > \alpha > 0</math>.
| |
| Bradford and [[Michael N. Katehakis |Katehakis]]<ref>
| |
| P. G. Bradford and M. Katehakis:
| |
| ''A Probabilistic Study on Combinatorial Expanders and Hashing'', SIAM Journal on Computing 2007 (37:1), 83-111.
| |
| http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.91.2647 | |
| </ref> | |
| showed the expected number of probes for an unsuccessful search in <math>T</math>, still using these initially chosen hash functions, is <math>\frac{1}{1-\alpha}</math> regardless of the distribution of the inputs.
| |
| More precisely, these two uniformly, randomly and independently chosen hash functions are chosen from a set of [[universal hash]] functions where pair-wise independence suffices.
| |
| | |
| Previous results include:
| |
| Guibas and Szemerédi<ref>
| |
| L. Guibas and E. Szemerédi:
| |
| ''The Analysis of Double Hashing'', Journal of Computer and System Sciences, 1978, 16, 226-274.
| |
| </ref>
| |
| showed <math>\frac{1}{1-\alpha}</math> holds for unsuccessful search for load factors
| |
| <math>\alpha < 0.319</math>.
| |
| Also, Lueker and Molodowitch<ref>
| |
| G. S. Lueker and M. Molodowitch:
| |
| ''More Analysis of Double Hashing'', Combinatorica, 1993, 13(1), 83-96.
| |
| </ref> | |
| showed this held assuming ideal randomized functions.
| |
| Schmidt and Siegel<ref>
| |
| J. P. Schmidt and A. Siegel:
| |
| ''Double Hashing is Computable and Randomizable with Universal Hash Functions'', manuscript.
| |
| </ref>
| |
| showed this with <math>k</math>-wise
| |
| independent and uniform functions (for <math>k = c \log n</math>, and suitable constant <math>c</math>).
| |
| | |
| == Implementation details for caching == | |
| | |
| Linear probing and, to a lesser extent, quadratic probing are able to take advantage of the data cache by accessing locations that are close together. Double hashing has, on average, larger intervals and is not able to achieve this advantage. To avoid this situation, store your data with the second key as the row, and your first key as the column. Doing this allows you to iterate on the column, thus preventing cache problems. This also prevents the need to rehash the second key.
| |
| | |
| For instance:
| |
| | |
| <source lang=c>
| |
| pData[hk_2][hk_1]
| |
| | |
| int hv_1 = Hash(v)
| |
| int hv_2 = Hash2(v)
| |
| | |
| int original_hash = hv_1
| |
| while(pData[hv_2][hv_1]){
| |
| hv_1 = hv_1 + 1
| |
| }
| |
| </source> | |
| | |
| Like all other forms of open addressing, double hashing becomes linear as the hash table approaches maximum capacity. The only solution to this is to rehash to a larger size, as with all other open addressing schemes.
| |
| | |
| On top of that, it is possible for the secondary hash function to evaluate to zero. For example, if we choose k=5 with the following function:
| |
| | |
| <math> h_2(k) = 5 - (k\mod 7) </math> | |
| | |
| The resulting sequence will always remain at the initial hash value. One possible solution is to change the secondary hash function to:
| |
| | |
| <math> h_2(k) = (k\mod 7) + 1</math>
| |
| | |
| This ensures that the secondary hash function will always be non zero.
| |
| | |
| ==See also==
| |
| * [[Hash collision]]
| |
| * [[Hash function]]
| |
| * [[Linear probing]]
| |
| * [[Cuckoo hashing]]
| |
| | |
| ==Notes==
| |
| {{reflist}}
| |
| | |
| ==External links==
| |
| *[http://www.siam.org/meetings/alenex05/papers/13gheileman.pdf How Caching Affects Hashing] by Gregory L. Heileman and Wenbin Luo 2005.
| |
| *[http://www.cs.pitt.edu/~kirk/cs1501/animations/Hashing.html Hash Table Animation]
| |
| | |
| [[Category:Search algorithms]]
| |
| [[Category:Hashing]]
| |
「まあ、それは私たちの番です
秦Yuは笑った: 'フェイフェイ、このことは、彼の冒険があなたよりも強いものを多分黒、言うのは難しいことができます?'
「ありそうになりました クリスチャンルブタン 取扱店。」
侯飛Mozhuoxiabaは、のように見えるために被疑者を出す クリスチャンルブタン。
「まあ、それは私たちの番です。 クリスチャンルブタンジャパン '秦Yuは大声で思い出しました。侯飛秦ゆう、その後、姿を消した星間霧ランプ付Chuansongジェン、秦ゆうと侯飛に入った。
今回黄金の妖精の手がコミュニケーションLingzhuを保持している:」大人、秦ゆうと侯チュアンSongzhen料はCuiyunスターIIIの出発を掛けた」
悪魔の世界。多くのマスターは不滅であり、悪魔は、結局、理由の星間Chuansongジェンのキム·シンの強さ以上のように多くの人が他のコミュニティに来た クリスチャンルブタン 東京。
×××
皇帝西安の木製の拡張は雲の中で飛んで、目的地は現在、皇帝玄ゆう黄、土地の所有権、名前のない島です。木のヤン皇帝西安強度はもちろん、テレポートの過去をキャスト、しかし クリスチャンルブタン スニーカー......木製の拡張子が、飛んでいる妖精神感を楽しむことができますが、飛行中に、彼がどのように考えることができます
相关的主题文章:
非常に柔軟ではないですか
また、唐シャンルー柯、戦争はサイレントボイド立っているすべての背後に法執行機関と並んで立っていた。
ビッグ6と天のゲートアレイを見
、秦ゆう人Dudou クリスチャンルブタン 店舗 東京 5殿下は、秦Yuは、黄金の光のようなものです5殿下も賢くながら、お互いに3架空のミッド殿下のアクションでこれらの3つの穴。
ディロンのすべての方法、ディアロー、ディ徐ヤンディ·ディベアトリオずっとずっと、この三方攻撃秦ゆう、レジストされていません クリスチャンルブタン 値段。
「ルー柯、あなたの頭は、あなたが秦ゆうがどのくらいの時間のために固執することができると言う?非常に柔軟ではないですか? クリスチャンルブタン 銀座 '唐シャン、現時点では生きて出てくることができ秦ゆう唐シャンは、少し希望を持っていなかった、笑顔で尋ねた。
秦ゆう高速だが、常にそう速度飛行が、星の多くの電力を消費する必要がある。
「彼らは、道路なしでキャッチされ、どのくらい?邪悪寺院9 クリスチャンルブタン 店舗 5殿下は、常にそう愚か追いかけるなら、私は推測する秦ゆうを殺すことはできません。「ルー柯ペア自信のある表情を。
テン山はこれが不満です クリスチャンルブタン 東京。
これ
「ルー柯、
相关的主题文章: