Изменения

Перейти к: навигация, поиск

Расширяемое хеширование

198 байт добавлено, 23:53, 6 июня 2015
Нет описания правки
Рассмотрим алгоритм на примере.
Пусть у нас есть некий каталог со своими указателями и мы хотим добавить значения <tex>9, 20, 26</tex> (см. рис1) где <tex>G</tex> — глобальная глубина, <tex>l1, l2, l3, l4</tex> — локальные глубины емкостей, а вместимость емкостей равна <tex>3</tex>. Рассмотрим значение <tex>9</tex>. В двоичном коде оно равно <tex>1001</tex>( <tex>9 = 8+1 = 1000+1 = 1001</tex> ). Окончание <tex>01</tex> соответствует второй ячейке значит смотрим на вторую емкость. В ней есть свободное место и мы просто помещаем <tex>9</tex> в нее (см. рис2). На этом работа с <tex>9</tex> закончена. Далее идет значение <tex>20</tex>. В двоичном виде оно представляется как <tex>10100</tex>( <tex>20 = 16+4 = 10000+100 = 10100</tex> ). Это значение оканчивается на <tex>00</tex> и должно пойти в первую емкость, но первая емкость полностью заполнена. Следовательно мы смотрим на <tex>l1</tex>. <tex>l1 = G</tex> а значит мы должны удвоить количество ячеек каталога, увеличить глобальную глубину, затем увеличить количество последних бит по которым мы раскидываем значения на <tex>1</tex> и перехешировать первую емкость, разделив ее на две, увеличив локальную глубину и разместив значения по новым емкостям (см. рис3). Теперь рассмотрим последнее число <tex>26</tex>. Его двоичное представление — <tex>11010</tex>( <tex>26 = 16+8+2 = 10000+1000+10 = 11010</tex> ). Последние <tex>3</tex> бита соответствуют третьей емкости, но она также полностью заполнена как и во втором случае, но ее локальная глубина меньше чем глобальная а следовательно нам надо только перехешировать емкость, разделив ее на две, увеличив локальную глубину и разместив значения по новым емкостям (см. рис4).
{|align="center"
|-valign="top"
29
правок

Навигация