Овај водич ће објаснити бинарну претрагу &амп; Рекурзивна бинарна претрага у Јави заједно са њеним алгоритмом, имплементацијом и примерима Јава бинарног кода за претрагу:
Бинарно претраживање у Јави је техника која се користи за тражење циљане вредности или кључа у колекцији. То је техника која користи технику „завади па владај“ за тражење кључа.
Колекција на којој ће се бинарно претраживање применити за тражење кључа треба да се сортира у растућем редоследу.
Обично већина програмских језика подржава технике линеарног претраживања, бинарног претраживања и хеширања које се користе за тражење података у колекцији. Научићемо хеширање у нашим следећим туторијалима.
Бинарна претрага У Јави
Линеарна претрага је основна техника. У овој техници, низ се прелази секвенцијално и сваки елемент се пореди са кључем док се не пронађе кључ или до краја низа.
Линеарна претрага се ретко користи у практичним применама. Бинарна претрага је најчешће коришћена техника јер је много бржа од линеарне претраге.
Јава пружа три начина за обављање бинарне претраге:
- Коришћење итеративни приступ
- Коришћење рекурзивног приступа
- Коришћење методе Арраис.бинариСеарцх ().
У овом водичу ћемо имплементирати и разговарати о свим овим 3 методе.
Алгоритам за бинарну претрагу у Јави
У бинарнојметода претраге, колекција се више пута дели на пола и кључни елемент се претражује у левој или десној половини колекције у зависности од тога да ли је кључ мањи или већи од средњег елемента колекције.
Једноставан алгоритам бинарног претраживања је следећи:
- Израчунајте средњи елемент колекције.
- Упоредите кључне ставке са средњим елементом.
- Ако је кључ = средњи елемент, онда враћамо средњу позицију индекса за пронађени кључ.
- Елсе Ако кључ &гт; средњи елемент, тада кључ лежи у десној половини колекције. Зато поновите кораке од 1 до 3 на доњој (десној) половини колекције.
- Тастер Елсе &лт; средњи елемент, тада је кључ у горњој половини колекције. Због тога морате да поновите бинарну претрагу у горњој половини.
Као што видите из горњих корака, у бинарној претрази половина елемената у колекцији се занемарује одмах након првог поређења.
Имајте на уму да исти низ корака важи за итеративно и рекурзивно бинарно претраживање.
Хајде да илуструјемо алгоритам бинарне претраге користећи пример.
На пример, узмите следећи сортирани низ од 10 елемената.
Хајде да израчунамо средњу локацију низа.
Средина = 0+9/2 = 4
#1) Кључ = 21
Прво ћемо упоредити вредност кључа са [средњи] елемент и налазимо да је вредност елемента насредина = 21.
Тако налазимо да је кључ = [средина]. Стога се кључ налази на позицији 4 у низу.
#2) Кључ = 25
Прво упоредимо кључ вредност до средине. Као (21 &лт; 25), директно ћемо тражити кључ у горњој половини низа.
Сада ћемо поново пронаћи средину за горњу половину низа низ.
Средња = 4+9/2 = 6
Вредност на локацији [средина] = 25
Сада упореди кључни елемент са средњим елементом. Дакле (25 == 25), стога смо пронашли кључ на локацији [мид] = 6.
Тако више пута делимо низ и упоређивањем кључног елемента са средином, одлучујемо у којој половини ћемо потражите кључ. Бинарно претраживање је ефикасније у смислу времена и исправности, а такође је и много брже.
Јава имплементација бинарне претраге
Користећи горњи алгоритам, дозволите нам да имплементирамо програм бинарне претраге у Јави користећи итеративни приступ. У овом програму узимамо пример низа и вршимо бинарну претрагу на овом низу.
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("The input array: " + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println("\nKey to be searched=" + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first = last ){ //if the mid key, then key to be searched is in the first half of array if ( numArray[mid] last ){ System.out.println("Element is not found!"); } } }
Излаз:
Улазни низ: [5, 10, 15, 20 , 25, 30, 35]
Кључ за претрагу=20
Елемент се налази на индексу: 3
Горе наведени програм показује итеративни приступ бинарног претраживања. У почетку се декларише низ, а затим се дефинише кључ за претрагу.
Након израчунавања средине низа, кључ се упоређује са средњим елементом. Затим у зависности од тога да ликључ је мањи или већи од кључа, кључ се тражи у доњој или горњој половини низа, респективно.
Рекурзивна бинарна претрага у Јави
Можете и да извршите бинарну претрагу користећи технику рекурзије. Овде се метода бинарне претраге позива рекурзивно док се не пронађе кључ или се цела листа не исцрпи.
Програм који имплементира рекурзивно бинарно претраживање је дат у наставку:
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray[], int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //if intArray[mid] > key then key is in left half of array if (intArray[mid] > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args[]){ //define array and key int intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("Input List: " + Arrays.toString(intArray)); int key = 31; System.out.println("\nThe key to be searched:" + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println("\nKey not found in given list!"); else System.out.println("\nKey is found at location: "+result + " in the list"); } }
Излаз:
Листа уноса: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Кључ за претрагу :
Кључ је пронађен на локацији: 3 на листи
Користећи метод Арраис.бинариСеарцх ().
Класа Арраис у Јави обезбеђује метод „бинариСеарцх ()“ који врши бинарну претрагу на датом низу. Овај метод узима низ и кључ који се траже као аргументе и враћа позицију кључа у низу. Ако кључ није пронађен, онда метода враћа -1.
Доњи пример имплементира метод Арраис.бинариСеарцх ().
import java.util.Arrays; class Main{ public static void main(String args[]){ //define an array int intArray[] = {10,20,30,40,50,60,70,80,90}; System.out.println("The input Array : " + Arrays.toString(intArray)); //define the key to be searched int key = 50; System.out.println("\nThe key to be searched:" + key); //call binarySearch method on the given array with key to be searched int result = Arrays.binarySearch(intArray,key); //print the return result if (result 0) System.out.println("\nKey is not found in the array!"); else System.out.println("\nKey is found at index: "+result + " in the array."); } }
Излаз:
Улазни низ : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Кључ за претрагу:50
Кључ се налази на индексу: 4 у низу.
Често постављана питања
П #1) Како написати бинарну претрагу ?
Одговор: Бинарно претраживање се обично изводи дељењем низа на половине. Ако је кључ који треба претраживати већи од средњег елемента,онда се горња половина низа претражује даљим дељењем и претрагом подниза док се не пронађе кључ.
Слично, ако је кључ мањи од средњег елемента, тада се кључ тражи у доњем половина низа.
П #2) Где се користи бинарна претрага?
Одговор: Бинарна претрага се углавном користи за претрагу сортирани подаци у софтверским апликацијама, посебно када је меморијски простор компактан и ограничен.
П #3) Шта је велико О бинарне претраге?
Одговор : Временска сложеност бинарне претраге је О (логн) где је н број елемената у низу. Просторна сложеност бинарног претраживања је О (1).
К #4) Да ли је бинарно претраживање рекурзивно?
Одговор: Да. Пошто је бинарно претраживање пример стратегије завади па владај и може се применити помоћу рекурзије. Можемо поделити низ на половине и позвати исти метод да бисмо изнова и изнова обављали бинарну претрагу.
П #5) Зашто се зове бинарна претрага?
Одговор: Алгоритам бинарног претраживања користи стратегију завади и владај која више пута сече низ на пола или два дела. Због тога се назива бинарно претраживање.
Закључак
Бинарна претрага је често коришћена техника претраживања у Јави. Услов да би се извршила бинарна претрага је да подаци буду сортирани узлазним редоследом.
Бинарно претраживање може битиимплементиран било коришћењем итеративног или рекурзивног приступа. Класа Арраис у Јави такође обезбеђује метод 'бинариСеарцх' који врши бинарну претрагу низа.
У нашим наредним туторијалима ћемо истражити различите технике сортирања у Јави.