[英]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.