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