Post by draleoPost by Bruno CampaniniIl giorno 11/05/2024 alle ore 11:58:27 Bruno Campanini
Post by Bruno CampaniniSemplicemente errore di nomenclatura.
Non esistono permutazioni di 5 elementi formati da
gruppi di 1, 2, 3, 4, 5 elementi (quelli che tu hai
indicato con cmb(5,1)... cmb(5,5) sono combinazioni
il cui numero eguaglia quello delle corrispondenti
permutazioni con ripetizione).
Le permutazioni con ripetizione, per esempio di 6 elementi
di cui due uguali fra di loro e tre uguali fra di loro,
sono 6!/(2!3!1!) = 60 gruppi ciascuno di 6 elementi.
Cosicché 2+3+1 = 6... poi 1! normalmente si omette.
Ki$$ ha stampato correttamente il tutto.
Io ho cercato di ottenere i suoi risultati in VBA
ma per due volte ho abbandonato... non ci sono riusciro.
Ci sarei riuscito con una procedura più lunga e complicata
di quella manuale.
in genere noto, in giro, che è facile conforndersi nella spiegazione di
comb, perm, disp, con e senza rip, per cui saltiamo le spiegazioni, che mi
quale elenco-sviluppo completo vuole l'OP ?
e se qui c'è spazio potresti elencarlo in toto ?
grazie
Vorrei saperti rispondere ma non posso.
Conosco dello scritto dell'OP quello che il medesimo
ha richiesto: le permutazioni di 5 elementi nei
casi di 2, 3, 4, 5 duplicazioni.
Staremo a vedere se vi sarà un seguito.
Bruno
le mie nozioni di matematica risalgono a più di 50 anni fa, ai tempi del
liceo scientifico, e sono abbastanza scarse. Quindi non so la differenza tra
combinazioni e permutazioni. Però quel poco di matematica che mi è rimasta mi
dice che il num delle combinazioni (permutazioni ?) richieste dovrebbe
essere 2^5. Inoltre, rubando a dx e sin, da quello che avete scritto voi, le
ho scritte manualmente, e credo vadano bene (vi risparmio la lunga lista)
draleo
Se sono simili a quelle esposte da Ki$$, sono esatte.
Ho tentato due volte fi farne una routine VBA ma non ci sono
riuscito: il calcolo combinatorio l'ho sempre mal digerito.
Ma ho trovato questa in Internet che funziona a dovere.
Vi ho apportato alcune piccolissime modifiche come la stampa, etc.
Se vuoi stampare Destr-Sinistra anziché Alto-Basso, modifica
la terz'ultima riga in R(1, k) = sOutput
Eccola qua:
===============================
Public Sub MakePerms()
Dim i As Long, j As Long, n As Long, aPerms() As Byte
Dim lCnt As Long, sOutput As String, R As Range, k As Long
Const lVar As Long = 4
Set R = [Sheet1!S1] ' Destination
' Genera le seguenti 2^lVar = 16 Permutazioni:
' 0 0 0 0
' 0 0 0 1
' 0 0 1 0
' 0 0 1 1
' 0 1 0 0
' 0 1 0 1
' 0 1 1 0
' 0 1 1 1
' 1 0 0 0
' 1 0 0 1
' 1 0 1 0
' 1 0 1 1
' 1 1 0 0
' 1 1 0 1
' 1 1 1 0
' 1 1 1 1
'
ReDim aPerms(1 To 2 ^ lVar, 1 To lVar)
For i = 0 To UBound(aPerms, 1) - 1
n = i
lCnt = lVar
aPerms(i + 1, lCnt) = CByte(n Mod 2)
n = n \ 2
Do While n > 0
lCnt = lCnt - 1
aPerms(i + 1, lCnt) = CByte(n Mod 2)
n = n \ 2
Loop
Next i
For i = LBound(aPerms, 1) To UBound(aPerms, 1)
sOutput = vbNullString
For j = LBound(aPerms, 2) To UBound(aPerms, 2)
sOutput = sOutput & Space(1) & aPerms(i, j)
Next j
'Debug.Print sOutput
k = k + 1
R(k) = sOutput
Next i
End Sub
===========================================
Bruno