Newsgroup: it.comp.lang.visual-basic
Titolo: Calcolo combinatorio e Combinazioni

Ho N variabili, diciamo 5: ABCDE
Di queste,calcolo le combinazioni possibili
in base alla classe K
Function Cnk(ByVal N As Integer, K As Integer) As Double
Cnk = 1
For i = 0 To K - 1
Cnk = Cnk * ((N - i) / (K - i))
Next
End Function
Mi creo un array di queste variabili
''ABCDE
Dim var()
ReDim Preserve var(1 To COL.Count)
For j = 1 To COL.Count
var(j) = COL.Item(j)
Next
' e un'altro con 2 dimensioni (caso mai serva...)
'ABCDE
'BCDE
'CDE
'DE
'E
z = 0
ReDim My(1 To UBound(var()), 1 To UBound(var()))
For x = 1 To COL.Count
For y = x - z To COL.Count - z
My(x, y) = var(y + z)
Next
z = z + 1
Next
''''
il mio scopo è quello di trovare un modo per
generare un array contenente le combinazioni in base a N e K...
cmb = Cnk(N, K)
ReDim Risultato(1 To K, 1 To cmb)
es:
N  K
5   3  =  10 combinazioni
a b c     abc   primo,secondo,terzo
     d     abd   primo,secondo,quarto
     e     abe   primo,secondo,quinto e se quinto=N secondo=secondo+1
     c d     acd   ecc...
      e     ace
   d e     ade
b c d   ..ecc...
      e
   d e
c d e
Suggerimenti? Io ho fatto tante di quelle prove
che ormai quando chiudo gli occhi vedo solo
la finestra delle variabili locali...
Ciao,
Stefano.

 ha scritto nel messaggio
news:44Mrc.67785$Qc.27...@twister1.libero.it...


 generare un array contenente le combinazioni in base a N e K...
Prova a vedere il progetto CalcComb che ho messo sul mio
sito di "Downloads" a: 
http://www.flanguasco.org
Ciao, sperando che sia quello che ti serve.
Framco

 ReDim Risultato(1 To K, 1 To cmb)
lo sai fare a mano? se sě, allora lo sa fare anche il programma ;)
a mano ti che fai?
scrivi "A" seguita da tutte le combinazioni delle altr lettere, poi "B"
seguita dalle combinazioni delle altre ecc.
quindi ragioni in modo ricorsivo.
ecco un semplicissimo algoritmo ricorsivo per le combinazioni
Sub comb(a, b)
  If Len(a) = k Then Debug.Print a
  For i = 1 To Len(b)
    comb a & Mid(b, i, 1), Left(b, i - 1) & Mid(b, i + 1)
  Next i
End Sub
basta chiamarlo con comb "12345", ""
Al posto di Debug.Print carichi il tuo risultato.
-- 
Ciao, Silv:o)

 poi "B" seguita dalle combinazioni delle altre ecc.
Non le so fare a mano, e non le sa fare neanche il mio algoritmo. Quelle
sono disposizioni, cosě com'č ti elenca le combinazioni permutate in tutte
le salse.
-- 
Ciao, Silv:o)

     comb a & Mid(b, i, 1), Mid(b, i + 1)
in pratica, per trovare le combinazioni si 3 lettere scelte "abcde" devo:
scrivere "a" seguita dalle combinazioni di "bcde"
scrivere "b" seguita dalle combinazioni di "cde"
ecc.
quindi quando chiamo ricorsivamente comb non devo considerare la parte
precedente la lettera iniziale.
-- 
Ciao, Silv:o)

Ragazzi,
grazie a tutti!!! sono le 04:00 e al momento
non capisco neache che ci sto a fare ancora sveglio.... : )
Comunque le vostre risposte mi hanno dato nuova linfa
e domani cercherň di mettere in opera i vostri preziosi suggerimenti.
Spero di riuscire a postare qualcosa
Notte a tutti.

 cmb = Cnk(N, K)
Cerca "Combinazioni" sul sito comune: c'è una mia classe che si basa
sull'algoritmo di Franco Languasco con un progetto di esempio.
Ciao
--
Math Parser : 
http://www.neodatatype.net
FlowChart   : 
http://www.neodatatype.net/dump/flowchart/dir.asp
Sito Comune : 
http://www.it-lang-vb.net