begin process at 2012 02 13 16:01:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > ALGORITHME DE COMBINAISON DE CHAINES CARACTERE (GENRE KNAPSACK)

ALGORITHME DE COMBINAISON DE CHAINES CARACTERE (GENRE KNAPSACK)


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Source .NET ( DotNet ) Classé sous :algorithme, chaine, kapsack Niveau :Initié Date de création :15/12/2006 Vu :10 476

Auteur : exonvaldez

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description


SUITE MESSAGE POSTE SUR FORUM [http://www.vbfrance.com/infomsg_COMBINAISON-CHAIN E-CARACTERES_859397.aspx#1]

Bonjour à tous,

Dans mon projet informatique fait en vb 2005, je dois proposer à l'utilisateur tous les combinaisons possible a partir d'une chaine de caractères. Je m'explique, avec un exemple (ce sera plus comprehensible)

Chaine de départ : "forum vbfrance est genial"

ca doit me retourner (pas forcement dans cet ordre)

forum vbfrance est genial
forum vbfrance est
forum vbfrance genial
forum est genial
vbfrance est genial
forum vbfrance
forum est
forum genial
vbfrance est
vbfrance genial
est genial
forum
vbfrance
est
genial

avec les contraintes sont les suivantes :
- la chaine de depart peut etre constitue de N mots
- mot identifié par un espace
- ordre des mots doit etre respecté (cad dans l'exemple : genial vbfrance est forum >>> pas possible)

Source

  • Private Sub remplissageComboClient()
  • cmbClient.Items.Clear()
  • Dim sTabMots() As String = Split(GsNomClient)
  • Dim iNbMots As Integer = sTabMots.Length
  • Dim oPile As New Generic.Stack(Of String)
  • Dim arrlstATrie As New ArrayList
  • Dim k, iPuissanceCourante As Integer
  • Dim sChaineFinal As String = ""
  • Dim iTabPuissance2(iNbMots - 1) As Integer
  • 'remplissage du tableau des puissances de 2 en fonctions du nombre de mots
  • For i As Integer = 0 To iNbMots - 1
  • iTabPuissance2(i) = CInt(Math.Pow(2, i))
  • Next
  • ' parcours toutes les combinaison de puissance de 2 possibles avec un max a 2^mots - 1
  • For i As Integer = CInt(Math.Pow(2, iNbMots) - 1) To 1 Step -1
  • iPuissanceCourante = i
  • k = iNbMots - 1
  • While iPuissanceCourante > 0 AndAlso k >= 0
  • If iPuissanceCourante >= iTabPuissance2(k) Then
  • iPuissanceCourante -= iTabPuissance2(k)
  • 'stockage dans une pile pour beneficier du "LIFO" ou "FILO"
  • oPile.Push(sTabMots(k) & " ")
  • End If
  • k -= 1
  • End While
  • 'inversion des mots pour respecter l'ordre de la chaine d'entree
  • ' on depile
  • sChaineFinal = ""
  • While oPile.Count > 0
  • sChaineFinal &= CStr(oPile.Pop)
  • End While
  • sChaineFinal = FrameWork.Chaine.suppressionEspacesDeFin(sChaineFinal)
  • If sChaineFinal <> "" Then
  • ' petite astuce pour avoir un affichage correct cad de la plus grande a la plus petite chaine
  • ' on stocke le nombre de car. de la chaine
  • arrlstATrie.Add(Format(sChaineFinal.Length, "0000") & "#" & sChaineFinal)
  • End If
  • sChaineFinal = ""
  • oPile.Clear()
  • Next
  • 'on trie la list (plus petit au plus grand)
  • arrlstATrie.Sort()
  • 'on inverse le tri (plus grand au plus petit)
  • arrlstATrie.Reverse()
  • 'ajout des autres combinaisons
  • For i As Integer = 0 To arrlstATrie.Count - 1
  • Dim sTab() As String = Split(CStr(arrlstATrie.Item(i)), "#")
  • cmbClient.Items.Add(sTab(1))
  • Next
  • cmbClient.MaxDropDownItems = FrameWork.Constantes.AFF_COMBO_MAX
  • arrlstATrie = Nothing
  • oPile = Nothing
  • End Sub
    Private Sub remplissageComboClient()
        cmbClient.Items.Clear()

        Dim sTabMots() As String = Split(GsNomClient)
        Dim iNbMots As Integer = sTabMots.Length
        Dim oPile As New Generic.Stack(Of String)
        Dim arrlstATrie As New ArrayList
        Dim k, iPuissanceCourante As Integer
        Dim sChaineFinal As String = ""

        Dim iTabPuissance2(iNbMots - 1) As Integer

        'remplissage du tableau des puissances de 2 en fonctions du nombre de mots
        For i As Integer = 0 To iNbMots - 1
            iTabPuissance2(i) = CInt(Math.Pow(2, i))
        Next

        ' parcours toutes les combinaison de puissance de 2 possibles avec un max a 2^mots - 1
        For i As Integer = CInt(Math.Pow(2, iNbMots) - 1) To 1 Step -1
            iPuissanceCourante = i
            k = iNbMots - 1
            While iPuissanceCourante > 0 AndAlso k >= 0
                If iPuissanceCourante >= iTabPuissance2(k) Then
                    iPuissanceCourante -= iTabPuissance2(k)
                    'stockage dans une pile pour beneficier du "LIFO" ou "FILO"
                    oPile.Push(sTabMots(k) & " ")
                End If
                k -= 1
            End While

            'inversion des mots pour respecter l'ordre de la chaine d'entree 
            ' on depile
            sChaineFinal = ""
            While oPile.Count > 0
                sChaineFinal &= CStr(oPile.Pop)
            End While
            sChaineFinal = FrameWork.Chaine.suppressionEspacesDeFin(sChaineFinal)

            If sChaineFinal <> "" Then
                ' petite astuce pour avoir un affichage correct cad de la plus grande a la plus petite chaine
                ' on stocke le nombre de car. de la chaine
                arrlstATrie.Add(Format(sChaineFinal.Length, "0000") & "#" & sChaineFinal)
            End If
            sChaineFinal = ""
            oPile.Clear()
        Next

        'on trie la list (plus petit au plus grand)
        arrlstATrie.Sort()
        'on inverse le tri (plus grand au plus petit)
        arrlstATrie.Reverse()

        'ajout des autres combinaisons
        For i As Integer = 0 To arrlstATrie.Count - 1
            Dim sTab() As String = Split(CStr(arrlstATrie.Item(i)), "#")
            cmbClient.Items.Add(sTab(1))
        Next
        cmbClient.MaxDropDownItems = FrameWork.Constantes.AFF_COMBO_MAX

        arrlstATrie = Nothing
        oPile = Nothing
    End Sub

 Conclusion

Je suis ouvert a toutes optimisations et/ou critiques (c comme cela qu'on progresse)


 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE AFFINE par Tigrou66
Source avec Zip Source avec une capture SCANNER FLEX par lajouad
Source avec Zip EQUATIONSECONDDEGRÉ,MATH,DEGRÉ par shadkitenge
Source avec Zip Source .NET (Dotnet) SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE par alpha5

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture APPLICATION_GRAPHE_DIJSTRA_PRIM_COLORATION_CODE2.0 par Donald180v
CHAÎNE ALÉATOIRE / RANDOM STRING par mizoz
Source .NET (Dotnet) CONJECTURE DE GOLDBACH par Skanenruf
Source .NET (Dotnet) CONJECTURE DE SYRACUSE par Skanenruf
Source .NET (Dotnet) CALCUL DE PI SELON UNE SÉRIE D'EULER par Skanenruf

Commentaires et avis

Commentaire de Drikce06 le 15/12/2006 11:08:40

Salut, ce serai bien de passer la chaine de caractère en paramètre dans la l'appel de la procédure!

Commentaire de ikrama le 14/02/2007 16:54:35

Bonjour,
j'aurais besoin de ces deux algorithmes SVP :
1.un algorithme qui affiche les nombres impaires existant entre 1 et n

2.un algorithme qui calcule la somme des chiffres d'un nombre entier : N = A n A m -1                                    
A ----> S= Ao + A 1 +.....+A n

et merciiiii
ik.

Commentaire de miss fafa le 29/04/2007 11:38:36

bjr tt le monde moi j'ai des problemes en algorithme
    moi je vx  ecrire un algo qui permet de changer 1 expression mathematique simple en notation de post fixe
merci en avance @++
mon msn est assia_123456_@hotmail.com
  si qlq vx m'aider invite moi et merci en avance

Commentaire de nizar77 le 14/05/2007 11:41:11

bonjour , je trouve votre code tres interessant ,
mais j'ai une diffuculter pour le transformer en c#

pouvez - vous m'aider

merci

Commentaire de RAPTISTA le 08/06/2007 16:43:35

Toi aussi t'es genial

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Algorithme de compression LZW [ par PhiPhi ] Je recherche un algorithme de compression LZW pour une application non commerciale, si possible disponible en vb5.0 ou vb6.0 avec le code source.code importer une variable entre 2 feuilles (Form) [ par seb ] ma question est simple: j'ai une variable string que je cree sur le Form2 et je veux recuperer le contenu de la chaine sur le Form1en declarant en pub remplacer une chaine de caractere selectionner dans un textbox [ par nox ] comment puis je remplacer une chaine de caractere (qui se trouve dans un txtbox avec d'autres chaine precedement selectionner par l'utilisateur)par un URGENT!!!Debutant en VB6 Cherche Aide [ par Princedukashmir ] Bonjour, Can you help me please ???? Voila ce que je dois faire: Faire 5 fonctions qui doivent être optimisées à fond : le moins de code possible et l URGENTISSIME!!!! Debutant cherche un boss for help [ par Princedukashmir ] Bonjour, Can you help me please ???? Voila ce que je dois faire: Faire 5 fonctions qui doivent être optimisées à fond : le moins de code possible et l MESSAGE POUR MARINIER!!!!!!!!!! [ par Princedukashmir ] Bonjour Marinier,J'ai remarqué que tu est trés fort sur VB (Tu as reponse à beaucoup de problèmes...) et j'aimerai que tu m'aide,si c'est possible.Voi chaine de connection a un SQLServer 7.x [ par korben39 ] j'aimerais savoir quel est le formattage d'une chaine de connection a une base de données dans SQLServer declarée dans ODBC comme "sampleSQL" en utili Passage de VC à VB [ par barjonet ] Bonjour,Je voudrais savoir comment je peux faire pour récupérer une chaine de caractère en VB.J'ai un programme VC++ qui retourne l'adresse d'une chai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales