Dieses Tutorial erklärt die binäre Suche & Rekursive binäre Suche in Java zusammen mit seinem Algorithmus, Implementierung und Java Binary Seach Code Beispiele:
Eine binäre Suche in Java ist eine Technik, die verwendet wird, um nach einem bestimmten Wert oder Schlüssel in einer Sammlung zu suchen. Es ist eine Technik, die die "Teile und Herrsche"-Technik verwendet, um nach einem Schlüssel zu suchen.
Die Sammlung, auf die die binäre Suche angewendet werden soll, um nach einem Schlüssel zu suchen, muss in aufsteigender Reihenfolge sortiert sein.
Normalerweise unterstützen die meisten Programmiersprachen lineare Suche, binäre Suche und Hashing-Techniken, die für die Suche nach Daten in der Sammlung verwendet werden.
Binäre Suche in Java
Die lineare Suche ist eine grundlegende Technik, bei der das Array nacheinander durchlaufen wird und jedes Element mit dem Schlüssel verglichen wird, bis der Schlüssel gefunden oder das Ende des Arrays erreicht ist.
Die lineare Suche wird in der Praxis nur selten verwendet. Die binäre Suche ist die am häufigsten verwendete Technik, da sie viel schneller ist als eine lineare Suche.
Java bietet drei Möglichkeiten, eine binäre Suche durchzuführen:
- Anwendung des iterativen Ansatzes
- Ein rekursiver Ansatz
- Verwendung der Methode Arrays.binarySearch ().
In diesem Tutorium werden wir alle diese 3 Methoden implementieren und diskutieren.
Algorithmus für binäre Suche in Java
Bei der binären Suchmethode wird die Sammlung wiederholt in zwei Hälften geteilt und das Schlüsselelement wird in der linken oder rechten Hälfte der Sammlung gesucht, je nachdem, ob der Schlüssel kleiner oder größer als das mittlere Element der Sammlung ist.
Ein einfacher binärer Suchalgorithmus sieht wie folgt aus:
- Berechnen Sie das mittlere Element der Sammlung.
- Vergleichen Sie die wichtigsten Elemente mit dem mittleren Element.
- Wenn Schlüssel = mittleres Element, dann geben wir die mittlere Indexposition für den gefundenen Schlüssel zurück.
- Else If key> mid element, then the key lies in the right half of the collection. Also wiederhole die Schritte 1 bis 3 auf der unteren (rechten) Hälfte der Sammlung.
- Else key <mid element, dann befindet sich der Schlüssel in der oberen Hälfte der Sammlung, so dass Sie die binäre Suche in der oberen Hälfte wiederholen müssen.
Wie Sie aus den obigen Schritten ersehen können, wird bei der binären Suche die Hälfte der Elemente in der Sammlung gleich nach dem ersten Vergleich ignoriert.
Beachten Sie, dass die gleiche Abfolge von Schritten sowohl für die iterative als auch für die rekursive binäre Suche gilt.
Lassen Sie uns den binären Suchalgorithmus anhand eines Beispiels veranschaulichen.
Nehmen wir zum Beispiel das folgende sortierte Array mit 10 Elementen.
Berechnen wir nun die mittlere Position des Feldes.
Mitte = 0+9/2 = 4
#1) Schlüssel = 21
Zunächst vergleichen wir den Schlüsselwert mit dem Element [mid] und stellen fest, dass der Elementwert bei mid = 21 ist.
So ergibt sich, dass der Schlüssel = [mid] ist und sich somit an Position 4 im Array befindet.
#2) Schlüssel = 25
Zunächst vergleichen wir den Schlüsselwert mit dem mittleren Wert (21 <25) und suchen direkt nach dem Schlüssel in der oberen Hälfte des Arrays.
Jetzt werden wir wieder die Mitte für die obere Hälfte des Feldes finden.
Mitte = 4+9/2 = 6
Der Wert an der Position [mid] = 25
Nun vergleichen wir das Schlüsselelement mit dem mittleren Element: (25 == 25), also haben wir den Schlüssel an der Stelle [Mitte] = 6 gefunden.
Auf diese Weise wird das Array wiederholt geteilt, und durch den Vergleich des Schlüsselelements mit dem Mittelwert wird entschieden, in welcher Hälfte nach dem Schlüssel gesucht werden soll. Die binäre Suche ist in Bezug auf Zeit und Korrektheit effizienter und auch viel schneller.
Implementierung der binären Suche in Java
Mit Hilfe des obigen Algorithmus wollen wir ein Binärsuchprogramm in Java implementieren, das den iterativen Ansatz verwendet. In diesem Programm nehmen wir ein Beispielarray und führen eine Binärsuche auf diesem Array durch.
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("Das Eingabe-Array: " + Arrays.toString(numArray)); //zu suchender Schlüssel int key = 20; System.out.println("\nSchlüssel zu suchen=" + key); //erstes auf ersten Index setzen int first = 0; //letztes auf letztes Element im Array setzen int last=numArray.length-1; //Mitte derarray int mid = (first + last)/2; //während sich first und last nicht überschneiden while( first <= last ){ //wenn der Schlüssel mid <ist, dann liegt der zu suchende Schlüssel in der ersten Hälfte des Arrays if ( numArray[mid] last ){ System.out.println("Element nicht gefunden!"); } } }
Ausgabe:
Das Eingabefeld: [5, 10, 15, 20, 25, 30, 35]
Zu suchender Schlüssel=20
Element wird gefunden bei Index: 3
Das obige Programm zeigt einen iterativen Ansatz der binären Suche. Zunächst wird ein Array deklariert, dann wird ein zu suchender Schlüssel definiert.
Nach der Berechnung der Mitte des Feldes wird der Schlüssel mit dem mittleren Element verglichen. Je nachdem, ob der Schlüssel kleiner oder größer als der Schlüssel ist, wird der Schlüssel in der unteren bzw. oberen Hälfte des Feldes gesucht.
Rekursive binäre Suche in Java
Die binäre Suche kann auch mit Hilfe der Rekursionstechnik durchgeführt werden, bei der die binäre Suchmethode so lange rekursiv aufgerufen wird, bis der Schlüssel gefunden oder die gesamte Liste erschöpft ist.
Das Programm, das eine rekursive Binärsuche implementiert, ist unten angegeben:
import java.util.*; class Main{ //rekursive Methode für binäre Suche public static int binary_Search(int intArray[], int low, int high, int key){ //wenn Array in Ordnung ist, dann binäre Suche auf dem Array durchführen if (high>=low){ //Mitte berechnen int mid = low + (high - low)/2; //wenn key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //wenn intArray[mid]> key dann ist key in leftHälfte des Arrays if (intArray[mid]> key){ return binary_Search(intArray, low, mid-1, key);//rekursiv nach Schlüssel suchen }else //Schlüssel ist in der rechten Hälfte des Arrays { return binary_Search(intArray, mid+1, high, key);//rekursiv nach Schlüssel suchen } } return -1; } public static void main(String args[]){ //Array und Schlüssel definieren intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("EingabeListe: " + Arrays.toString(intArray)); int key = 31; System.out.println("\nDer zu suchende Schlüssel:" + key); int high=intArray.length-1; //Aufruf der binären Suchmethode int result = binary_Search(intArray,0,high,key); //Drucken des Ergebnisses if (result == -1) System.out.println("\nSchlüssel in gegebener Liste nicht gefunden!"); else System.out.println("\nSchlüssel an Position gefunden: "+result + " in der Liste"); } }
Ausgabe:
Eingabeliste: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Der zu durchsuchende Schlüssel:
Der Schlüssel befindet sich an Position 3 in der Liste
Verwendung der Methode Arrays.binarySearch ().
Die Array-Klasse in Java bietet eine 'binarySearch ()'-Methode, die die binäre Suche auf dem gegebenen Array durchführt. Diese Methode nimmt das Array und den zu suchenden Schlüssel als Argumente und gibt die Position des Schlüssels im Array zurück. Wenn der Schlüssel nicht gefunden wird, gibt die Methode -1 zurück.
Das folgende Beispiel implementiert die Methode Arrays.binarySearch ().
import java.util.Arrays; class Main{ public static void main(String args[]){ //Definieren Sie ein Array int intArray[] = {10,20,30,40,50,60,70,80,90}; System.out.println("Das Eingabe-Array : " + Arrays.toString(intArray)); //Definieren Sie den zu suchenden Schlüssel int key = 50; System.out.println("\nDer zu suchende Schlüssel:" + key); //Aufruf der binarySearch-Methode für das angegebene Array mit dem zu suchenden Schlüssel int result =Arrays.binarySearch(intArray,key); //das Rückgabeergebnis ausgeben if (result <0) System.out.println("\nKey ist nicht im Array gefunden!"); else System.out.println("\nKey ist bei Index: "+result + " im Array gefunden."); }
Ausgabe:
Die Eingabe Array : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Der zu durchsuchende Schlüssel:50
Der Schlüssel befindet sich bei Index 4 in der Matrix.
Häufig gestellte Fragen
F #1) Wie schreibt man eine binäre Suche?
Antwort: Wenn der zu suchende Schlüssel größer als das mittlere Element ist, wird die obere Hälfte des Arrays durchsucht, indem das Sub-Array weiter unterteilt und durchsucht wird, bis der Schlüssel gefunden ist.
Wenn der Schlüssel kleiner als das mittlere Element ist, wird der Schlüssel in der unteren Hälfte des Feldes gesucht.
F #2) Wo wird die binäre Suche eingesetzt?
Antwort: Die binäre Suche wird hauptsächlich für die Suche nach sortierten Daten in Softwareanwendungen verwendet, insbesondere wenn der Speicherplatz kompakt und begrenzt ist.
F #3) Was ist das große O der binären Suche?
Antwort: Die Zeitkomplexität der binären Suche ist O (logn), wobei n die Anzahl der Elemente im Array ist. Die Raumkomplexität der binären Suche ist O (1).
F #4) Ist die binäre Suche rekursiv?
Antwort: Ja, denn die binäre Suche ist ein Beispiel für eine Divide-and-Conquer-Strategie und kann mit Hilfe von Rekursion implementiert werden. Wir können das Array in zwei Hälften unterteilen und dieselbe Methode aufrufen, um die binäre Suche immer wieder durchzuführen.
F #5) Warum nennt man es eine binäre Suche?
Antwort: Der binäre Suchalgorithmus verwendet eine Divide-and-Conquer-Strategie, bei der das Feld wiederholt in zwei Hälften oder zwei Teile geteilt wird, weshalb er auch als binäre Suche bezeichnet wird.
Schlussfolgerung
Die binäre Suche ist die am häufigsten verwendete Suchtechnik in Java. Die Voraussetzung für die Durchführung einer binären Suche ist, dass die Daten in aufsteigender Reihenfolge sortiert sind.
Eine binäre Suche kann entweder mit einem iterativen oder rekursiven Ansatz implementiert werden. Die Klasse Arrays in Java bietet auch die Methode 'binarySearch', die eine binäre Suche in einem Array durchführt.
In den folgenden Tutorials werden wir verschiedene Sortiertechniken in Java untersuchen.