Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 6_Поиск.doc
Скачиваний:
73
Добавлен:
15.02.2015
Размер:
1.1 Mб
Скачать

6.6. Поиск по вторичным ключам

Возможна ситуация, когда несколько полей отдельной записи файла, вместе или по отдельности, могут участвовать в задании поиска. Особенно часто такие ситуации возникают при работе сбазами данных. Последние являются файлами разнообразной структуры; для работы с ними разработаны разнообразные языки программирования высокого уровня.

Инвертированные файлы

Для ускорения поиска с использованием нескольких ключей используются инвертированные файлы, связанные с исходным основным файлом. Отдельная запись инвертированного файла состоит из значения ключа поиска и адресной части. Адресная часть может содержать либо набор физических адресов записей основного файла с данным значением ключа, либо указатель на связанный список из таких адресов.

Изменения в основном файле — вставка, удаление записей, изменение значений полей, участвующих в построении ключа поиска — должны отражаться в инвертированных файлах.

Геометрические данные. Рассмотрим ситуацию, когда ключевые поля файла задают координаты точек. Например, это могут быть широта и долгота географических точек (населённых пунктов, пересечений дорог и т.п.) на поверхности Земли; другой пример — декартовы координаты точек пространства или плоскости; третий пример — номера строки и столбца точки (пикселя) экрана. Для ускорения поиска всех объектов, отвечающих заданным диапазонам изменения координат, может использоваться инвертированный файл, отвечающий дискретной сетке координат с некоторым шагом. Тогда ключевым полем отдельной записи инвертированного файла является набор округлённых значений координат, а в ссылочной части отражается список физических адресов записей основного файла, в которых значения координат тяготеют к данному узлу координатной сетки.

Комбинаторное хеширование. Хешированием (более подробно см. гл. 7) называют способ отображения множества с потенциально большим числом элементов в множество с малым числом элементов , при котором каждый образимеет примерно одинаковое максимально возможное число прообразов, таких что.

Для ключа поиска типа “битовая строка” возможны запросы на поиск «по маске», в которых задаётся только часть двоичных цифр. В тех позициях, в которых соответствующая цифра может быть произвольной, в запросе могут стоять, например, звёздочки «*». Так, если ключ является 8-битовой строкой, то поиск всех записей, у которых в разрядах с нечётными номерами стоит , а в последнем восьмом разряде —, делается с помощью запроса по маске вида <>.

Для быстрого поиска по «запросам со звёздочкой» применяется технология инвертированных файлов. Каждая возможная маска является ключом, а адресная часть содержит, например, указатель на связанный список из физических адресов подходящих под маску записей основного файла.

141