Binäre Suche mit PHP
Ich bin grade dabei mich auf die mündliche Nachprüfung zu Algorithmen vorzubereiten. Aus diesem Grund hab ich mir das Ziel Gesetzt möglichst alle Algorithmen die wir da hatten auch mal in PHP zu programmieren. Den Anfang macht die Suche.
Bei der ganz normalen linearen Suche wird die Liste oder hier der Array ja einfach von einer Seite her durch gegangen bis der gesuchte Wert gefunden wurde.
Das sieht dann so aus:
function linear_search($a, $k){ for($i = 0; $i < count($a); $i++){ if($k == $a[$i]){ return true; } } return false; }
Joa, da ist ja nix weiter dabei. Die Binäre Suche sieht dann schon bissl komplizierter aus:
function binary_search($a, $k){ //Mitte finden $mitte = round(count($a)/2, 0)-1; //wenn die Mitte der gesuchte Wert ist... if($k == $a[$mitte]){ echo $a[$mitte]." gefunden"; return true; } //wenn der Array nur noch einen Wert enthält aber die Mitte nicht //der gesuchte Wert ist elseif(count($a)==1){ echo $k." nicht gefunden"; return false; } //wenn der gesuchte Wert kleiner als die Mitte ist... elseif($k < $a[$mitte]) { //Array aus linker Hälfte bilden und in dieser weitersuchen return binary_search(array_slice($a, 0, $mitte), $k); } //wenn der gesuchte Wert größer als die Mitte ist... elseif($k > $a[$mitte-1]) { //Array aus rechter Hälfte bilden und in dieser weitersuchen return binary_search(array_slice($a, $mitte+1, count($a)), $k); } }
Ja, vielleicht kanns ja mal wer brauchen!
PS: Irgendwie sieht das so hier mächtig scheiße aus. Leider hab ich kein gescheites Plugin für WordPress gefunden dass vielleicht sogar sowas wie Syntax Highlighting für PHP kann, geschweige denn überhaupt eines welches die Code-Funktion hier etwas aufmöbelt!
Edit:
Mit der richtigen Suchzeile findet man auch das passende Ergebnis!
Bei meinem “Hinundwieder-Arbeitgeber” der ilimitado OHG aus Tübingen hab ich ein wp-syntax gefunden. Dieses Plug-In beherrscht sogar Syntax-Highlighting und kann über 80 Sprachen! So sieht das doch schon deutlich besser aus!
Deine Lineare Suche müsste eigentlich einen Array out of Bounds Fehler schmeißen. Wenn du bei 0 anfängst zu zählen, darfst du nur $i