
- •Блок 5.07.02 структури даних (масиви, списки, графи, дерева) Модуль 5.07.02.01 структури даних Указатели и ссылки.
- •Контрольные вопросы:
- •Что собой представляют указатели?
- •Как можно описать указатели на языке Паскаль? Отображения.
- •Контрольные вопросы:
- •Каково назначение отображения?
- •Назовите команды работы с отображениями.
- •Как реализовываются отображения? Стеки и рекурсивные процедуры.
- •Листинг . Рекурсивное решение задачи о ранце
- •Контрольные вопросы:
- •В чем состоит организация выполнения процедур?
- •Что такое адрес возврата?
- •Контрольные вопросы:
- •Каково назначение хеш-таблицы?
- •Что такое хеш-функция? Словари.
- •Контрольные вопросы:
- •Каково назначение словарей?
- •Какие есть способы представления словарей?
Контрольные вопросы:
В чем состоит организация выполнения процедур?
Что такое адрес возврата?
Хеш-таблицы.
Хеш-таблица позволяет осуществлять прямой доступ к элементам множества.
Элементы множества помещаются в хеш-таблицу в соответствии с алгоритмом хеширования, в основе которого лежит специальная функция, называемая хеш-функцией. Эта функция каждому элементу ставит в соответствие его местонахождение (индекс) в хеш-таблице.
Рассмотрим следующий пример.
Пусть задано множество целых чисел С={80,11,32,43,17,56,44,25,78,19}. В этом случае хеш-таблицу можно было бы организовать так:
-
1
2
3
4
5
6
7
8
9
10
80
11
32
43
44
25
56
17
78
19
Функция хеширования здесь имеет вид:
H(item) = item mod 10+1
Значение H(item) задает индекс элемента item в таблице, что позволяет осуществлять прямой доступ к элементам. Например Н(17)=8.
В данном случае для всех элементов множества С хеш-функция принимает разные значения, и поэтому множество С удалось представить с помощью обычного массива. Однако при добавлении элементов во множество, такая структура данных уже не подходит. Наиболее распространенной реализацией хеш-таблицы является массив указателей на списки, содержащие элементы множества с одинаковым значением хеш-функции. Например, для множества С={70,25,32,80,10,15,77} и той же хеш-функции H(item) хеш-таблица будет иметь вид:
Контрольные вопросы:
Каково назначение хеш-таблицы?
Что такое хеш-функция? Словари.
Применение множеств при разработке алгоритмов не всегда требует таких мощных операторов, как операторы объединения и пересечения. Часто достаточно только хранить в множестве "текущие" объекты с периодической вставкой или удалением некоторых из них. Время от времени также возникает необходимость узнать, присутствует ли конкретный элемент в данном множестве. Абстрактный тип множеств с операторами INSERT, DELETE и MEMBER называется DICTIONARY (Словарь).
Словари можно представить посредством сортированных или несортированных связанных списков.
Другая возможная реализация словарей использует двоичные векторы, предполагая, что элементы данного множества являются целыми числами
1, ..., N для некоторого N или элементы множества можно сопоставить с таким множеством целых чисел.
Третья возможная реализация словарей использует массив фиксированной длины с указателем на последнюю заполненную ячейку этого массива. Эта реализация выполнима, если мы точно знаем, что размер множества не превысит заданную длину массива. Эта реализация проще реализации посредством связанных списков, но имеет следующие недостатки: множества могут расти только до определенной фиксированной величины; медленно выполняются операции удаления элементов из множества (так как требуется перемещение оставшихся элементов массива) и невозможность эффективно организовать пространство массивов (особенно если множества имеют различные размеры).