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

Wie generiert man alle Permutationen eines PHP-Arrays?

Linda Hamilton
Linda HamiltonOriginal
2024-12-18 17:27:11862Durchsuche

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);
         }
    }
}

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;
}

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";
}

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!

Stellungnahme:
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