Я всегда слышал, что линейный поиск - это наивный подход, и бинарный поиск лучше, чем он, по производительности из-за лучшей асимптотической сложности. Но я никогда не понимал, почему это лучше, чем линейный поиск, когда перед двоичным поиском требуется сортировка?
Линейный поиск есть O(n)
и бинарный поиск есть O(log n)
. Кажется, это основание говорить, что бинарный поиск лучше. Но бинарный поиск требует сортировки O(n log n)
для лучших алгоритмов. Таким образом, бинарный поиск не должен быть на самом деле быстрее, поскольку он требует сортировки.
Я читаю CLRS, в которой автор подразумевает, что в сортировке вставки вместо использования наивного подхода линейного поиска лучше использовать двоичный поиск, чтобы найти место, где должен быть вставлен элемент. В этом случае это кажется оправданным, поскольку на каждой итерации цикла имеется отсортированный список, к которому можно применить бинарный поиск. Но в общем случае, когда нет никакой гарантии относительно набора данных, в котором нам нужно искать, разве бинарный поиск на самом деле не хуже линейного поиска из-за требований сортировки?
Есть ли какие-то практические соображения, которые я пропускаю, которые делают бинарный поиск лучше, чем линейный поиск? Или двоичный поиск считается лучше, чем линейный поиск без учета времени вычислений, необходимого для сортировки?