Zawsze słyszałem, że wyszukiwanie liniowe jest naiwnym podejściem, a wyszukiwanie binarne jest lepsze niż pod względem wydajności ze względu na lepszą asymptotyczną złożoność. Ale nigdy nie zrozumiałem, dlaczego jest lepsze niż wyszukiwanie liniowe, gdy przed wyszukiwaniem binarnym wymagane jest sortowanie?
Wyszukiwanie liniowe jest, O(n)
a wyszukiwanie binarne O(log n)
. To wydaje się być podstawą do stwierdzenia, że wyszukiwanie binarne jest lepsze. Ale wyszukiwanie binarne wymaga sortowania, które jest O(n log n)
najlepsze algorytmy. Wyszukiwanie binarne nie powinno być w rzeczywistości szybsze, ponieważ wymaga sortowania.
Czytam CLRS, w którym autor sugeruje, że w sortowaniu wstawiania zamiast naiwnego wyszukiwania liniowego lepiej jest użyć wyszukiwania binarnego w celu znalezienia miejsca, w którym element musi zostać wstawiony. W tym przypadku wydaje się to uzasadnione, ponieważ przy każdej iteracji pętli istnieje posortowana lista, na której można zastosować wyszukiwanie binarne. Ale w ogólnym przypadku, gdy nie ma gwarancji, że zestaw danych, w którym musimy szukać, nie używa wyszukiwania binarnego w rzeczywistości gorszego niż wyszukiwanie liniowe ze względu na wymagania dotyczące sortowania?
Czy pomijam jakieś względy praktyczne, które sprawiają, że wyszukiwanie binarne jest lepsze niż wyszukiwanie liniowe? Czy wyszukiwanie binarne jest uważane za lepsze niż wyszukiwanie liniowe bez uwzględnienia czasu obliczeń wymaganego do sortowania?