Практическое задание. Практическая работа. Российский государственный социальный университет практическое задание 4 по дисциплине Алгоритмы и структуры данных
Скачать 318.3 Kb.
|
ПРАКТИЧЕСКОЕ ЗАДАНИЕ №4 по дисциплине «Алгоритмы и структуры данных» Алгоритмы поиска в массивах (тема практического задания)
Москва Вариант 5 Фибоначчиев поиск. Принцип работы алгоритма: 1) Последовательность сортируется в возрастающем порядке. Если последовательность уже отсортирована, то этот пункт можно пропустить. 2) Производится начальная инициализация. Нужно найти такое число k, что F(k+1) >= N+1. После чего нужно ввести следующие значения. M = F(k+1)-(N+1), i = F(k)-M, p = F(k-1), q = F(k-2). 3) проверить корректность индекса. Если индекс меньше нуля, перейти к пункту 5. Если индекс больше или равен N, то перейти к пункту 4. Выполнить сравнение K < Ki, если да, то перейти к пункту 4. Если K > Ki, перейти к пункту 5. K = Ki вернуть i, поиск успешен. 4) Выполнить проверку q = 0. Если да, поиск неудачен, закончить выполнение. В противном случае, установить: i = i – q выполнить обмен (p, q) = (q, p – q) Перейти к пункту 3. 5) Выполнить проверку p = 1. Если да, поиск неудачен, закончить выполнение. В противном случае, установить: i = i + q p = p – q q = q – p Перейти к пункту 3. Тут N – число элементов в последовательности. К – искомый элемент. Ki – элемент последовательности, расположенный на i – индексе. F(k) – k – й элемент последовательности Фибоначчи. Когда мы ищем элемент, который существует в массиве, то в ответ нам возвращается значение его индекса. (под которым он находится в массиве) Иначе (‘element not found'). Был проведен эксперимент, чтобы выяснить какой алгоритм быстрее. Бинарный поиск оказался самым быстрым. Именно по этой причине, он чаще всего и используется. Хотя, как можно заметить, что Фибоначчиев поиск не так уж и медленный, по сравнению с бинарным поиском. Но все же медленнее. Тогда возникает вопрос. А для чего вообще нужен Фибоначчиев поиск? В отличии от бинарного поиска, этот алгоритм не имеет операций делений в своем коде. А как мы знаем, не все базовые вычислительные архитектуры поддерживают операцию деления. Так что с этим алгоритмом вы можете обойтись только одной операцией, операцией сложения. |