PDA

View Full Version : Permutazione


Zelig
20-11-2003, 14:16
Ciao Ragazzi,
qualcuno mi spiega cos'è la permutazione, io ne ho una vaga idea, ma vorrei se possibile una definizione più precisa.

Grazie Zelig.

angelica
20-11-2003, 15:37
senza star qui a scriver di mio...

http://it.wikipedia.org/wiki.cgi?Permutazione

Zelig
20-11-2003, 15:39
ok grazie mille

ciao Zelig

Sephiroth83
25-11-2003, 23:43
Vorrei aggiungere una cosa:
il numero totale di permutazion è uguale al numero di elementi fattoriale diviso i prodotti dei fattoriali delle frequenza di ogni elemento. Sarò più chiaro:
le permutazioni della parola "MAMMA" sono 10, cioè 5!/(2!*3!)
dove 2 è la frequenza della lettera 'A', 3 della lettera 'M' e 5 il numero di lettere.

lovaz
26-11-2003, 10:23
Originariamente inviato da Sephiroth83
Vorrei aggiungere una cosa:
il numero totale di permutazion è uguale al numero di elementi fattoriale diviso i prodotti dei fattoriali delle frequenza di ogni elemento. Sarò più chiaro:
le permutazioni della parola "MAMMA" sono 10, cioè 5!/(2!*3!)
dove 2 è la frequenza della lettera 'A', 3 della lettera 'M' e 5 il numero di lettere.
Queste sono le combinazioni ;)

Cn,k=n! / ( k! * (n-k)! )

Le permutazioni sono

Pn=n!

Gogeta ss4
26-11-2003, 19:24
Non parlatemi di permutazioni che nel compito ho preso 5 :rolleyes: :rolleyes:

xyz1
28-11-2003, 21:20
Ma per caso sei riuscito a fare un programmino che trovi tutte le permutazioni di una parola????
Parlando chiaro, sei riuscito a fare qualcosa che trovi gli anagrammi di una parola???
Ovviamente lasciando perdere il fatto che le parole in output abbiano un significato!!!

Per quello penso che si potrebbe fare in modo molto stupido facendo riferimento ad una libreria che contenga un vocabolario! (ovviamente è un metodo poco efficace!)

PS: da quello che ho potuto vedere la soluzionen nn è di tipo lineare, quindi è necessatio usare la ricorsione..... ma non sono sicuro :P

Sephiroth83
30-11-2003, 15:32
Si, io ho fatto un programmino che stampa tutte le permutazioni di una stringa e ho usato la ricorsione. Se ti interessa dimmi che appiccico il codice (se lo trovo nei meandri dell'hard disk...).

xyz1
30-11-2003, 17:10
Si grazie :D :D :D :D :D

xyz1
03-12-2003, 11:54
Hai trovato qualcosa per caso????

Molz
03-12-2003, 12:32
Se vuoi io ho qesto ke fa tutti gli anagrammi d 1 parola (variabile globale alfabeto) e li mette in un vettore (variabile globale testo).
Nn e' molto pulito come codice ma funziona. Inoltre nn tiene conto delle lettere ripetute e qindi stampa anke soluzioni ripetute.


void aggiungiAlVettore(char * testa, char * coda) {
char tmp[100];
int i;
sprintf(tmp,"%s%s",testa,coda);
if(strlen(tmp)==n){
for(i=0;i<n;++i)
testo[pos][n-i-1]=tmp[i];
testo[pos][n]=0;
++pos;
}
}


void Perm(char *v, char * coda) {
int n,i,j;
char v3[3];
n = strlen(v);
if (n ==1){
aggiungiAlVettore(v,coda);
return;
}
if (n == 2) {
v3[0]=v[1];
v3[1]=v[0];
v3[2]=0;
aggiungiAlVettore(v3,coda);
v3[0]=v[0];
v3[1]=v[1];
v3[2]=0;
aggiungiAlVettore(v3,coda);
}
else {
for (i=0; i<n; i++) {
char v2[100];
for (j=0; j < i; j++)
v2[j]=v[j];
for (j=i; j < n-1; j++)
v2[j]=v[j+1];
v2[j]=0;
char coda2[10],a;
char tmp[10];
a=v[i];
for (j=0; j < strlen(coda) ; j++)
tmp[j]=coda[j];
tmp[j]=0;
sprintf(coda2,"%c%s",a,tmp);
Perm(v2,coda2);
}
}

}


void anagrammi() {
char v[100],coda[1];
int i;
for (i=0; i<n; i++) {
v[i]=alfabeto[i];
v[i+1]=0;
coda[0]=0;
Perm(v,coda);
}
}

xyz1
19-07-2004, 23:07
Ciao dopo tanto tempo che mi hai spedito il codice ho deciso di usarlo....
per favore potresti spiegarmi come posso farlo funzionare?

Io in pratica devo fare tutte le permutazioni dell'alfabeto, quindi dovrei avere stampati a video 26! "alfabeti" diversi!