Generer des combinaisons - Structure en Arbre

Résolu
cs_amgab2003 Messages postés 2 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 4 août 2010 - 1 juil. 2010 à 17:46
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 1 juil. 2010 à 18:58
Bonjour,

J'ai un problème d'arrangement à résoudre:
J"ai des objets (Strings ou autres objets) à arranger suivant toutes les combinaisons possibles : par exemples si mes objets sont A,B,C
mon programme doit générer la liste suivante:

ABC-ACB-BAC-BCA-CAB-CBA

Le nombre peut aller à quelques dizaines! soit 3628800 combinaisons par exemple pour 10 objets (factoriel 10)
J'ai eu l'idée d'utiliser un structure d'arbre comme illustré dans le screenshot ci dessous(illustré par le contrôle TreeView)
http://fr.tinypic.com/view.php?pic=f36p8i&s=6

J'ai deux question:

1) Est ce qu'il y a une meilleure méthode pour effectuer cette tache

2) J'utilise maintenant le contrôle TreeView mais ça ne me permet pas de stocker des objets quelconques et c'est lourd pour des long traitements. Est ce qu'il y a des classes prêtes qui permettent de stocker des arbres (n-aires)?

Je vous remercie d'avance

1 réponse

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juil. 2010 à 18:58
1) Est ce qu'il y a une meilleure méthode pour effectuer cette tache

A part des boucles, perso je ne vois pas, peut être une formule mathématique basé sur la valeur octale des caractère ?

2) J'utilise maintenant le contrôle TreeView mais ça ne me permet pas de stocker des objets quelconques et c'est lourd pour des long traitements. Est ce qu'il y a des classes prêtes qui permettent de stocker des arbres (n-aires)?

Tu peux recréer des classes sérailisables reprenant le principe des nodes avec parent et enfant, du style :

Public Class NodesCollection
    Inherits List(Of Node)

    Private _Parent As Node

    Sub New()
    End Sub
    Friend Sub New(ByVal parent As Node)
        _Parent = Parent
    End Sub
    Protected Overloads Sub Add(ByVal item As Node)
        item.Parent = _Parent
        MyBase.Add(item)
    End Sub

End Class

Public Class Node

    Private _Value As String
    Private _Parent As Node
    Private _Childs As NodesCollection

    Public Property Value() As String
        Get
            Return _Value
        End Get
        Set(ByVal value As String)
            _Value = value
        End Set
    End Property
    Public Property Parent() As Node
        Get
            Return _Parent
        End Get
        Set(ByVal value As Node)
            _Parent = value
        End Set
    End Property
    Public Property Childs() As NodesCollection
        Get
            Return _Childs
        End Get
        Set(ByVal value As NodesCollection)
            _Childs = value
        End Set
    End Property

    Friend Sub New(ByVal value As String, ByVal Parent As Node)
        _Parent = Parent
        _Value = value
        _Childs = New NodesCollection(Me)
    End Sub
    Public Sub New(ByVal value As String)
        _Value = value
        _Childs = New NodesCollection(Me)
    End Sub

End Class




Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Rejoignez-nous