Wyszukiwanie binarne

Specyfikacja problemu:

Dane:

  • n – liczba naturalna; liczba elementów tablicy tablica

  • tablican-elementowa, uporządkowana rosnąco tablica liczb naturalnych

  • szukana – liczba naturalna

Wynik:

  • komunikat wskazujący indeks, pod którym znajduje się szukana liczba, lub informujący, że w tablicy nie ma szukanej liczby

Algorytm wyszukiwania binarnego wyszukuje wybrany element w posortowanym w zbiorze. 

Zasada działania algorytmu nie zmienia się. Algorytm nie wywołuje się rekurencyjnie, wykorzystujemy natomiast pętlę dopóki.

Zapisujemy nagłówek funkcji wyszukiwanie_binarne_iter. Przyjmie ona cztery argumenty – tablicę liczb, szukaną wartość, indeks początku oraz indeks końca.

W kolejnym kroku określimy środek analizowanego przedziału, przypisując zmiennej środek wartość dzielenia całkowitego sumy wartości zmiennych pocz oraz kon przez liczbę 2.

Następnie zapiszemy instrukcję warunkową jeżeli. Sprawdzamy, czy szukana liczba jest równa wartości elementu tablicy o indeksie równym wartości zmiennej środek. Jeśli tak, wypisujemy odpowiedni komunikat.

Jeśli element nie jest równy elementowi przechowywanemu pod indeksem środek, sprawdzamy, czy jest on od niego mniejszy. Jeśli tak, zmieniamy wartość zmiennej pocz, przypisując jej wartość sumy zmiennej środek oraz liczby 1.

Jeżeli element jest mniejszy, przypisujemy zmiennej kon wartość różnicy zmiennej środek oraz liczby 1.

Jeśli po wyjściu z pętli dopóki element nie został znaleziony, wypisujemy odpowiedni komunikat.

Linia 1. funkcja wyszukiwanie podkreślnik binarne podkreślnik iter otwórz nawias okrągły tablica przecinek szukana przecinek pocz przecinek kon zamknij nawias okrągły dwukropek. Linia 2. dopóki pocz otwórz nawias ostrokątny znak równości kon dwukropek. Linia 3. środek ← otwórz nawias okrągły pocz plus kon zamknij nawias okrągły div 2. Linia 4. jeżeli tablica otwórz nawias kwadratowy środek zamknij nawias kwadratowy znak równości szukana dwukropek. Linia 5. wypisz cudzysłów Znaleziono liczbę na pozycji cudzysłów plus środek. Linia 6. zwróć środek. Linia 7. w przeciwnym wypadku jeżeli tablica otwórz nawias kwadratowy środek zamknij nawias kwadratowy otwórz nawias ostrokątny szukana dwukropek. Linia 8. pocz znak równości środek plus 1. Linia 9. w przeciwnym wypadku dwukropek. Linia 10. kon znak równości środek minus 1. Linia 12. wypisz cudzysłów Nie znaleziono szukanej liczby cudzysłów.
Ważne!

W rozwiązaniu wykorzystujemy operator div. Operator div oznacza dzielenie całkowitoliczbowe.

Algorytm wyszukiwania binarnego działa przez podział zakresu wyszukiwania na dwie równe części i wybór tej, która zawiera szukaną wartość (lub może ją zawierać). Dzięki temu zakres wyszukiwania jest dzielony na pół w każdej iteracji. W konsekwencji każdy podział sprowadzi problem do problemu o połowę mniejszego.

W związku z tym, jeżeli mamy tablicę o długości , to w najgorszym wypadku potrzebujemy Ologn podziałów, aby zawęzić zakres wyszukiwania do jednego elementu. Stąd złożoność czasowa wynosi Ologn.

Słownik

idol
idol

taka osoba, którą znają wszyscy, a która nie zna nikogo

lider
lider

wartość w zbiorze n-elementowym, która powtarza się więcej niż n2 razy

wartownik
wartownik

element umieszczany w zbiorze danych, który ma zostać przeszukany z wykorzystaniem algorytmu wyszukiwania liniowego

wyszukiwanie binarne
wyszukiwanie binarne

algorytm odnajdowania elementów w uporządkowanych zbiorach; polega na wielokrotnym dzieleniu przeszukiwanego zbioru na dwie równe części i porównywaniu wartości szukanej z elementem znajdującym się w środku dzielonego obszaru

wyszukiwanie liniowe
wyszukiwanie liniowe

algorytm wyszukiwania elementu w zbiorze danych polegający na porównywaniu poszukiwanego elementu z elementami zbioru danych

złożoność czasowa
złożoność czasowa

ilość czasu potrzebna do wykonania zadania, wyrażona jako funkcja ilości danych

złożoność obliczeniowa
złożoność obliczeniowa

ilość zasobów komputerowych potrzebnych do wykonania zadania; złożoność obliczeniowa obejmuje złożoność pamięciową i czasową

złożoność pamięciowa
złożoność pamięciowa

ilość pamięci potrzebnej do wykonania zadania, wyrażona jako funkcja ilości danych