Для оценки количества сравнений в линейном и двоичном поисках, давайте сначала рассмотрим, как каждый из этих алгоритмов работает.
Линейный поиск
Линейный поиск — это простейший алгоритм поиска, который последовательно проверяет каждый элемент в базе данных до тех пор, пока не найдёт нужную запись или не переберёт все элементы. В худшем случае линейный поиск требует проверки всех записей.
Для базы данных, содержащей (2^{20} = 1,048,576) записей, в худшем случае потребуется сделать 1,048,576 сравнений. В среднем случае, если искомый элемент равновероятно может находиться в любом месте, потребуется примерно половина этого количества сравнений, то есть около 524,288 сравнений.
Двоичный поиск
Двоичный поиск требует, чтобы данные были отсортированы. Алгоритм работает по принципу деления массива на две части: сравнивает искомое значение со средним элементом, и если значение меньше, продолжает поиск в левой половине, а если больше — в правой. Таким образом, с каждым шагом число элементов, среди которых ведётся поиск, уменьшается вдвое.
Количество сравнений, которое потребуется для двоичного поиска, в худшем случае равно логарифму по основанию 2 от числа записей, то есть:
[
\log_2(1,048,576) = 20
]
В среднем случае двоичный поиск тоже требует порядка ( \log_2(n) ) сравнений.
Сравнение
Теперь сравним количество сравнений для обоих алгоритмов в худшем случае:
- Линейный поиск: 1,048,576 сравнений.
- Двоичный поиск: 20 сравнений.
Чтобы определить, во сколько раз двоичный поиск быстрее линейного, разделим количество сравнений, необходимых для линейного поиска, на количество сравнений, необходимых для двоичного поиска:
[
\frac{1,048,576}{20} = 52,428.8
]
Таким образом, двоичный поиск работает примерно в 52,429 раз быстрее, чем линейный поиск, в худшем случае на базе данных из 1,048,576 записей.