begin process at 2010 02 10 14:42:34
  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 :8 295

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 .NET (Dotnet) PISH2010-VB2008 par SaintMaur
Source avec Zip Source avec une capture PI-SH-2010-VB6 par SaintMaur
ET... PI... par us_30
Source avec Zip Source avec une capture CHIFFRAGE ET DECHIFFRAGE FONCTION AFFINE par tresorsdevie
NB PREMIER : TEST DE FERMAT ET DE MILLER-RABIN par us_30

 Sources en rapport avec celle ci

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
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DE DONNÉES AVEC ACCESS par fradimed
Source avec Zip Source avec une capture DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE par asimengo

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...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 1,092 sec (3)

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