簡體   English   中英

hash map(或 hash 表)是否應該在其內部結構中有一個數組?

[英]Is hash map (or hash table) should have an array in its internal structure?

我看過很多例子或文章解釋hash map基於array

例如,所有數據都存儲在一個數組中,您可以通過調用 hash function及其鍵來獲取一個值的索引

因此,在沒有沖突的情況下,對 hash map 的任何訪問都是O(1) 由於訪問實際上是針對數組的,因此知道它的索引。

我的問題是,是否有任何特定語言或庫的實現hash map 不是基於數組構建的?

hash map 是否必須建立在陣列上?

雖然還有其他數據結構同時使用 hash 函數和除 arrays 之外的數據結構來提供鍵/值映射(您可以在Z5E056C500A1C4B6A7110B50D807BADEIA.wikipedia.org上閱讀有關內容)。它們不是“哈希圖”,因為組合短語通常是有意和理解的。 當人們談論 hash 地圖時,他們通常期望下面有一個 hash 表,並且該表將具有一組存儲桶(或偶爾一對以允許逐漸調整大小以獲得更一致的性能)。

對 hash 映射的一般期望是它們提供分期 O(1) 查找,並且只有在對密鑰進行散列后,您可以使用 hash 值進行 O(1) 查找時才有可能。 數組是具有該屬性的明顯數據結構。 還有一些其他選項,例如擁有 arrays 的固定深度樹,上層保存指向下層的指針,最后一層是值或指向它們的指針。 必須允許至少一個級別任意增長,以使整個容器支持任意大小。 在最大深度不變的情況下,查找步驟的數量與存儲的鍵或元素的數量無關,因此它仍然是 O(1) 查找。 這可以部分減輕在大型 arrays 之間更頻繁地復制/移動元素的成本,但代價是在查找過程中不斷有更多(但恆定)的級別要遍歷。

C++ std::deque利用這種結構提供 O(1) 查找。 請參閱STL 按索引訪問雙端隊列是 O(1)? 用於解釋,圖表。 也就是說,我從未見過有人在實現 hash map 時選擇使用deque

暫無
暫無

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

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