Dit Tutorial sil útlizze Binary Search & amp; Rekursyf binêr sykjen yn Java tegearre mei syn algoritme, ymplemintaasje en Java-binêre sykjenkoadefoarbylden:
In binêre sykopdracht yn Java is in technyk dy't brûkt wurdt om te sykjen nei in doelwearde of kaai yn in kolleksje. It is in technyk dy't de technyk "ferdield en feroverje" brûkt om nei in kaai te sykjen.
De kolleksje wêrop Binêr sykjen tapast wurde moat om in kaai te sykjen moat yn oprinnende folchoarder sortearre wurde.
Meastentiids stypje de measte programmeartalen techniken foar lineêr sykjen, binêr sykjen en hashing dy't brûkt wurde om te sykjen nei gegevens yn 'e kolleksje. Wy sille hashing leare yn ús folgjende tutorials.
Binêr sykjen yn Java
Linear sykjen is in basistechnyk. Yn dizze technyk wurdt de array opfolgjend trochjûn en elk elemint wurdt fergelike mei de kaai oant de kaai is fûn of it ein fan 'e array wurdt berikt.
Linear sykjen wurdt selden brûkt yn praktyske tapassingen. Binêr sykjen is de meast brûkte technyk, om't it folle flugger is as in lineêr sykjen.
Java biedt trije manieren om in binêre sykopdracht út te fieren:
- Gebrûk fan de iterative oanpak
- Mei help fan in rekursive oanpak
- Gebrûk fan Arrays.binarySearch () metoade.
Yn dizze tutorial sille wy al dizze ymplemintearje en beprate 3 metoaden.
Algoritme foar binêr sykjen yn Java
Yn it binêrsykmetoade, de kolleksje wurdt meardere kearen ferdield yn de helte en it kaaielemint wurdt socht yn de lofter of rjochterhelte fan de kolleksje ôfhinklik fan oft de kaai minder of grutter is as it middenelemint fan de kolleksje.
In ienfâldige Binary Search Algoritme is as folget:
- Berekkenje it middelste elemint fan 'e kolleksje.
- Fergelykje de kaai items mei it middelste elemint.
- As kaai = middelste elemint, dan wy werom it midden yndeks posysje foar de kaai fûn.
- Oars As kaai & GT; mid elemint, dan de kaai leit yn 'e rjochterhelte fan' e kolleksje. Sa werhelje stappen 1 oan 3 op de legere (rjochter) helte fan de kolleksje.
- Oare kaai & lt; mid elemint, dan is de kaai yn 'e boppeste helte fan' e kolleksje. Dêrfandinne moatte jo de binêre sykopdracht yn 'e boppeste helte werhelje.
Sa't jo sjen kinne út de boppesteande stappen, yn Binary sykjen, de helte fan de eleminten yn 'e kolleksje wurde negearre krekt nei de earste ferliking.
Tink derom dat deselde folchoarder fan stappen jildt foar iteratyf as rekursyf binêr sykjen.
Lit ús it binêre sykalgoritme yllustrearje mei in foarbyld.
Bygelyks, nim de folgjende sortearre array fan 10 eleminten.
Litte wy de middelste lokaasje fan 'e array berekkenje.
Mid = 0+9/2 = 4
#1) Key = 21
Earst sille wy de kaaiwearde fergelykje mei de [midden] elemint en wy fine dat it elemint wearde atmid = 21.
Sa fine wy dat kaai = [mid]. Sadwaande wurdt de kaai fûn op posysje 4 yn 'e array.
#2) Key = 25
Wy fergelykje earst de kaai wearde oant mid. As (21 25), sille wy direkt sykje nei de kaai yn 'e boppeste helte fan' e array.
No sille wy wer it midden fine foar de boppeste helte fan de array.
Mid = 4+9/2 = 6
De wearde op lokaasje [mid] = 25
No ferlykje it kaai elemint mei it midden elemint. Dus (25 == 25), dêrom hawwe wy de kaai fûn op lokaasje [mid] = 6.
Sa ferdiele wy de array ferskate kearen en troch it toetselemint te fergelykjen mei de mid, beslute wy yn hokker helte sykje nei de kaai. Binêr sykjen is effisjinter yn termen fan tiid en korrektheid en is ek in stik flugger.
Binary Search Implementation Java
Lit ús mei it boppesteande algoritme in Binary-sykprogramma yn Java ymplementearje mei de iterative oanpak. Yn dit programma nimme wy in foarbyld array en fiere binêr sykjen op dizze array.
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!"); } } }
Utfier:
De ynfier array: [5, 10, 15, 20 , 25, 30, 35]
Kaai om te sykjen=20
Elemint is fûn by yndeks: 3
It boppesteande programma toant in iterative oanpak fan Binary sykjen. Yn earste ynstânsje wurdt in array ferklearre, dan wurdt in kaai om te sykjen definiearre.
Nei it berekkenjen fan 'e midden fan' e array, wurdt de kaai fergelike mei it mid-elemint. Dan ôfhinklik fan oftde kaai is minder as of grutter as de kaai, de kaai wurdt respektivelik socht yn 'e legere of boppeste helte fan 'e array.
Rekursive Binary Search In Java
Jo kinne ek in binêre sykopdracht útfiere mei help fan de rekursion technyk. Hjir wurdt de binêre sykmetoade rekursyf neamd oant de kaai fûn is of de hiele list útput is.
It programma dat in rekursive binêre sykopdracht útfiert wurdt hjirûnder jûn:
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"); } }
Utfier:
Ynfierlist: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
De kaai om te sykjen :
Kaai is fûn op lokaasje: 3 yn 'e list
Mei help fan Arrays.binarySearch () metoade.
De klasse Arrays yn Java leveret in 'binarySearch ()'-metoade dy't de binêre sykopdracht útfiert op 'e opjûne Array. Dizze metoade nimt de array en de kaai om te sykjen as arguminten en jout de posysje fan 'e kaai yn 'e array werom. As de kaai net fûn wurdt, jout de metoade -1 werom.
It ûndersteande foarbyld ymplementearret de Arrays.binarySearch () metoade.
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."); } }
Utfier:
De ynfier Array: [10, 20, 30, 40, 50, 60, 70, 80, 90]
De te sykjen kaai:50
Kaai wurdt fûn by yndeks: 4 yn de array.
Faak stelde fragen
F #1) Hoe skriuwe jo in binêre sykopdracht ?
Antwurd: Binêr sykjen wurdt meastentiids útfierd troch de array yn de helten te dielen. As de kaai om te sykjen grutter is dan it middelste elemint,dan wurdt de boppeste helte fan de array trochsocht troch fierder te dielen en troch te sykjen fan de sub-array oant de kaai is fûn.
Lyksa, as de kaai minder is as it middelste elemint, dan wurdt de kaai socht yn 'e legere de helte fan de array.
F #2) Wêr wurdt it binêre sykjen brûkt?
Antwurd: Binêr sykjen wurdt benammen brûkt om in sortearre gegevens yn software applikaasjes benammen as de ûnthâld romte is kompakt en beheind.
F #3) Wat is de grutte O fan binêre sykjen?
Antwurd : De tiidkompleksiteit fan it binêre sykjen is O (logn) wêrby't n it oantal eleminten yn 'e array is. De romtekompleksiteit fan it binêre sykjen is O (1).
F #4) Is binêr sykjen rekursyf?
Antwurd: Ja. Sûnt binêre sykopdracht is in foarbyld fan in divide-en-feroverje strategy en it kin wurde ymplemintearre mei help fan rekursje. Wy kinne de array yn de helten ferdiele en deselde metoade neame om it binêre sykjen hieltyd wer út te fieren.
F #5) Wêrom wurdt it in binêre sykopdracht neamd?
Antwurd: It binêre sykalgoritme brûkt in divyzje-en-feroverje-strategy dy't de array ferskate kearen yn heale of twa dielen snijt. Sa wurdt it neamd as binêr sykjen.
Konklúzje
Binêr sykjen is de faak brûkte syktechnyk yn Java. De eask foar it útfieren fan in binêre sykopdracht is dat de gegevens yn oprinnende folchoarder sortearre wurde moatte.
In binêre sykopdracht kin wurdeútfierd mei in iterative of rekursive oanpak. Arrays-klasse yn Java biedt ek de 'binarySearch'-metoade dy't in binêre sykopdracht útfiert op in array.
Yn ús folgjende tutorials sille wy ferskate sorteartechniken yn Java ûndersykje.