Heim > Backend-Entwicklung > C++ > Hauptteil

Ein Problem in vielen binären Suchimplementierungen?

WBOY
Freigeben: 2023-09-10 16:21:08
nach vorne
893 Leute haben es durchsucht

Ein Problem in vielen binären Suchimplementierungen?

Wir wissen, dass der binäre Suchalgorithmus besser ist als der lineare Suchalgorithmus. Die zur Ausführung dieses Algorithmus erforderliche Zeit beträgt O(log n). Meistens gibt es jedoch einige Probleme mit dem implementierten Code. Betrachten wir eine binäre Suchalgorithmus-Funktion wie unten gezeigt –

Beispiel

int binarySearch(int array[], int start, int end, int key){
   if(start <= end){
      int mid = (start + end) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}
Nach dem Login kopieren

Dieser Algorithmus funktioniert gut, bis er am Anfang und am Ende eine größere Zahl erreicht. Wenn (Start + Ende) den Wert 232 - 1 überschreitet, kann nach dem Umschließen eine negative Zahl zurückgegeben werden. Da negative Zahlen nicht als Array-Indizes unterstützt werden, kann dies zu Problemen führen.

Um dieses Problem zu lösen, gibt es verschiedene Möglichkeiten.

Methode 1

int mid = start + ((end - start) / 2)
Nach dem Login kopieren

Die zweite Methode funktioniert nur in Java, da es in C oder C++ keinen >>>-Operator gibt.

Methode 2 (nur für Java)

int mid = (start + end) >>> 1
Nach dem Login kopieren

Da >>> in C oder C++ nicht unterstützt wird, können wir die folgende Methode verwenden.

Methode 3

int mid = ((unsigned int) low + (unsigned int) high) >> 1
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEin Problem in vielen binären Suchimplementierungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage