/ / Come calcolare il max. numero di combinazioni possibili? [duplicato] - php, algoritmo, powerset

Come calcolare il max. numero di combinazioni possibili? [duplicato] - php, algoritmo, powerset

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 № 1

Questa 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