Algorytm wyszukiwania binarnego(Binary Search) służy do szybkiego wyszukiwania w danym POSORTOWANYM ciągu liczb jakiejś liczby. Możemy szukać pierwszego wystąpienia, drugiego wystąpienia, pierwszej większej lub pierwszej niemniejszej liczby.
Zamiast przeszukiwać cały ciąg, skorzystajmy z tego, że jest posortowany. Będziemy sprawdzać środkowy element w ciągu. (Tutaj omówię przypadek jeśli znajdujemy pierwsze wystąpienie w ciągu posortowanym niemalejąco) Jeśli element jest większy lub równy od szukanego odrzucamy wszystkie liczby po prawej. W przeciwnym wypadku wszystkie liczby po lewej. Jak już zostanie nam tylko jedna liczba, to jest ta liczba, którą szukamy.
Dla przykładowego ciągu: 1 2 2 2 3 4 4 znajdźmy pierwsze wystąpienie 2.
1 2 3 4 5 6 7 (indeksy)
1 2 2 2 3 4 4 (wartości)
1. Bierzemy indeks 4. Jest tam wartość 2, więc odrzucamy wszystko od indeksu 5.
2. Bierzemy indeks 2, gdzie też mamy dwójkę, więc odrzucamy wszystko od indeksu 3.
3. Bierzemy indeks 1. Tam mamy 1, czyli to nie jest nasza szukana wartość. Odrzucamy więc wszystko do indeksu 1 (włącznie).
4. Zauważmy, że teraz został nam jeden element do rozpatrzenia, na indeksie 2. Jest to więc nasz szukany element!
Algorytm Binary Search po wyniku służy to wyszukiwania po wartościach funkcji result, która daje nam wyniki dla danej wartości. Te wyniki muszą być niemalejące/nierosnące. Chcemy wyszukać daną wartość wyniku, a zwrócić wartość, która daje ten wynik.
Binary Search po wyniku polega na prawie tym samym co zwykły Binary Search, tylko wyszukujemy po wartości, od której
zależy wynik. Wynik musi spełniać warunki, że:
do pewnego momentu wynik spełnia jakąś własność a potem nie spełnia lub na odwrót
wyniki są niemalejące lub nierosnące
Gdzie jako wynik mamy funkcję result, w której na podstawie treści zadania wykonujemy operacje dające nam wynik
(dla danej wartości).
Przykładu nie ma, ponieważ omawiałam ogólnie ten algorytm, bez uściślenia funkcji result. W takim wypadku nie da się zasymulować przykładu.