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