Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
find8_1.doc
Скачиваний:
35
Добавлен:
12.03.2015
Размер:
3.46 Mб
Скачать

«Кто ищет, тот всегда найдет!»

4. Задача поиска

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

[Д.Кнут Искусство программирования для ЭВМ, Сортировка и поиск]

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

Задачу поиска можно сформулировать следующим образом:

Заданы два конечных множества и. Для каждогонеобходимо определить?называется исходным множеством,называется множеством запросов, а каждый элемент этого множества - запросом. Черезобозначим множество непустых слов в алфавите. Любое словоиззадает определенную последовательность запросов, каждый из которых применяется к элементам множества. Данная задача представляет собой пример массовой задачи, в которой многократно повторяются однотипные действия. В таком виде постановка задачи выглядит достаточно общей и нуждается в уточнении.

Поскольку единичный запрос связан с отдельным элементом , то можно абстрагироваться от структуры связей элементов(если таковая имеется)1. С другой стороны при построении эффективных алгоритмов важной информацией при выполнении последовательности запросов может являться распределение частот появления элементов множествав последовательности. Что же касается множества, то учет структуры информационных связей между элементами множества, как мы увидим далее, позволяет строить различные по эффективности алгоритмы поиска.

  1. Поиск информации очень часто сочетается с другими операциями на множестве. В зависимости от набора операций рассматривают различные АТД:

а) статический поиск: множествофиксировано и не изменяется в течение выполнения серии запросов. Этой задаче отвечает АТД (,НАЙТИ)

б) динамический поиск:множествоможет обновляться между двумя соседними запросами (разрешены операции, изменяющие множество). Как упоминалось ранее, множество с операциями НАЙТИ, ВСТАВИТЬ, УДАЛИТЬ образует АТД «Словарь». Другими вариантами АТД являются «Непересекающиеся множества» - (, ОБЪЕДИНИТЬ, НАЙТИ) или «Очередь с приоритетами» - (, НАЙТИ, ВСТАВИТЬ, МИН, УДАЛИТЬ, СЦЕПИТЬ, РАСЦЕПИТЬ) и т.д.

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

  1. Очевидно, сопоставление элемента с элементомиз множестваподразумевает существование некоторого предиката, позволяющего отождествлять (различать, сравнивать по величине) эти элементы. Предикатпредполагает, что имеется определенная логическая связь между элементамии, причем при вычислении значения предиката может быть использована только определенная часть информации, которая хранится в элементах множестви. Совокупность параметров элементов множества, которые непосредственно участвуют в вычислении предиката, называется ключом. Ключ представляет совокупность полей элементов множества, позволяющих идентифицировать каждый элемент множества. Без ограничения общности, в дальнейшем, предполагается уникальность ключа2. Поскольку в решении задачи поиска важны именно ключевые параметры, можно абстрагироваться от остальных параметров3и без ограничения общности считать все параметры, описывающие элементы множестваключевыми. Значение предикатадолжно информировать об успешности поиска. Формула, описывающий предикат, может иметь достаточно сложную структуру. Поскольку сложность вычисления предиката мало зависит от структуры множествамы ограничимся, в дальнейшем, предикатами, которые характеризуют совпадение/несовпадение () ключей или предикатами, которые дают сравнительную информацию о величине ключа (< ,= , >)

  2. Ввиду того, что последовательность запросов предполагает многократное обращение к одним и тем же данным, то возникает проблема организации данных для ускорения процедуры поиска. Процесс создания таких структур носит название предобработки данных. И хотя предобработка может занимать определенное количество времени, время, затраченное на создание структуры, с лихвой окупается при многократном повторении запросов. Типичным примером предобработки данных может служить сортировка. Построение эффективного алгоритма сводится к нахождению «хороших» структур данных, которые бы обеспечили хорошую скорость поиска. Безусловно, созданные структуры должны поддерживаться при изменении состава данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]