U računarstvu, binarna pretraga ili pretraga metodom polovljenih intervala je algoritam pronalaženja indeksa određenog elementa - ključa u sortiranom nizu. U svakom koraku, algoritam upoređuje vrednost ključa (vrednost koju se traži) sa vrednošću središnjeg člana niza. Ukoliko se vrednosti podudaraju, algoritam se završava, u suprotnom, ukoliko je vrednost ključa manja od vrednosti središnjeg člana algoritam se ponavlja na levi podniz u odnosu na središnji element. Ako je ključ veći od središnjeg člana onda se algoritam primenjuje na desni podniz. Ovaj proces se ponavlja sve dok ključ nije nađen, ili dok podniz ne postane prazan, što znači da se ključ ne nalazi u nizu.

Binarna pretraga
Binarno petraživački niz
KlasaAlgoritam sortiranja[1]
Struktura podatakaNiz[1]
Najgora performanca[2]
Najbolja performanca[2]
Najgora prostorna kompleksnost[2]

Binarna pretraga u najgorem slučaju poseduje logaritamsku vremensku složenost, radeći poređenja gde je broj elemenata u nizu.[3]

Algoritam

uredi

Binarna pretraga radi na sortiranom nizu. Počinje tako što se upoređuje element u sredini niza sa traženom vrednošću. Ako je traženi element jednak izabranom elementu vraća se njegova indeks u nizu. Ako je tražena vrednost manja od izabranog elementa, pretraga se nastavlja na donjoj polivini niza. Ako je tražena vrednost veća od izabranog elementa, pretraga se nastavlja na gornjoj polivini niza. Ovako, u svakoj iteraciji, algoritam eliminiše polovinu niza u kom traženi element ne može biti.

Procedura

Za dati niz   koji se sastoji od   elemenata sa vrednostima   sortirani tako da   i traženu vrednost  , sledeća podrutina koristi binarnu pretragu da nađe indeks   u nizu  [4]

  1. Postaviti da je   jedanako   i da je   jednako  .
  2. Ako je  , pretraga se zaustavlja kao neuspešna.
  3. Postaviti   (poziciju srednjeg elementa) da bude jednako floor funkciji[a] vrednosti  .
  4. Ako je  , postaviti   da bude jednako   pa otići na korak 2.
  5. Ako je  , postaviti   da bude jednako   pa otići na korak 2.
  6.   pretraga je gotova i vraća se  .

Ova iterativna procedura prati granice pretrage sa dve promenljive   i  . Procedura može biti predstavljena u sledećem pseudokodu, u kom su promeljive imenovane kao u pre napomenutoj proceduri, gde neuspeh predstavlja vrednost koja označava neuspeh pretrage.

 
Binarna pretraga
function binarna_pretraga(A, n, T) is
    L := 0
    R := n − 1
    while L ≤ R do
        m := floor((L + R) / 2)
        if A[m] < T then
            L := m + 1
        else if A[m] > T then
            R := m − 1
        else:
            return m
    return neuspeh

Performanse

uredi

U svakom testu koji ne uspe da pronađe traženi ključ, pretraga se nastavlja u jednom ili drugom podintervalu koji je duplo manji po veličini od polaznog. Tačnije, ukoliko je veličina pokaznog intevala N , tada podintevali sadrže po N/2 ili N/2-1 elemenata.

Posle prve iteracije niz koji pretražujemo ima najviše N/2 članova. U narednoj, N/4 i tako dalje. U najgorem slučaju, ako se u nizu ne nalazi vrednost ključa algoritam mora da nastavi pretragu sve dok ne dobije prazan podniz. U najgorem slučaju, to će se dogoditi za ⌊log_2⁡〖n+1〗 ⌋ koraka. Gde je ⌊h⌋ notacija koja argument h zaokružuje na prvi manji ceo broj. U odnosu na lineranu pretragu, čija je u najgorem slučaju, složenost od N iteracija. Primećujemo da je binarna pretraga znatno brža od linearne. Na primer, ukoliko pretražujemo niz od milion članova, u linearnoj pretrazi bismo imali isto toliko koraka, a u binarnoj pretrazi nikad više od dvadeset iteracija. Mana binarne pretrage je u tome što se ovim algoritmom ne može pretražiti niz koji nije sotriran.

Napomene

uredi
  1. ^ Funkcija koja zaokružuje dati broj na prvi ceo broj koji je manji ili jednak datom broju (npr. za 2.6 izlaz bi bio 2)

Reference

uredi
  1. ^ a b Škarić 2009, str. 205
  2. ^ a b v Tomašević 2008, str. 406
  3. ^ Flores, Ivan; Madpis, George (1. 9. 1971). „Average binary search length for dense ordered lists”. Communications of the ACM. 14 (9): 602—603. ISSN 0001-0782. S2CID 43325465. doi:10.1145/362663.362752 . 
  4. ^ Knuth 1998, §6.2.1 ("Searching an ordered table"), subsekcija "History and bibliography".

Literatura

uredi