PDA

Visualizza la versione completa : [C] Generatore di combinazioni con ripetizione


_sys/sid
21-02-2007, 13:28
Ho uno stupido problemino di calcolo combinatorio che non riesco a risolvere in modo semplice.

Devo creare un generatore di combinazioni (con ripetizione)
AAA, AAB, ABA, ...

partendo da un array di n elementi
int array[] = {10, 20, 30, 40};

devo generare tutte le possibili combinazioni

qualcuno puo' aiutarmi?

Grazie

andbin
21-02-2007, 14:17
Originariamente inviato da _sys/sid
Devo creare un generatore di combinazioni (con ripetizione)
AAA, AAB, ABA, ...

partendo da un array di n elementi
int array[] = {10, 20, 30, 40};

devo generare tutte le possibili combinazioniNon difficilissimo. Nel tuo caso particolare avrai k = n.

Devi gestire un secondo array, che contiene degli indici:

int idx[4];

All'inizio li metti tutti a 0. Ognuno di questi indici va a fare riferimento al corrispondente elemento nel tuo array che contiene i dati.
Dovrai avere una sequenza degli indici di questo tipo:

0 0 0 0
0 0 0 1
0 0 0 2
0 0 0 3
0 0 1 1

(nota che quando un indice arriva al massimo, devi incrementare l'indice successivo e fare in modo che tutti quelli prima abbiano lo stesso valore)

0 0 1 2
0 0 1 3
0 0 2 2 (vedi sopra)
0 0 2 3
0 0 3 3
0 1 1 1
0 1 1 2
0 1 1 3
0 1 2 2
.....
.....
3 3 3 3

Per ogni combinazione degli indici, ottieni la combinazione dei tuoi valori semplicemente prendendo l'elemento con indice indicato in idx[i].
Un metodo del genere ti consente di "enumerare" tutte le combinazioni e di essere "generico".

Loading