Wyszukiwanie Wykładnicze pozwala na bardzo szybkie wyszukiwanie poprzez wybranie elementów pomiędzy którymi możliwe jest znalezienie szukanego elementu. Do znalezienia indeksu wykorzystywany jest algorytm wyszukiwania binarnego. Algorytm wymaga, aby przeszukiwana lista była posortowana.
Na początek sprawdź czy pierwszy element nie jest element poszukiwanym. Jeśli jest to zwróć indeks 0, a jeśli nie to rozpocznij zawężanie przedziału. Na początku ustal i = 1. Dopóki element na pozycji 2i nie jest większy od szukanego elementu oraz licznik i jest mniejszy od długości listy n to podwajaj wartość i. Po ustaleniu zmiennej i wykonaj wyszukiwanie binarne na przedziale (i/2, i].
Dana jest następująca tablica:
A | B | C | D | E | F | G | H | I | J | K | L | M |
Poszukiwany jest element H. Początkowo należy sprawdzić pierwszy element listy (A). Jest on różny od H, więc rozpoczynamy poszukiwania od i = 1:
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|
Element B występuje przed elementem H, więc podwajamy indeks tj. i = 2. Sprawdzamy element na wskazanym indeksie.
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|
Element C ponownie występuje przed elementem H, więc podwajamy indeks. Teraz i = 4.
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|
Element E ponownie występuje przed elementem H. Podwajamy indeks, więc i = 8.
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|
Element I występuje po elemencie H. W tym momencie wiadomo, że element znajduje się na indeksie pomiędzy (i/2, i] czyli w tym przypadku (4, 8]. Oznacza to następujący obszar poszukiwań:
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|
W tak ograniczonym obszarze należy wywołać wyszukiwanie binarne, które poda indeks szukanego elementu.
Po wstępnym przeszukiwaniu tablicy zagwarantowane jest to, że przeszukiwany obszar ma nie więcej jak n/2 elementów. Wynika to z faktu, że najgorszy możliwy przypadek jest wtedy, gdy szukany element znajduje się w ostatnim możliwym przedziale (n/2, n], więc ma on ma długość maksymalnie n/2. To poprawia wydajność wyszukiwania binarnego.
Algorytm wyszukiwania wykładniczego będzie korzystał z funkcji do wyszukiwania binarnego. Więcej informacji na jej temat oraz jej złożoność można znaleźć w artykule poświęconym wyszukiwaniu binarnemu.
Poniżej została przedstawiona przykładowa implementacja funkcji wyszukiwanieWykladnicze(), która dla podanej tablicy lista znajdzie element szukana.
(2.) Sprawdź pierwszy element i jeśli jest on poszukiwany to (3.) zwróć indeks 0. W przeciwnym razie (4. - 6.) rozpocznij poszukiwanie przedziału możliwych indeksów. Po znalezieniu przedziału (7.) wywołaj wyszukiwanie binarne.
W celu przetestowania napisanej funkcji można skorzystać z poniższego fragmentu kodu, który wczyta od użytkownika listę, a wypisze na ekran indeks szukanego elementu. Należy pamiętać, że program nie sprawdza poprawności danych wejściowych.