Ovaj vodič će objasniti binarno pretraživanje & Rekurzivna binarna pretraga u Javi zajedno sa njenim algoritmom, implementacijom i primjerima Java binarnog koda za pretraživanje:
Binarno pretraživanje u Javi je tehnika koja se koristi za traženje ciljane vrijednosti ili ključa u kolekciji. To je tehnika koja koristi tehniku “zavadi pa vladaj” za traženje ključa.
Kolekcija na kojoj se binarno pretraživanje treba primijeniti za traženje ključa treba sortirati uzlaznim redoslijedom.
Obično većina programskih jezika podržava tehnike linearnog pretraživanja, binarnog pretraživanja i heširanja koje se koriste za traženje podataka u kolekciji. Naučit ćemo heširanje u našim sljedećim tutorijalima.
Binarno pretraživanje u Javi
Linearno pretraživanje je osnovna tehnika. U ovoj tehnici niz se prelazi sekvencijalno i svaki element se uspoređuje sa ključem dok se ne pronađe ključ ili do kraja niza.
Linearna pretraga se rijetko koristi u praktičnim aplikacijama. Binarno pretraživanje je najčešće korištena tehnika jer je mnogo brža od linearne pretrage.
Java nudi tri načina za izvođenje binarnog pretraživanja:
- Korišćenje iterativni pristup
- Upotreba rekurzivnog pristupa
- Upotreba metode Arrays.binarySearch ().
U ovom vodiču ćemo implementirati i raspravljati o svim ovim 3 metode.
Algoritam za binarno pretraživanje u Javi
U binarnommetodom pretraživanja, kolekcija se više puta dijeli na pola i ključni element se traži u lijevoj ili desnoj polovini kolekcije u zavisnosti od toga da li je ključ manji ili veći od srednjeg elementa kolekcije.
Jednostavan algoritam binarnog pretraživanja je sljedeći:
- Izračunajte srednji element kolekcije.
- Uporedite ključne stavke sa srednjim elementom.
- Ako je ključ = srednji element, tada vraćamo srednju indeksnu poziciju za pronađeni ključ.
- Else Ako ključ > mid element, tada ključ leži u desnoj polovini kolekcije. Stoga ponovite korake 1 do 3 na donjoj (desnoj) polovini kolekcije.
- Taster Else srednji element, tada je ključ u gornjoj polovini kolekcije. Stoga morate ponoviti binarno pretraživanje u gornjoj polovini.
Kao što možete vidjeti iz gornjih koraka, u binarnoj pretrazi polovina elemenata u kolekciji se zanemaruje odmah nakon prvog poređenja.
Imajte na umu da isti slijed koraka vrijedi za iterativno kao i za rekurzivno binarno pretraživanje.
Ilustrirajmo algoritam binarnog pretraživanja koristeći primjer.
Na primjer, uzmite sljedeći sortirani niz od 10 elemenata.
Izračunajmo srednju lokaciju niza.
Mid = 0+9/2 = 4
#1) Ključ = 21
Prvo ćemo uporediti vrijednost ključa sa [srednji] element i nalazimo da je vrijednost elementa nasredina = 21.
Tako nalazimo da je ključ = [sredina]. Stoga se ključ nalazi na poziciji 4 u nizu.
#2) Ključ = 25
Prvo upoređujemo ključ vrijednost do sredine. Kao (21 25), direktno ćemo tražiti ključ u gornjoj polovini niza.
Sada ćemo opet pronaći sredinu gornje polovine niza niz.
Mid = 4+9/2 = 6
Vrijednost na lokaciji [mid] = 25
Sada uporedite ključni element sa srednjim elementom. Dakle (25 == 25), stoga smo pronašli ključ na lokaciji [mid] = 6.
Tako više puta dijelimo niz i upoređujući ključni element sa sredinom, odlučujemo u kojoj polovini ćemo potražite ključ. Binarno pretraživanje je efikasnije u smislu vremena i ispravnosti, a također je mnogo brže.
Implementacija binarnog pretraživanja Java
Koristeći gornji algoritam, dozvolite nam da implementiramo program binarnog pretraživanja u Javi koristeći iterativni pristup. U ovom programu uzimamo primjer niza i vršimo binarno pretraživanje na ovom nizu.
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!"); } } }
Izlaz:
Ulazni niz: [5, 10, 15, 20 , 25, 30, 35]
Ključ za traženje=20
Element se nalazi na indeksu: 3
Navedeni program pokazuje iterativni pristup binarnog pretraživanja. U početku se deklarira niz, zatim se definira ključ koji će se pretraživati.
Nakon izračunavanja sredine niza, ključ se uspoređuje sa srednjim elementom. Zatim u zavisnosti od toga da liključ je manji ili veći od ključa, ključ se traži u donjoj ili gornjoj polovini niza, respektivno.
Rekurzivno binarno pretraživanje u Javi
Također možete izvršiti binarno pretraživanje koristeći tehniku rekurzije. Ovdje se metoda binarnog pretraživanja poziva rekurzivno dok se ne pronađe ključ ili dok se ne iscrpi cijela lista.
Program koji implementira rekurzivno binarno pretraživanje je dat u nastavku:
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"); } }
Izlaz:
Lista ulaza: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Ključ koji se traži :
Ključ je pronađen na lokaciji: 3 na listi
Korištenjem metode Arrays.binarySearch ().
Klasa Arrays u Javi pruža metodu 'binarySearch ()' koja izvodi binarno pretraživanje na datom nizu. Ova metoda uzima niz i ključ koji se traži kao argumente i vraća poziciju ključa u nizu. Ako ključ nije pronađen, tada metoda vraća -1.
Primjer u nastavku implementira metodu 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."); } }
Izlaz:
Ulazni niz : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Ključ koji se traži:50
Ključ se nalazi na indeksu: 4 u nizu.
Često postavljana pitanja
P #1) Kako napisati binarno pretraživanje ?
Odgovor: Binarno pretraživanje se obično izvodi dijeljenjem niza na polovine. Ako je ključ koji se traži veći od srednjeg elementa,tada se gornja polovina niza pretražuje daljim dijeljenjem i pretraživanjem podniza dok se ne pronađe ključ.
Slično, ako je ključ manji od srednjeg elementa, tada se ključ traži u donjem polovina niza.
P #2) Gdje se koristi binarno pretraživanje?
Odgovor: Binarno pretraživanje se uglavnom koristi za pretraživanje sortirani podaci u softverskim aplikacijama, posebno kada je memorijski prostor kompaktan i ograničen.
P #3) Koje je veliko O binarnog pretraživanja?
Odgovor : Vremenska složenost binarnog pretraživanja je O (logn) gdje je n broj elemenata u nizu. Prostorna složenost binarnog pretraživanja je O (1).
Q #4) Da li je binarno pretraživanje rekurzivno?
Odgovor: Da. Pošto je binarno pretraživanje primjer strategije zavadi pa vladaj i može se implementirati pomoću rekurzije. Možemo podijeliti niz na polovice i pozvati istu metodu za izvođenje binarnog pretraživanja iznova i iznova.
P #5) Zašto se zove binarno pretraživanje?
Odgovor: Algoritam binarnog pretraživanja koristi strategiju zavadi i vladaj koja više puta reže niz na pola ili dva dijela. Stoga se naziva binarno pretraživanje.
Zaključak
Binarno pretraživanje je često korištena tehnika pretraživanja u Javi. Zahtjev da bi se izvršilo binarno pretraživanje je da podaci budu sortirani uzlaznim redoslijedom.
Binarno pretraživanje može seimplementiran bilo korištenjem iterativnog ili rekurzivnog pristupa. Klasa Arrays u Javi također pruža metodu 'binarySearch' koja izvodi binarno pretraživanje niza.
U našim sljedećim tutorijalima ćemo istražiti različite tehnike sortiranja u Javi.