Сравнение методов организации таблиц
В малых таблицах средняя длина поиска приблизительно одинакова для всех методов (табл. 5.1, столбец m=8).
Поэтому для малого числа элементов предпочтительнее линейные таблицы (алгоритм проще, быстрее по времени). Для удаления элементов удобнее списки.
В больших таблицах самый быстрый поиск дают методы хеширования. Если они неудобны по каким-то причинам (требуется упорядоченная распечатка, частые удаления, трудно найти подходящую функцию расстановки или предугадать размер таблицы), используют древовидные таблицы, возможно с балансировкой.
Таблица 5.1
Сравнение таблиц по длине поиска
Вид таблицы | Средняя длина поиска (m – количество элементов) | |||
Формула для Dср | m = 8 | m = 64 | m= 1024 | |
Линейная | m / 2 | |||
Древовидная | 1.39 log2 m | 4.2 | 8.4 | 13.9 |
Перемешанная при N=1.25 m, s=0.8 | (2-s) / (2-2*s) Dср = 3 |
В хеш-таблицах мала средняя длина поиска, но максимальная длина поиска в наихудшем случае велика - равна m. Поэтому они могут оказаться неприемлемыми и в особо ответственных системах, например, для управления транспортом. Сбалансированные деревья дают гарантии достаточно быстрого поиска и в наихудшем случае.
Граница между малыми и большими таблицами зависит от ЭВМ, длины ключа и других факторов и соответствует обычно значению m от 30 до 80.
Упражнения и задачи
5.1. Составить полные программы по алгоритмам, приведенным в примерах 5.1, 5.2.
5.2. Составить фрагменты программ поиска без использования барьера для линейных таблиц в виде вектора и списка и древовидных таблиц.
5.3. Оформить приведенные в разделе 5 операции над таблицами в виде подпрограмм.
5.4.Написать программу подсчета количества повторений в данном тексте каждой цифры: 0, 1, ... , 9.
5.5. В пустую таблицу поступают ключи в следующем порядке: МГУ, ЛГУ, КАИ, ТГУ, КГПУ, ТПИ, НГТУ. Изобразить результирующее дерево поиска и представление в памяти этого дерева с помощью параллельных массивов. Является ли полученное дерево выровненным, АВЛ-деревом? Указать последовательность ключей при обходе этого дерева сверху, слева направо и снизу (см. раздел 4). Как изменится таблица после удаления ключа ЛГУ?
5.6. В пустую таблицу поступают ключи в следующем порядке: МГУ, ЛГУ, КАИ, ТГУ, КГПУ, ТПИ, НГТУ. Для хеш-таблицы с открытым перемешиванием показать содержимое отображающего вектора (расстановочного поля), если его длина равна 9, шаг перемешивания равен 2. Хеш-функция определена таблично:
Ключ | КАИ | КГПУ | ЛГУ | МГУ | НГТУ | ТГУ | ТПИ |
Значение хеш-функции |
Как изменится таблица после удаления ключа ЛГУ?
5.7. Древовидная таблица содержит ключи (в порядке поступления): МГУ, ЛГУ, КАИ, ТГУ, КГПУ, ТПИ, НГТУ. Найти среднюю длину поиска для дерева полученной конфигурации, считая, что вероятности поиска всех ключей одинаковы и равны 0.1, а вероятность безуспешного поиска (отсутствующего ключа) равна 0.3. Считать, что безуспешный поиск с равной вероятностью заканчивается в любой из пустых ссылок.
Для сравнения оценить длину поиска в таблице в среднем по всем конфигурациям дерева, считая их равновероятными, по общей формуле:
древ
Dср = 1.39 log2 m,
где m - количество элементов таблицы.
5.8. Таблица содержит ключи (в порядке поступления): МГУ, ЛГУ, КАИ, ТГУ, КГПУ, ТПИ, НГТУ.
Даны вероятности:
- безуспешного поиска - 0.1;
- поиска ключей: КАИ - 0.3, КГПУ - 0.1, ЛГУ - 0.1,
МГУ - 0.15, НГТУ - 0.1, ТГУ - 0.1, ТПИ - 0.05 .
Найти среднюю длину поиска для разных методов организации таблиц:
1) линейная таблица с расположением ключей в порядке их поступления;
2) линейная таблица с расположением ключей в лексикографическом порядке (как в словарях);
3) линейная таблица с расположением ключей в порядке убывания вероятностей их поиска;
4) древовидная таблица с расположением ключей в порядке их поступления;
5) перемешанная таблица из задачи 4.3 (рис. 4.2а);
6) перемешанная таблица из 7 элементов с расстановочным полем длиной 9 и равномерно распределенной функцией расстановки (как на рис. 4.2а, только без учета конкретных ключей и их вероятностей).
5.9. Составить фрагменты программы (подпрограммы) включения и исключения элемента в упорядоченной по возрастанию ключей линейной таблице в виде вектора. Ключ элемента - вещественное число.
5.10. Составить фрагменты программы (подпрограммы) инициализации и поиска с включением в древовидной таблице без использования барьера для представления дерева
а) ссылочными данными;
б) параллельными массивами.
5.11. Для перемешанной таблицы cоставить фрагменты программы (подпрограммы)
а) поиска с включением открытым перемешиванием с квадратичным рехешированием;
б) инициализации, поиска, включения и удаления для разрешения конфликтов с помощью списков конфликтующих ключей.
5.12. Для перемешанной таблицы длиной n = 2k cоставить подпрограмму вычисления индекса p повторного перемешивания, используя псевдослучайное число r с начальным значением 1, по следующему методу:
r = младшие к+2 бита 5*r;
p = r, сдвинутое на 2 бита вправо.
5.13. Оценить необходимый объем памяти для организации таблиц в задачах: 5.4 - 5.6, 5.8 - 5.11. Недостающие детали представления уточнить самостоятельно.