Овој туторијал ќе го објасни бинарното пребарување & засилувач; Рекурзивно бинарно пребарување во Јава заедно со неговиот алгоритам, имплементација и бинарен код за пребарување Јава:
Бинарното пребарување во Јава е техника што се користи за пребарување на целна вредност или клуч во збирка. Тоа е техника која ја користи техниката „подели и владеј“ за пребарување на клуч.
Колекцијата на која треба да се примени Бинарното пребарување за пребарување на клуч треба да се подреди во растечки редослед.
Обично, повеќето програмски јазици поддржуваат Линеарно пребарување, Бинарно пребарување и Хеширање техники кои се користат за пребарување на податоци во колекцијата. Ќе научиме хаширање во нашите последователни упатства.
Бинарно пребарување во Java
Линеарното пребарување е основна техника. Во оваа техника, низата се поминува последователно и секој елемент се споредува со клучот додека не се најде клучот или не се достигне крајот на низата.
Линеарното пребарување ретко се користи во практични апликации. Бинарното пребарување е најчесто користената техника бидејќи е многу побрзо од линеарното пребарување.
Java обезбедува три начини за извршување на бинарно пребарување:
- Користење итеративниот пристап
- Користење рекурзивен пристап
- Користење на методот Arrays.binarySearch ().
Во ова упатство, ќе ги имплементираме и дискутираме сите овие 3 методи.
Алгоритам за бинарно пребарување во Java
Во бинарнотометод на пребарување, колекцијата постојано се дели на половина и клучниот елемент се пребарува во левата или десната половина од колекцијата во зависност од тоа дали клучот е помал или поголем од средниот елемент на колекцијата.
Едноставен бинарен алгоритам за пребарување е како што следува:
- Пресметајте го средниот елемент на колекцијата.
- Споредете ги клучните ставки со средниот елемент.
- 8>Ако клучот = среден елемент, тогаш ја враќаме положбата на средниот индекс за пронајдениот клуч.
- Else If key > среден елемент, тогаш клучот лежи во десната половина од колекцијата. Така повторете ги чекорите од 1 до 3 на долната (десна) половина од колекцијата.
- Else копче среден елемент, тогаш клучот е во горната половина од колекцијата. Затоа, треба да го повторите бинарното пребарување во горната половина.
Како што можете да видите од горните чекори, при Бинарното пребарување, половина од елементите во колекцијата се игнорираат веднаш по првата споредба.
Забележете дека истата низа чекори важи за итеративно како и за рекурзивно бинарно пребарување.
Да го илустрираме алгоритмот за бинарно пребарување користејќи пример.
На пример , земете ја следната подредена низа од 10 елементи.
Да ја пресметаме средната локација на низата.
Мид = 0+9/2 = 4
#1) Клуч = 21
Прво, ќе ја споредиме вредноста на клучот со [mid] елемент и наоѓаме дека елементот вредноста наmid = 21.
Така го наоѓаме тој клуч = [mid]. Оттука клучот се наоѓа на позицијата 4 во низата.
#2) Клуч = 25
Прво го споредуваме клучот вредност до средината. Како (21 25), директно ќе го бараме клучот во горната половина од низата.
Сега повторно ќе ја најдеме средината за горната половина на низата.
Средна = 4+9/2 = 6
Вредноста на локацијата [mid] = 25
Сега ние споредете го клучниот елемент со средниот елемент. Значи (25 == 25), оттука го најдовме клучот на локација [mid] = 6.
Така постојано ја делиме низата и споредувајќи го клучниот елемент со средината, одлучуваме во која половина да барај го клучот. Бинарното пребарување е поефикасно во смисла на време и точност, а исто така е и многу побрзо.
Имплементација на бинарно пребарување Java
Користејќи го горенаведениот алгоритам, дозволете ни да имплементираме програма за бинарни пребарување во Java користејќи ја итеративен пристап. Во оваа програма, земаме примерна низа и вршиме бинарно пребарување на оваа низа.
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
Горената програма покажува итеративен пристап на Бинарното пребарување. Првично, се декларира низа, а потоа се дефинира клучот што треба да се пребарува.
По пресметувањето на средината на низата, клучот се споредува со средниот елемент. Потоа во зависност од тоа даликлучот е помал или поголем од клучот, клучот се бара во долната или горната половина од низата соодветно.
Рекурзивно бинарно пребарување во Java
Можете и да извршите бинарно пребарување користејќи ја техниката на рекурзија. Овде, методот на бинарно пребарување се повикува рекурзивно додека не се најде клучот или не се исцрпи целата листа.
Програмата што спроведува рекурзивно бинарно пребарување е дадена подолу:
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 во списокот
Користејќи го методот Arrays.binarySearch ().
Класата Arrays во Јава обезбедува метод „binarySearch ()“ што го врши бинарното пребарување на дадената низа. Овој метод ги зема низата и клучот што треба да се пребарува како аргументи и ја враќа позицијата на клучот во низата. Ако клучот не е пронајден, тогаш методот враќа -1.
Подолу наведениот пример го имплементира методот Arrays.binarySearch ().
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) Која е големата О на бинарното пребарување?
Одговор : Временската сложеност на бинарното пребарување е O (logn) каде n е бројот на елементи во низата. Комплексноста на просторот на бинарното пребарување е O (1).
П #4) Дали бинарното пребарување е рекурзивно?
Одговор: Да. Бидејќи бинарното пребарување е пример за стратегија подели-и-освоји и може да се имплементира со помош на рекурзија. Можеме да ја поделиме низата на половини и да го повикаме истиот метод за да го извршиме бинарното пребарување повторно и повторно.
П #5) Зошто се нарекува бинарно пребарување?
Одговор: Бинарниот алгоритам за пребарување користи стратегија подели-и-освоји која постојано ја пресекува низата на половини или два дела. Затоа е именувано како бинарно пребарување.
Заклучок
Бинарното пребарување е често користената техника за пребарување во Java. Условот за да се изврши бинарно пребарување е дека податоците треба да бидат подредени по растечки редослед.
Бинарното пребарување може да бидеимплементиран или со користење на итеративен или рекурзивен пристап. Класата Arrays во Јава, исто така, го обезбедува методот „binarySearch“ кој врши бинарно пребарување на низа.
Во нашите последователни упатства, ќе истражиме различни техники за сортирање во Java. > 23>