Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структуры данных.doc
Скачиваний:
172
Добавлен:
11.03.2015
Размер:
2.05 Mб
Скачать

Алгоритмы поиска в неупорядоченных массивах Алгоритм линейного поиска

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

Алгоритм быстрого линейного поиска

Любой алгоритм поиска содержит блок проверки на окончание массива. В алгоритме линейного поиска эта проверка осуществляется каждый раз перед обращением к очередному элементу. Однако проверка на окончание массива может осуществляться не при каждом сравнении. Для этого в конец массива включается (N + 1)-й элемент (N — количество элементов в массиве), равный искомому. Тогда проверка на окончание массива осуществляется лишь при совпадении очередного элемента с искомым. Если этот элемент находится внутри массива, то поиск заканчивается удачно и элемент считается найденным. Если же этот элемент оказался (N + 1)-ым, то искомого элемента в массиве нет.

Анализ алгоритмов линейного поиска

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

Оценим среднее время алгоритма, при этом будем исходить из следующего: пусть Pi — вероятность того, что будет осуществляться поиск элемента со значением ki; предположим, что , т.е. элемент со значениемki не будет отсутствовать (в массиве обязательно есть элемент,

поиск которого осуществляется).

Среднее время (), как следует из алгоритма, пропорционально среднему числу операций сравнения () и равно

~=.

Если ключи имеют одинаковую вероятность P1=P2=...PN=P, а также учитывая, что,,, тогда

,

т.е. при линейном поиске в среднем необходимо просмотреть половину массива.

Для экспериментального определения среднего числа сравнений необходимо найти суммарное число сравнений при поиске всех элементов массива и разделить на количество элементов.

Алгоритмы поиска в упорядоченных массивах Алгоритм быстрого линейного поиска

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

Алгоритм бинарного поиска

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

Алгоритм бинарного поиска

1. Определить середину массива.

2. Если элемент, находящийся в середине массива, совпадает с искомым, поиск завершен.

3. Если элемент из середины массива больше искомого, применить бинарный поиск к первой половине массива.

4. Если элемент из середины массива меньше искомого, бинарный поиск необходимо применить ко второй половине массива.

5. Пункт 1-4 повторять, пока размер области поиска не уменьшается до нуля. Если это произойдет — ключа в массиве нет.