
- •Конспект лекций по курсу
- •Абстрактные структуры данных
- •Определение
- •Базовые структуры данных
- •Очереди и стеки
- •Деревья
- •Внутренние структуры данных
- •Отображение абстрактных структур данных на внутренние
- •Строка-вектор
- •1. Функция сцепления двух строк
- •2. Функция поэлементного сравнения двух строк
- •3. Функция разбиения строки.
- •4. Функция нахождения подстроки в строке
- •Строка-список
- •1. Сцепление двух строк
- •2. Поэлементное сравнение двух строк
- •3. Разбиение строки на части
- •4. Функция нахождения подстроки в строке
- •Стек-вектор
- •Стек-список
- •Очереди
- •Очередь-вектор
- •Очередь-список
- •Деревья
- •Классификация таблиц
- •Способ работы с таблицей
- •Способ доступа к таблице
- •Просматриваемые таблицы
- •Статическая просматриваемая таблица-вектор
- •Динамическая просматриваемая таблица-вектор
- •Просматриваемая таблица-список
- •Упорядоченные таблицы
- •Упорядоченная таблица-вектор
- •Динамическая упорядоченная таблица – вектор
- •Упорядоченная таблица – двоичное дерево
- •Перемешанные таблицы
- •Открытое перемешивание
- •Перемешивание сцеплением
Перемешивание сцеплением
Перемешанная таблица, использующая перемешивание сцеплением, обладает следующими свойствами:
Таблица явно разделяется на две области – основную и переполнения;
Основная область таблицы отображается вектором, размер которого должен быть достаточным для отображения всех значений ключей;
Область переполнения представляет собой семейство списков – отдельный список для каждого элемента основной области.
Следовательно, элемент перемешанной таблицы, использующей перемешивание сцеплением, должен иметь еще одно поле – поле связи с элементами из области переполнения (рис. II–50).
Рис. II–50
Рассмотрим способ перемешивания сцеплением на примере выполнения операции включения элементов в таблицу.
Пусть дана та же, что и ранее, последовательность ключей элементов, записываемых в таблицу (всего 15 элементов):
12, 48, 3, 5, 7, 63, 15, 202, 103, 188, 30, 43, 6, 18, 19
Используем ту же функцию расстановки:
I(k) = k%10;
В соответствии с выбранной функцией расстановки основная область таблицы будет представлена вектором из 10 элементов.
Функция расстановки отобразит исходное множество ключей в следующее множество производных ключей:
номер элемента |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
исходный ключ |
12 |
48 |
3 |
5 |
7 |
63 |
15 |
202 |
103 |
188 |
30 |
43 |
6 |
18 |
19 |
производный ключ |
2 |
8 |
3 |
5 |
7 |
3 |
5 |
2 |
3 |
8 |
0 |
3 |
6 |
8 |
9 |
При занесении записей в таблицу, пока не встретится коллизия (т.е. до записи с ключом 63), записи будут включаться в основную область. В случае коллизии запись будет включена в список, связанный с соответствующим элементом основной таблицы, причем переполняющая запись может быть включена и в начало, и в конец соответствующего списка. В результате занесения всех перечисленных записей таблица примет вид, приведенный на рис. II–51 (для наглядности переполняющие записи включаются в конец соответствующего списка).
Рис. II–51
Из приведенного примера видно, что записи, ключи которых имеют одинаковое значение производного ключа, объединяются в один список; следовательно, при поиске записи потребуется просматривать только записи таблицы с одинаковым значением производного ключа. В упоминавшейся выше книге Ф. Хопгуда "Методы компиляции" (стр. 36) приведена следующая оценка средней длины поиска для случайных, равномерно распределенных записей:
,
где M– размер основной области таблицы (отображающего вектора),
N– общее количество элементов в таблице.
На практике отображающий вектор (основную область таблицы) можно представить только массивом указателей на элементы таблицы, а все записи включать в область переполнения. В этом случае все операции с таблицей сначала осуществляют выбор необходимого списка (элемента массива указателей), а затем реализуется требуемая операция со списком (соответствующие операции со списками были рассмотрены ранее). При такой организации таблицы минимальная длина доступа будет равна 2, так как всегда требуется, по крайней мере, одно дополнительное обращение к области переполнения. С другой стороны, выполнение операций вставки и удаления при такой организации таблицы не требуют проверок, где размещается элемент – в основной области или области переполнения. Предлагаю самостоятельно разработать и реализовать основные операции работы с перемешанной таблицей, использующей перемешивание сцеплением.