PDA

View Full Version : Algoritmo disposizioni semplici e con ripetizione.


gas89
27-02-2008, 14:30
Salve a tutti, sono nuovo del forum e stò impazzendo da un bel pò di tempo per cercare di realizzare un algoritmo che visualizzi tutte le disposizioni semplici e con ripetizione, dato n(numero di oggetti) e k(classe), oltre a chiedere se lo si deve risolvere con le ripetizioni o meno.
Sapendo che il numero di disposizioni è dato da n*(n-1)*(n-2)*.....*(n-k+1), io devo realizzare un algoritmo che mi visualizzi tutti i raggruppamenti che si ottengono, magari utilizzando una matrice.
Qualcuno di voi saprebbe aiutarmi? O in precedenza ha fatto qualcosa di simile?
Possibilmente mi servirebbe in c++, ma comunque mi va bene in qualsiasi linguaggio di programmazione, anche in pseudocodifica.
Ringrazio quanti mi aiuteranno e premetto che lo dovrei realizzare al più presto possibile.
Grazie a tutti.

P.S. dimenticavo di dire che l'algoritmo deve essere iterativo e non ricorsivo!!!

gugoXX
27-02-2008, 15:39
Propongo 2 algoritmi iterativi.
Per le disposizioni con ripetizione mi viene in mente un algoritmo molto banale.
un solo ciclo (Piu' lineare di cosi' non so se lo trovi...) , conti da 0 a N^K e stampi ciascuno dei valori in base N.
Per avere la rappresentazione della stringa in base N vedi la funzione ItoA non ANSI C ma largamente supportata.
Ti sembra un trucco? Puo' darsi, ma questi shortcut mi piacciono parecchio.

Per le disposizioni senza ripetizione in prima istanza proverei a fare la stessa cosa, ma non stamperei il numero ottenuto quando ottengo 2 simboli uguali...
Per sapere se ci sono almeno 2 simboli sono uguali e' una funzione O(k log(k)) alla peggio, e se k e' piccolo come di solito e', allora k log(k) e' ridicolo.
Ovviamente questo algoritmo non e' l'ottimo.
E quindi mi sa che ci sono alternative migliori. Occhio che e' facile cadere in un brutto spaghetti code.