вихідного, можуть виявитися порожніми, то верхню межу
трудомісткості пошуку наперед передбачити неможливо.
18.5. Роздільні геш-функції
Геш-функції як аргумент здатні отримувати списки значень
атрибутів, хоча, зазвичай, гешуванню піддаються значення одного
атрибута. Наприклад, якщо a і b – цілочисловий і рядковий
атрибути, відповідно, то для обчислення номера сегмента геш-
таблиці, використаної як індекс для пар значень (а,b), можна
додати величину а з ASCII-кодами усіх символів рядка b, поділити
отриману суму на кількість сегментів і взяти залишок від ділення.
Однак подібну геш-функцію можна використати тільки в таких
запитах, в яких водночас беруть участь значення атрибутів а і b.
Краще ж проектувати геш-функцію так, щоб вона повертала певну
кількість бітів (наприклад, k), розподілених між n атрибутами, де k
i
бітів геш-коду обчислюють на підставі і-го атрибута і .
Якщо казати точніше, то геш-функція h насправді є списком (h
1
.
h
2
. …, h
n
) геш-функцій, де функція h
i
застосовується до значення
і-го атрибута і повертає послідовність з k
i
бітів. Номер сегмента
індексу, з якого адресується кортеж зі значеннями (v
1
, v
2
, …, v
n
) n
атрибутів, обчислюється шляхом зчеплення часткових бітових
послідовностей: h
1
(v
1
)h
2
(v
2
)…h
n
(v
n
).
kk
n
i
i
=
∑
=1
Приклад 82. Припустимо, що є кортеж, компонент а якого
містить значення А, а компонент b – значення В (інші компоненти
в гешуванні участі не беруть). Нехай сегменти геш-таблиці
володіють 10-бітовими номерами, тобто таблиця може містити до
1024 сегментів, і чотири біти відводяться для атрибута а, а решта
шість – атрибута b. Функція h
a
, пов’язана з атрибутом а, гешує
значення А і повертає чотири біти (наприклад, 0101), а функція h
b
,
поставлена у відповідність атрибутові b, на основі значення B
обчислює послідовність із шести бітів (111000). Отож кортежу
(А,В) відповідатиме сегмент геш-таблиці, що володіє номером
0101111000, який налічує дві часткові бітові послідовності,
отримані для значень А і В.
221