Podczas wykonywania drugiego kata kodu (który prosi pięć razy o zaimplementowanie algorytmu wyszukiwania binarnego, za każdym razem inną metodą), wpadłem na nieco inne rozwiązanie, które działa w następujący sposób:
Jeśli mam posortowaną tablicę o długości 100 i widzę, że jej pole początkowe zawiera liczbę 200, a pole końcowe zawiera liczbę 400, ja, jako matematyka studiująca człowieka, prawdopodobnie zacznę przeszukiwać pole 35, gdybym szukał liczba 270, a nie pole 50 jak w normalnym algorytmie wyszukiwania binarnego.
Następnie, jeśli liczba w polu 35 tablicy wynosi 270, 35 jest indeksem, którego szukałem.
Jeśli tak nie jest, mogę porównać otrzymaną liczbę (powiedzmy 280) i powtórzyć operację biorąc dolną część tablicy (więc mam 35 pól z polem początkowym zawierającym 200 i polem końcowym zawierającym 280), jeśli liczba, którą znalazłem, jest większa niż to, czego szukam, lub górna część tablicy (powiedzmy, że mam 260: teraz mam 65 indeksów, pierwszy zawiera 260, a ostatni zawiera 400. Orientacyjnie skierowałbym się na torward indeks 4 tej podtablicy, który jest indeksem 39 całej tablicy), jeśli otrzymana liczba jest mniejsza niż liczba, której szukam.
Pytanie brzmi: czy ten algorytm można uznać za algorytm wyszukiwania binarnego? Jeśli nie, to czy ma swoją nazwę?
źródło
Odpowiedzi:
Nie nazwałbym tego wyszukiwaniem binarnym.
Jest wyraźnie podobny do wyszukiwania binarnego i naturalne jest postrzeganie go jako udoskonalenia wyszukiwania binarnego. Jednak ma on znacznie różne cechy złożoności algorytmu. Wyszukiwanie interpolacyjne spodziewało się czasu działania O (log (log (n)) przy założeniu, że dane są równomiernie rozmieszczone, jednak płaci za to, mając czas działania O (n) w najgorszym przypadku.
Wolę powiedzieć „Najgorszy czas działania wyszukiwania binarnego to O (log (n))” niż „W zależności od wyboru elementów ograniczających najgorszy czas działania wyszukiwania binarnego to O (log (n))”. Oznacza to, że nie mogę klasyfikować wyszukiwania interpolacyjnego jako algorytmu wyszukiwania binarnego.
źródło
źródło
Myślę, że poprawną terminologią byłoby rozważenie dychotomialne.
Szukasz w płaskiej tablicy, a następnie rozważasz wyszukiwanie na podstawie przypuszczalnego płaskiego rozkładu liczb.
Odpowiada to temu, jak dana osoba szuka słowa w słowniku. Ale może być bardzo nieefektywne, jeśli rozkład danych jest nieregularny.
źródło