2014-12-02 54 views
0

朋友告訴我,由於碎片問題,強烈建議不要使用2D哈希表?任何人都可以告訴如果是這種情況,爲什麼?爲什麼2D哈希映射是內存效率低下?

+1

我建議看看hashmaps是如何實現的,看看分配的位置以及它如何導致內存碎片。請注意,如果添加碎片整理堆的間接層,則可以完全避免內存碎片。 – Dai 2014-12-02 02:53:12

回答

1

就我個人而言,如果合理需要2d散列表,我不認爲有任何理由阻止使用。

他們可能指的是系統如何處理碰撞。如果兩個不同的值以相同的散列值位置結束,我們該怎麼做?我們仍然需要將它們都存儲起來。有幾種不同的技術可以用來處理這個問題,其中之一是旨在從一大堆可能的散列值位置開始,這可能會導致大量的浪費空間。更好的方法是檢查下一個可用位置,直到找到空閒位置。

自從我研究這些類型的存儲以來,這已經有一段時間了,但這似乎就像他們可能在談論的那樣。這不是一個主要問題,當然也不是一個不使用hashmaps(包括2d)的理由。我不確定這一點,但我認爲上面的問題複合使用更多的維度(因此更多的是2d散列表問題)。

2

爲了高效,hashmap需要一定數量的空白空間,否則衝突率會太高。如果哈希映射包含更多hashmaps,則效果會相乘 - 如果每個哈希映射滿了50%,則組合只有25%滿。

更有效的策略可能是將兩個密鑰合併成一個密鑰並使用單級哈希映射。

+0

你能解釋一下爲什麼把兩個鍵合併成單個鍵並使用一維散列表會更有效嗎? – f4fc2791e4473eb2ba41b5ddb445b2 2014-12-02 03:48:35