Hash Array Mapped Trie (HAMT)

Я пытаюсь разобраться в деталяхHAMT, Я'иметьсам реализовал на Java просто чтобы понять. Я знаком с Tries и думаю, что понял основную концепцию HAMT.

В принципе,

Два типа узлов:

Key / Value

Key Value Node:
  K key
  V value

Индекс

Index Node:
  int bitmap (32 bits)
  Node[] table (max length of 32)
Создайте 32-битный хеш для объекта.Шаг через 5-битный хэш за раз.(0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-31) примечание: последний шаг (7-й) - только 2 бита.На каждом шаге найдите позицию этого 5-битного целого числа в растровом изображении. напримерinteger==5 bitmap==00001Если бит равен 1, то эта часть хеша существует.Если бит равен 0, то ключ нене существует.Если ключ существует, найдите егоs индексировать в таблицу путем подсчета числа 1 в растровом изображении между 0 и позицией. напримерinteger==6 bitmap==0101010101 index==3Если таблица указывает на узел ключ / значение, сравните ключи.Если таблица указывает на индексный узел, переходите к 2, продвигаясь на один шаг вперед.

Часть, которую я неЯ понимаю, что обнаружение столкновений и смягчение их последствий. В связанной статье он ссылается на это:

Затем существующий ключ вставляется в новую подхеш-таблицу и добавляется новый ключ. Каждый раз, когда используются еще 5 бит хеша, вероятность столкновения уменьшается в 1/32 раза. Иногда может быть использован весь 32-битный хеш, и новый должен быть вычислен длявыделите два ключа.

Если бы я был вычислитьновый» хэш и сохранить объект в этом новом хеше; как вы сможете найти объект в структуре? Делая поиск, нет это порождает "начальная» а не хешпересчитанный хеш ".

Я должен что-то упустить .....

Кстати, HAMT работает довольно хорошо, этоs сидит между хэш-картой и картой дерева в моих тестах.

Data Structure                    Add time   Remove time     Sorted add time Sorted remove time   Lookup time     Size     
Java's Hash Map                   38.67 ms   18 ms           30 ms           15 ms                16.33 ms        8.19 MB        
HAMT                              68.67 ms   30 ms           57.33 ms        35.33 ms             33 ms           10.18 MB       
Java's Tree Map                   86.33 ms   78 ms           75 ms           39.33 ms             76 ms           8.79 MB        
Java's Skip List Map              111.33 ms  106 ms          72 ms           41 ms                72.33 ms        9.19 MB     

Ответы на вопрос(4)

Ваш ответ на вопрос