Поиск по золотому сечению лучше бинарного? - PullRequest
9 голосов
/ 22 ноября 2010

Недавно я услышал мнение, что бинарный поиск можно улучшить, взяв деление диапазона на фи (золотой рацион) вместо 2. Это было для меня большим сюрпризом, потому что я никогда не слышал о такой оптимизации , Это правда? Было бы это так, если бы деление на 2 и phi было одинаково производительным?

Если нет, существуют ли какие-либо общие условия, при которых поиск по золотому сечению будет выполняться быстрее, чем двоичный поиск?

UPD: отредактировано для удаления ссылки на не относящуюся к статье в Википедии. Извините за заблуждение.

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010

Существует два алгоритма, называемых «поиск Фибоначчи».

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

Другой вид поиска Фибоначчи действительно атакует ту же проблему, что и бинарный поиск. Бинарный поиск по сути всегда лучше. Кнут пишет, что поиск по Фибоначчи «предпочтителен на некоторых компьютерах, поскольку он включает только сложение и вычитание, а не деление на 2». Но почти все компьютеры используют двоичную арифметику, в которой деление на 2 проще , чем сложение и вычитание.

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

4 голосов
/ 22 ноября 2010

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

0 голосов
/ 22 ноября 2010

«работает быстрее» расплывчато;но бинарный поиск должен иметь наименьшую наименьшую оценку для количества обращений.

...