- •А. И. Симкин
- •Методы в программировании
- •Справочник
- •Для студентов специальности 6.0925 «Автоматизация и компьютерно-интегрированные технологии», а также студентов – дипломников и магистров специальностей 7.092501, 7.092502, 8.092501
- •Внимание: перед печатью заново отформатируйте текст и проставьте страницы в оглавлении в соответствии с новыми полями на странице!!!
- •Вместо введения
- •1 Общие правила вычислений на эвм
- •2 Вычисление суммы функционального ряда
- •3 Точные и приближенные методы решения линейных уравнений
- •3.2 Алгоритм отделения корней методом последовательного перебора
- •Алгоритмы уточнения корня
- •О точности полученных приближений (x2, , xcp) можно судить по невязке:
- •4 Точные и приближенные методы решения систем линейных уравнений
- •5 Численное интегрирование
- •6 Численное дифференцирование
- •6.2. Метод Рунге-Кутта
- •7 Решение задач интерполяции и экстраполяции
- •8 Статистическая обработка результатов эксперимента
- •9 Работа с данными динамической структуры.
- •10 Сортировка
- •11 Поиск
- •Алгоритмы последовательного поиска
- •Поиск в упорядоченной таблице
- •10.3 Бинарный поиск
- •Фибоначчиев поиск
- •12 Задача выбора
- •Заключение
- •Перечень ссылок
11 Поиск
Эта глава посвящена в основном изучению очень простой поисковой задачи: как находить данные, хранящиеся с определенной идентификацией. Например, в вычислительной задаче нам может понадобится найти f(x), имея x и таблицу значений функции f; в лингвистической может интересовать английский эквивалент данного русского слова.
Вообще будем предполагать, что хранится множество из N записей и необходимо определить положение соответствующей записи. Как и в случае сортировки, предположим, что каждая запись содержит специальное поле, которое называется ключом, возможно, потому, что многие люди ежедневно тратят массу времени на поиск своих ключей. Мы обычно требуем, чтобы N ключей били различными, так что каждый ключ однозначно определяет свою запись. Совокупность всех записей называется таблицей или файлом, причём под таблицей, как правило, подразумевается небольшой файл, а файлом обычно называют большую таблицу. Большой файл, или группа файлов, часто называется базой данных.
В алгоритмах поиска присутствует так называемый аргумента поиска K, и задача состоит в отыскании записи, имеющей K своим ключом. Существуют две возможности окончания поиска: либо поиск оказался удачным, т.е. позволит определить положение соответствующей записи, содержащей K, либо он оказался неудачным, т.е. показал, что аргумент K не может быть найден ни в одной из записей. После неудачного поиска иногда желательно вставить в таблицу новую запись, содержащую K; алгоритм который делает это, называется алгоритмом «поиска с вставкой». Некоторые технические устройства, известные как «ассоциативная память», решают проблему поиска автоматически аналогично тому, как это делает человеческий мозг; мы же будем изучать методы поиска на обычной универсальной вычислительной машине.
Алгоритмы последовательного поиска
«Начни с начала и продвигайся, пока не найдёшь нужный ключ; тогда остановись». Такая последовательная процедура является очевидным способом поиска; удобно начать наши рассмотрения с неё, так как на ней основаны многие более сложные алгоритмы. Несмотря на свою простоту, последовательный поиск содержит ряд очень интересных идей.
Все элементы списка пересматриваются последовательно в порядке их размещения, пока не найдётся элемент, равный ключу поиска. Если не известно, есть ли искомый элемент, то необходимо следить, чтобы поиск не вышел за границы списка. В таком случае техничным способом повышения эффективности программирования является введение стопера.
Алгоритм S. (Последовательный поиск.) Имеется таблица записей R1,R2,...,Rn, снабженных соответственно ключами K1,K2,...,Kn. Алгоритм предназначен для поиска записи с данным ключом K. Предполагается, что N≥ 1.
S1. Установить i ≤1.
S2. Если K=Ki, алгоритм оканчивается удачно.
S3. Если K<>Ki, увеличить i на 1.
S4. Если i<=N, то вернутся к шагу S2. В противном случае алгоритм оканчивается неудачно.
Алгоритм Q. (Быстрый последовательный поиск.) В отличие от алгоритма здесь ещё предполагается, что в конце файла стоит фиктивная Rn+1 запись.
Q1. Установить i <=1, Kn+1<=K.
Q2. Если K=Ki, то перейти на Q4.
Q3. Увеличить i на 1 и вернутся к шагу Q2.
Q4. Если i<=N, алгоритм оканчивается удачно; в противном случае - неудачно(i=N+1).
Алгоритм T. (Последовательный поиск в упорядоченной таблице.)
Имеется таблица записей R1,R2,...,Rn, причём ключи удовлетворяют неравенствам K1<K2<...<Kn. Алгоритм предназначен для поиска записи с данным ключом K. В целях удобства и увеличения скорости работы предполагается, что в конце таблицы расположена фиктивная запись Rn+1, ключ которой Kn+1= >K.
T1. Установить i <=1.
T2. Если K<=Ki, то перейти на T4.
T3. Увеличить i на 1 и вернутся к шагу T2.
T4. Если K=Ki, то алгоритм оканчивается удачно, в противном случае - неудачно, нужной записи в таблице нет.
