je cherche a calculer toutes les partitions sous vb d'un ensemble n d'entiers
ex:
ensemble (2,3,4)
partitions:
(2)
(3)
(4)
(2,3)
(2,4)
(3,4)
(2,3,4)
Merci davance
je cherche a calculer toutes les partitions sous vb d'un ensemble n d'entiers
ex:
ensemble (2,3,4)
partitions:
(2)
(3)
(4)
(2,3)
(2,4)
(3,4)
(2,3,4)
Merci davance
je memorise sur une feuille excel par exemple
J'avais déjà répondu à cette question mais le sujet a dû être effacé![]()
Il faut utiliser une procédure récursive... mais je n'ai pas gardé le code...
Bonjour,
Voici un exemple de code permettant de terminer les partitions d'un ensemble. Le procédé n'est pas récursif, il est constructif. Tu trouveras surement le moyen de l'améliorer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 Option Base 0 Public Sub Main() Dim Partition() As Variant Dim EnsembleInitial() As Integer InitialiserEnsemble EnsembleInitial, 4 PeuplerPartition Partition, EnsembleInitial AfficherPartition Partition End Sub Private Function AfficherPartition(Partition() As Variant) Dim i As Integer, j As Integer Dim Partie() As Integer Dim Ensemble As String For i = LBound(Partition) To UBound(Partition) Partie() = Partition(i) Ensemble = vbNullString For j = LBound(Partie) To UBound(Partie) Ensemble = Ensemble & Partie(j) & ", " Next j Debug.Print "(" & Left(Ensemble, Len(Ensemble) - 2) & ")" Next i End Function Private Function InitialiserEnsemble(Ensemble() As Integer, NombreElement As Integer) Dim Index As Integer Erase Ensemble ReDim Ensemble(NombreElement - 1) For Index = 1 To NombreElement Ensemble(Index - 1) = Index Next Index End Function Private Function PeuplerPartition(Partition() As Variant, Ensemble() As Integer) Dim Index As Integer For Index = LBound(Ensemble) To UBound(Ensemble) AjouterElement Partition, Ensemble(Index) Next Index End Function Private Function AjouterElement(Partition() As Variant, Element As Integer) Dim PartitionTemporaire() As Variant Dim Partie() As Integer Dim NouvellePartie(0) As Integer Dim Index As Integer If estVide(Partition) Then ReDim Partition(0) NouvellePartie(0) = Element Partition(0) = NouvellePartie Exit Function End If PartitionTemporaire = Partition For Index = LBound(PartitionTemporaire) To UBound(PartitionTemporaire) Partie = PartitionTemporaire(Index) ReDim Preserve Partie(UBound(Partie) + 1) Partie(UBound(Partie)) = Element ReDim Preserve Partition(UBound(Partition) + 1) Partition(UBound(Partition)) = Partie Next Index ReDim Preserve Partition(UBound(Partition) + 1) NouvellePartie(0) = Element Partition(UBound(Partition)) = NouvellePartie End Function Public Function estVide(Tableau() As Variant) As Boolean Dim tmp As Long On Error GoTo ErrVide tmp = UBound(Tableau) Exit Function ErrVide: estVide = True End FunctionEnvoyé par fenêtre d'exécution
ce site est vraiment exceptionnel
Merci pour tout
Partager