Да, бинарный поиск оптимален.
Это легко увидеть, обратившись к теории информации.Требуется log N
бит только для идентификации уникального элемента из N
элементов.Но каждое сравнение дает только один бит информации.Следовательно, вы должны выполнить log N
сравнений, чтобы идентифицировать уникальный элемент.
Более подробно ... Рассмотрим гипотетический алгоритм X, который превосходит бинарный поиск в худшем случае.Для конкретного элемента массива запустите алгоритм и record задаваемые вопросы;последовательность сравнений, которую он выполняет.Или, скорее, запишите ответы на эти вопросы (например, «true, false, false, true»).
Преобразуйте эту последовательность в двоичную строку (1,0,0,1),Назовите эту двоичную строку «сигнатурой элемента относительно алгоритма X».Сделайте это для каждого элемента массива, назначив «подпись» каждому элементу.
Теперь вот ключ.Если два элемента имеют одинаковую сигнатуру, то алгоритм X не может отличить их друг от друга!Все, что алгоритм знает о массиве, - это ответы, которые он получает от вопросов, которые он задает;то есть сравнения, которые он выполняет.И если алгоритм не может различить два элемента, то он не может быть правильным.(Другими словами, если два элемента имеют одинаковую сигнатуру, то есть они приводят к одной и той же последовательности сравнений алгоритмом, какой из них возвращает алгоритм? Противоречие.)
Наконец, докажите, что если каждая сигнатура имеетменьше чем log N
битов, то должно существовать два элемента с одинаковой сигнатурой (принцип голубиных отверстий).Готово.
[обновление]
Один быстрый дополнительный комментарий.Выше предполагается, что алгоритм ничего не знает о массиве, кроме того, что он узнает из сравнения.Конечно, в реальной жизни иногда вы что-то знаете о массиве a priori .Например, если я знаю, что массив содержит (скажем) 10 элементов от 1 до 100, и что они различны, а числа от 92 до 100 присутствуют в массиве ...нужно выполнить четыре сравнения даже в худшем случае.
Более реалистично, если я знаю, что элементы равномерно распределены (или примерно равномерно распределены) между их минимальным и максимальным значениями, опять же, я могу сделать лучше, чем бинарный поиск.
Но в общем случае бинарный поиск все еще оптимален.