
- •Глава 6. Алгоритмы поиска
- •6.1. Последовательный поиск
- •6.2. Бинарный поиск в упорядоченной таблице
- •6.3. Поиск Фибоначчи в упорядоченной таблице
- •6.4. Поиск по бинарному дереву
- •6.4.1. Бинарное дерево поиска
- •6.4.2. Поиск и вставка в дереве поиска.
- •6.4.3.Удаление из дерева поиска
- •6.4.4. Оптимальное бинарное дерево поиска
- •6.5. Префиксный цифровой поиск
- •6.5.1. Префиксное дерево
- •6.5.2. Алгоритм префиксного поиска
- •6.6. Поиск по вторичным ключам
6.6. Поиск по вторичным ключам
Возможна ситуация,
когда несколько полей
отдельной записи файла, вместе или по
отдельности, могут участвовать в задании
поиска. Особенно часто такие ситуации
возникают при работе сбазами
данных.
Последние являются файлами разнообразной
структуры; для работы с ними разработаны
разнообразные языки программирования
высокого уровня.
Инвертированные файлы
Для ускорения поиска с использованием нескольких ключей используются инвертированные файлы, связанные с исходным основным файлом. Отдельная запись инвертированного файла состоит из значения ключа поиска и адресной части. Адресная часть может содержать либо набор физических адресов записей основного файла с данным значением ключа, либо указатель на связанный список из таких адресов.
Изменения в основном файле — вставка, удаление записей, изменение значений полей, участвующих в построении ключа поиска — должны отражаться в инвертированных файлах.
Геометрические данные. Рассмотрим ситуацию, когда ключевые поля файла задают координаты точек. Например, это могут быть широта и долгота географических точек (населённых пунктов, пересечений дорог и т.п.) на поверхности Земли; другой пример — декартовы координаты точек пространства или плоскости; третий пример — номера строки и столбца точки (пикселя) экрана. Для ускорения поиска всех объектов, отвечающих заданным диапазонам изменения координат, может использоваться инвертированный файл, отвечающий дискретной сетке координат с некоторым шагом. Тогда ключевым полем отдельной записи инвертированного файла является набор округлённых значений координат, а в ссылочной части отражается список физических адресов записей основного файла, в которых значения координат тяготеют к данному узлу координатной сетки.
Комбинаторное хеширование.
Хешированием (более
подробно см. гл. 7) называют способ
отображения множества с потенциально
большим числом элементов в множество
с малым числом элементов
,
при котором каждый образ
имеет примерно одинаковое максимально
возможное число прообразов
,
таких что
.
Для ключа поиска
типа “битовая строка” возможны запросы
на поиск «по маске», в которых задаётся
только часть двоичных цифр. В тех
позициях, в которых соответствующая
цифра может быть произвольной, в запросе
могут стоять, например, звёздочки «*».
Так, если ключ является 8-битовой строкой,
то поиск всех записей, у которых в
разрядах с нечётными номерами стоит
,
а в последнем восьмом разряде —
,
делается с помощью запроса по маске
вида <
>.
Для быстрого поиска по «запросам со звёздочкой» применяется технология инвертированных файлов. Каждая возможная маска является ключом, а адресная часть содержит, например, указатель на связанный список из физических адресов подходящих под маску записей основного файла.