Possibili duplicati:
Mostra le possibili combinazioni di stringa
algoritmo che prenderà numeri o parole e troverà tutte le possibili combinazioni
Se ho 3 stringhe, come ad esempio:
"abc def xyz"
E voglio trovare il numero massimo di combinazioni che posso generare riorganizzando queste stringhe, ad esempio:
- abc xyz def
- def xyz abc
- xyz abc def
ecc. Qual è la formula / algoritmo per il calcolo di questo?
risposte:
8 per risposta № 1Questa non è una combinazione ma una permutazione. L'algoritmo è n! dove n è il numero di elementi.
Perché ?
Perché hai 3 valori da posizionare su tre posizioni, quindi per il primo posto hai tre opzioni, per il secondo solo due (perché hai già palazzo prima stringa) e alla fine hai solo un'opzione.
3 * 2 * 1 = 3! = 6
Ma se riesci a ripetere quelle scelte, allora hai la permutazione con la ripetizione
Quindi per il primo posto puoi scegliere tra 3 corde e anche il secondo e così via
3 * 3 * 3 = 3 ^ 3 = 27
n ^ k - dove n è il numero di stringhe e k - il numero di "posizioni"
E l'algoritmo del codice assomiglia a questo:
function fact($n)
{
if ($n == 0)
{
return 1;
}
else
{
return $n * fact($n - 1);
}
}
Questo è un esempio ricorsivo
1 per risposta № 2
Se ricordo bene, "s n! Combinazioni.
quindi per 9 avresti
9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 = 362880 combinazioni
0 per risposta № 3
Esaminare le permutazioni. O "Reilley ha alcune buone informazioni su questo tramite google. Se ho un po 'di tempo extra, proverò a creare un esempio per te.
Aggiornare
Ecco un codice, non al 100% se funziona correttamente, ma dovresti essere in grado di modificarlo in base alle tue esigenze (il codice core è stato tratto dal sito O "Reilley, fyi):
<?php
function pc_permute($items, $perms = array( )) {
if (empty($items)) {
print join(" ", $perms) . "n";
} 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);
}
}
}
pc_permute(array("abc", "xyz", "def", "hij"));
?>
MODIFICARE
Appena visto che voleva l'algoritmo, o il codice dovrebbe produrre i risultati per altri lurker :) Vedi altre risposte per l'algoritmo, che è n!
0 per risposta № 4
3 * 2 * 1 = 6 fattoriale!
3 stringhe = 6 combinazioni ..... 4 stringhe = 24 combinazioni ..... ecc