словами, оскільки блок уміщає тільки два записи, то середній
рівень заповнення сегментів не повинен перевищувати 85% від
місткості блока.
16.8. Вставка записів у лінійну геш-таблицю
За необхідності вставки в геш-таблицю нового запису для
визначення сегмента таблиці, який підходить, використовують
алгоритм, розглянутий у пункті 16.7. Спочатку для заданого
значення К ключа пошуку запису обчислюють геш-функцію h(K), і
як шуканий номер m сегмента використовують і молодших бітів
послідовності h(K). Якщо m<n, то запис заноситься у сегмент m;
якщо ж m≥n, то запис розташовується у сегменті m-2
i-1
. Якщо в
обраному сегменті немає вільного місця, то створюється блок
переповнення, який приєднується до ланцюга блоків сегмента.
Під час виконання кожної операції вставки значення співвідно-
шення r/n аналізують з урахуванням кількості r записів, яка зросла.
Якщо співвідношення стає надто великим, то в таблицю додається
новий сегмент. Зауважимо, що сегмент, який додається, не має
відношення до того, в який вставляється черговий запис. Якщо
бінарним представленням номера доданого сегмента є послідов-
ність 1а
2
...а
і
, то розділяється сегмент 0а
2
...а
і
. Записи заносяться в
один із двох отриманих сегментів залежно від значення бітів а
і
.
Зазначимо, що всі ці записи повинні мати геш-коди, які
завершуються послідовністю а
2
...а
і,
і розглядатиметься тільки
значення і-го біта з правого боку.
Ще один важливий аспект стосується ситуації, коли значення n
перевищує 2
і
. У цьому випадку біжучий вміст і збільшується на
одиницю і на початку бітового представлення номера кожного
сегмента заноситься додатковий 0. Насправді нічого не змінюється,
оскільки бітові послідовності, які інтерпретуються як цілі десяткові
числа, залишаються попередніми.
Приклад 70. Продовжимо розгляд структури, представленої на
рис. 73, і припустимо, що в неї необхідно вставити запис з ключем,
що гешується у бітову послідовність 0101. Оскільки останнім бітом
є 1, то запис необхідно розташувати у другому (нижньому)
сегменті. Сегмент має достатньо вільного простору, отож блок
переповнення не створюється.
191