Heim > Backend-Entwicklung > PHP-Tutorial > Wie generiert man alle Permutationen eines PHP-Arrays?

Wie generiert man alle Permutationen eines PHP-Arrays?

Linda Hamilton
Freigeben: 2024-12-18 17:27:11
Original
880 Leute haben es durchsucht

How to Generate All Permutations of a PHP Array?

Alle Permutationen eines PHP-Arrays generieren

Problem:

Gegeben ist ein Array von Zeichenfolgen , alle möglichen Permutationen seiner Elemente erzeugen. Zum Beispiel sollten wir für das Array ['peter', 'paul', 'mary'] Folgendes tun erhalten:

  • peter-paul-mary
  • peter-mary-paul
  • paul-peter-mary
  • paul-mary-peter
  • mary-peter-paul
  • mary-paul-peter

Lösung 1: pc_permute-Funktion

Diese Funktion verwendet Rekursion, um Elemente innerhalb des Arrays auszutauschen und neu anzuordnen und so Permutationen zu erzeugen.

function pc_permute($items, $perms = array()) {
    if (empty($items)) { 
        echo join(' ', $perms) . "<br />";
    } else {
        for ($i = count($items) - 1; $i >= 0; --$i) {
             $newitems = $items;
             $newperms = $perms;
             list($foo) = array_splice($newitems, $i, 1);
             array_unshift($newperms, $foo);
             pc_permute($newitems, $newperms);
         }
    }
}
Nach dem Login kopieren

Lösung 2: pc_next_permutation-Funktion

Ein alternativer Ansatz besteht darin, die nächste Permutation zu verwenden Algorithmus.

function pc_next_permutation($p, $size) {
    // Find the largest index i where p[i] < p[i+1]
    for ($i = $size - 1; $p[$i] >= $p[$i+1]; --$i) { }

    // If i is -1, no next permutation exists
    if ($i == -1) { return false; }

    // Find the largest index j where p[j] > p[i]
    for ($j = $size; $p[$j] <= $p[$i]; --$j) { }

    // Swap p[i] and p[j]
    $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;

    // Reverse the order of the elements from i+1 to size
    for (++$i, $j = $size; $i < $j; ++$i, --$j) {
         $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;
    }

    return $p;
}
Nach dem Login kopieren

Verwendung:

$arr = array('peter', 'paul', 'mary');

pc_permute($arr);

or

$set = split(' ', 'she sells seashells');
$size = count($set) - 1;
$perm = range(0, $size);
$j = 0;

do { 
     foreach ($perm as $i) { $perms[$j][] = $set[$i]; }
} while ($perm = pc_next_permutation($perm, $size) and ++$j);

foreach ($perms as $p) {
    print join(' ', $p) . "\n";
}
Nach dem Login kopieren

Referenz:

  • http://docstore .mik.ua/orelly/webprog/pcook/ch04_26.htm

Das obige ist der detaillierte Inhalt vonWie generiert man alle Permutationen eines PHP-Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage