У рачунарству, бинарна претрага или претрага методом половљених интервала је алгоритам проналажења индекса одређеног елемента - кључа у сортираном низу. У сваком кораку, алгоритам упоређује вредност кључа (вредност коју се тражи) са вредношћу средишњег члана низа. Уколико се вредности подударају, алгоритам се завршава, у супротном, уколико је вредност кључа мања од вредности средишњег члана алгоритам се понавља на леви подниз у односу на средишњи елемент. Ако је кључ већи од средишњег члана онда се алгоритам примењује на десни подниз. Овај процес се понавља све док кључ није нађен, или док подниз не постане празан, што значи да се кључ не налази у низу.
Бинарна претрага у најгорем случају поседује логаритамску временску сложеност, радећи поређења где је број елемената у низу.[3]
Алгоритам
Бинарна претрага ради на сортираном низу. Почиње тако што се упоређује елемент у средини низа са траженом вредношћу. Ако је тражени елемент једнак изабраном елементу враћа се његова индекс у низу. Ако је тражена вредност мања од изабраног елемента, претрага се наставља на доњој поливини низа. Ако је тражена вредност већа од изабраног елемента, претрага се наставља на горњој поливини низа. Овако, у свакој итерацији, алгоритам елиминише половину низа у ком тражени елемент не може бити.
Процедура
За дати низ који се састоји од елемената са вредностима сортирани тако да и тражену вредност , следећа подрутина користи бинарну претрагу да нађе индекс у низу [4]
Поставити да је једанако и да је једнако .
Ако је , претрага се зауставља као неуспешна.
Поставити (позицију средњег елемента) да буде једнако floor функцији[а] вредности .
Ако је , поставити да буде једнако па отићи на корак 2.
Ако је , поставити да буде једнако па отићи на корак 2.
претрага је готова и враћа се .
Ова итеративна процедура прати границе претраге са две променљиве и . Процедура може бити представљена у следећем псеудокоду, у ком су промељиве именоване као у пре напоменутој процедури, где neuspeh представља вредност која означава неуспех претраге.
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
Перформансе
У сваком тесту који не успе да пронађе тражени кључ, претрага се наставља у једном или другом подинтервалу који је дупло мањи по величини од полазног. Тачније, уколико је величина показног интевала N , тада подинтевали садрже по N/2 или N/2-1 елемената.
После прве итерације низ који претражујемо има највише N/2 чланова. У наредној, N/4 и тако даље. У најгорем случају, ако се у низу не налази вредност кључа алгоритам мора да настави претрагу све док не добије празан подниз. У најгорем случају, то ће се догодити за ⌊log_2〖n+1〗 ⌋ корака. Где је ⌊х⌋ нотација која аргумент х заокружује на први мањи цео број. У односу на линерану претрагу, чија је у најгорем случају, сложеност од N итерација. Примећујемо да је бинарна претрага знатно бржа од линеарне. На пример, уколико претражујемо низ од милион чланова, у линеарној претрази бисмо имали исто толико корака, а у бинарној претрази никад више од двадесет итерација. Мана бинарне претраге је у томе што се овим алгоритмом не може претражити низ који није сотриран.
Напомене
^Функција која заокружује дати број на први цео број који је мањи или једнак датом броју (нпр. за 2.6 излаз би био 2)
Introductions to algorithms -Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest,Clifford Stein, књигу можете погледати овдеАрхивирано на сајту Wayback Machine (18. октобар 2016)
Алгоритми и структуре података - Мило Томашевић
Увод у програмирање - Милан Шкарић
Alexandrescu, Andrei (2010). The D Programming Language. Upper Saddle River, NJ: Addison-Wesley Professional. ISBN978-0-321-63536-5.
Chang, Shi-Kuo (2003). Data Structures and Algorithms. Software Engineering and Knowledge Engineering. 13. Singapore: World Scientific. ISBN978-981-238-348-8.
Goldman, Sally A.; Goldman, Kenneth J. (2008). A Practical Guide to Data Structures and Algorithms using Java. Boca Raton: CRC Press. ISBN978-1-58488-455-2.