Heim > Backend-Entwicklung > PHP-Tutorial > PHP implementiert einen binären Suchalgorithmus (detaillierte Codeerklärung)

PHP implementiert einen binären Suchalgorithmus (detaillierte Codeerklärung)

藏色散人
Freigeben: 2023-04-06 13:16:01
nach vorne
8123 Leute haben es durchsucht

Die binäre Suche wird auch als halbe Suche bezeichnet. Der binäre Suchalgorithmus erfordert, dass die Daten in Ordnung sind. Das Folgende ist der Code zum Implementieren des binären Suchalgorithmus in PHP.

1: Rekursive Methode

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];
$target = 73;
$low = 0;
$high = count($array)-1;
function bin_search($array, $low, $high, $target){
    if ( $low <= $high){
        var_dump($low, $high);echo "\n";
        $mid =  intval(($low+$high)/2 );
        if ($array[$mid] ==  $target){
            return true;
        }elseif ( $target < $array[$mid]){
            return  bin_search($array, $low,  $mid-1, $target);
        }else{
            return  bin_search($array, $mid+ 1, $high, $target);
        }
    }
    return false;
}
$find = bin_search($array, $low, $high, $target);
var_dump($find);
Nach dem Login kopieren

Ausführungsergebnisse

int(0)
int(25)
int(13)
int(25)
int(20)
int(25)
int(20)
int(21)
bool(true)
Nach dem Login kopieren
Nach dem Login kopieren

Wir sehen, dass nach 4 binären Suchen das Suchintervall kontinuierlich halbiert und schließlich gefunden wird $target.

Zwei: Schleifenmethode

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];
$target = 73;
function bin_search($array, $target)
{
    $low = 0;
    $high = count($array)-1;
    $find = false;
    while (true){
        if ($low <= $high){
            var_dump($low, $high);echo "\n";
            $mid = intval(($low + $high)/2);
            if ($array[$mid] == $target){
                $find = true;
                break;
            } elseif ($array[$mid] < $target){
                $low = $mid+1;
            } elseif ($array[$mid] > $target){
                $high = $mid-1;
            }
        } else {
            break;
        }
    }
    return $find;
}
$find = bin_search($array, $target);
var_dump($find);
Nach dem Login kopieren

Ausführungsergebnis

int(0)
int(25)
int(13)
int(25)
int(20)
int(25)
int(20)
int(21)
bool(true)
Nach dem Login kopieren
Nach dem Login kopieren

Wir sehen, dass der Prozess und die Ergebnisse der beiden Methoden gleich sind. Testen wir den binären Suchalgorithmus für assoziative Arrays:

$array = [&#39;a&#39;=>1,&#39;b&#39;=>3,&#39;c&#39;=>6,&#39;d&#39;=>9,&#39;e&#39;=>13,&#39;f&#39;=>18,&#39;g&#39;=>19,&#39;h&#39;=>29,&#39;i&#39;=>38];
$target = 19;
function bin_search($array, $target)
{
    $low = 0;
    $high = count($array)-1;
    $key_map = array_keys($array);
    $find = false;
    while (true){
        if ($low <= $high){
            var_dump($low, $high);echo "\n";
            $mid = intval(($low + $high)/2);
            if ($array[$key_map[$mid]] == $target){
                $find = true;
                break;
            } elseif ($array[$key_map[$mid]] < $target){
                $low = $mid+1;
            } elseif ($array[$key_map[$mid]] > $target){
                $high = $mid-1;
            }
        } else {
            break;
        }
    }
    return $find;
}
$find = bin_search($array, $target);
var_dump($find);
执行结果
int(0)
int(8)
int(5)
int(8)
bool(true)
Nach dem Login kopieren

Bei zwei binären Suchvorgängen wurde $target gefunden. Für assoziative Arrays haben wir die Funktion array_keys von PHP verwendet, um den Schlüssel dieses assoziativ geordneten Arrays zu ermitteln target und $array indirekt über den Schlüssel.

Das obige ist der detaillierte Inhalt vonPHP implementiert einen binären Suchalgorithmus (detaillierte Codeerklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jmsite.cn
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