Jump to content

Техника поиска Фибоначчи

(Перенаправлено из поиска Фибоначчи )

В информатике метод поиска Фибоначчи представляет собой метод поиска в отсортированном массиве с использованием алгоритма «разделяй и властвуй» , который сужает возможные местоположения с помощью чисел Фибоначчи . [1] По сравнению с бинарным поиском, где отсортированный массив делится на две части одинакового размера, одна из которых исследуется далее, поиск Фибоначчи делит массив на две части, размеры которых являются последовательными числами Фибоначчи. В среднем это приводит к увеличению количества сравнений примерно на 4%, [2] но у него есть то преимущество, что для вычисления индексов элементов массива, к которым осуществляется доступ, нужно только сложение и вычитание, тогда как для классического двоичного поиска требуется побитовый сдвиг (см. Побитовая операция ), деление или умножение, [1] операции, которые были менее распространены на момент первой публикации поиска Фибоначчи. Поиск Фибоначчи имеет среднюю и наихудшую сложность O (log n ) (см. обозначение Big O ).

Последовательность Фибоначчи обладает тем свойством, что число представляет собой сумму двух своих предшественников. Следовательно, последовательность можно вычислить путем многократного сложения. Отношение двух последовательных чисел приближается к золотому сечению , 1,618. Бинарный поиск работает путем деления области поиска на равные части (1:1). Поиск Фибоначчи может разделить его на части, приближающиеся к 1:1,618, используя более простые операции.

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

Поиск Фибоначчи основан на поиске золотого сечения , алгоритме Джека Кифера (1953), предназначенном для поиска максимума или минимума унимодальной функции в интервале. [3]

Алгоритм

[ редактировать ]

Пусть k определяется как элемент в F , массиве чисел Фибоначчи. n = F m — размер массива. Если n не является числом Фибоначчи, пусть F m будет наименьшим числом из F, которое больше n .

Массив чисел Фибоначчи определяется где F k +2 = F k +1 + F k , когда k ≥ 0 , F 1 = 1 и F 0 = 1 .

Чтобы проверить, находится ли элемент в списке заказанных номеров, выполните следующие действия:

  1. Установите k = м .
  2. Если k = 0, остановитесь. Нет совпадения; элемента нет в массиве.
  3. Сравните элемент с элементом в F k −1 .
  4. Если предмет совпадает, остановитесь.
  5. Если элемент меньше записи F k −1 , отбросьте элементы из позиций F k −1 + 1 до n . Установите k = k − 1 и вернитесь к шагу 2.
  6. Если элемент больше записи F k −1 , отбросьте элементы с позиций от 1 до F k −1 . Перенумеруйте оставшиеся элементы с 1 на F k −2 , установите k = k − 2 и вернитесь к шагу 2.

Альтернативная реализация (из «Сортировки и поиска» Кнута [4] ):

Учитывая таблицу записей R 1 , R 2 , ..., RN , ключи которой расположены в порядке возрастания K 1 < K 2 < ... < K N , алгоритм ищет заданный аргумент K . Предположим, N +1= F k +1

Шаг 1. [Инициализация] i F k , p F k −1 , q F k −2 (на протяжении всего алгоритма p и q будут последовательными числами Фибоначчи)

Шаг 2. [Сравнить] Если < Ki , K перейти к шагу 3 ; если K > K, я перехожу к шагу 4 ; и если K = K i , алгоритм завершается успешно.

Шаг 3. [Уменьшить i ] Если q =0, алгоритм завершается неудачно. В противном случае установите ( i , p , q ) ← ( i q , q , p q ) (что перемещает p и q на одну позицию назад в последовательности Фибоначчи); затем вернитесь к шагу 2

Шаг 4. [Увеличить i ] Если p =1, алгоритм завершается неудачно. В противном случае установите ( i , p , q ) ← ( i + q , p q , 2 q p ) (что перемещает p и q на две позиции назад в последовательности Фибоначчи); и вернитесь к шагу 2

Два варианта представленного выше алгоритма всегда делят текущий интервал на больший и меньший подинтервал. Оригинальный алгоритм, [1] однако на шаге 4 новый интервал будет разделен на меньший и больший подинтервал. Это имеет то преимущество, что новый i ближе к старому i и больше подходит для ускорения поиска на магнитной ленте.

См. также

[ редактировать ]
  1. ^ Jump up to: а б с Фергюсон, Дэвид Э. (1960). «Поиск Фибоначчиана» . Коммуникации АКМ . 3 (12): 648. дои : 10.1145/367487.367496 . S2CID   7982182 . Обратите внимание, что анализ времени выполнения в этой статье ошибочен, как указал Оверхолт в 1972 году (опубликовано в 1973 году).
  2. ^ Оверхолт, К.Дж. (1973). «Эффективность метода поиска Фибоначчи». БИТ Численная математика . 13 (1): 92–96. дои : 10.1007/BF01933527 . S2CID   120681132 .
  3. ^ Кифер, Дж. (1953). «Последовательный минимаксный поиск максимума» . Труды Американского математического общества . 4 (3): 502–506. дои : 10.1090/S0002-9939-1953-0055639-3 .
  4. ^ Кнут, Дональд Э. (2003). Искусство компьютерного программирования . Том. 3 (Второе изд.). п. 418.
  • Луракис, Манолис. «Поиск Фибоначчи в C» . Проверено 18 января 2007 г. Реализует описанный выше алгоритм (не оригинальный алгоритм Фергюсона).
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4b9347672b676a9a525fe521c3b7c0b0__1718763480
URL1:https://arc.ask3.ru/arc/aa/4b/b0/4b9347672b676a9a525fe521c3b7c0b0.html
Заголовок, (Title) документа по адресу, URL1:
Fibonacci search technique - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)