Я завжди чув, що лінійний пошук - це наївний підхід, а двійковий пошук кращий за його ефективність через кращу асимптотичну складність. Але я ніколи не розумів, чому це краще, ніж лінійний пошук, коли потрібне сортування перед двійковим пошуком?
Лінійний пошук є, O(n)
а двійковий пошук є O(log n)
. Це, мабуть, є основою того, що бінарний пошук є кращим. Але двійковий пошук вимагає сортування, яке O(n log n)
відповідає найкращим алгоритмам. Тому двійковий пошук насправді не повинен бути швидшим, оскільки він потребує сортування.
Я читаю CLRS, в якому автор має на увазі, що у сортуванні вставки замість використання наївного лінійного підходу пошуку краще використовувати двійковий пошук для пошуку місця, куди потрібно вставити елемент. У цьому випадку це здається виправданим, оскільки при кожній ітерації циклу існує відсортований список, над яким можна застосувати двійковий пошук. Але в загальному випадку, коли немає гарантії щодо набору даних, в якому нам потрібно здійснювати пошук, не використовується двійковий пошук насправді гірше, ніж лінійний пошук через вимоги до сортування?
Чи є якісь практичні міркування, які я оглядаю, які роблять бінарний пошук кращим, ніж лінійний пошук? Або двійковий пошук вважається кращим, ніж лінійний пошук, не враховуючи час обчислення, необхідний для сортування?