Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SUPER ALGO ANAGRAMMES


Information sur la source

Catégorie :Texte Niveau : Initié Date de création : 14/04/2003 Date de mise à jour : 16/04/2003 16:29:47 Vu / téléchargé: 5 043 / 697

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

Description

Ben j'ai eu l'idée en reprenant une source qui a été postée juste avant. La source est totalement différente, et celle-ci est beaucoup plus rapide (sur mon XP 1900+) :
- 0.069 secondes pour 40320 mots (mot de 8 lettres) en compilé
- 0.188 secondes pour 40320 mots (mot de 8 lettres) sous l'IDE
- 0.600 secondes pour 362880 mots (mot de 9 lettres) en compilé
- 1.767 secondes pour 362880 mots (mot de 9 lettres) sous l'IDE  
 

Conclusion

Merci de tester cette source, de me dire les problèmes ou même de l'améliorer (ce que je suis en train de faire) !!!    
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Bricomix le 14/04/2003 10:33:57

J'oubliais : la source qui m'a donné l'idée est ici : http://www.vbfrance.com/article.aspx?Val=8409

Comme vous pourrez le voir le code est totalement différent

signaler à un administrateur
Commentaire de stevebelgium le 14/04/2003 15:20:54

Sorry , English ...

Nice program . If you want to speed up !
Maybe a suggestion . I think dat REDIM = SLOW

Solution = predict the number of combinations

3 characters = 3! = 3*2*1 = 6 combinations
4 characters = 4! = 4*3*2*1 = 24 combinations

here is the code . Have fun !

Option Explicit
Private ForbIndex() As Integer, AWordsNum As Long, TempWord As String

Public Sub CreateAnagram(ByVal StrWord As String, ByRef WordsTable() As String, Optional ByVal StartChr As Integer)
    
    Dim Numer_of_combinations  As Integer
    
    Numer_of_combinations = fac(Len(StrWord))
    
    ReDim WordsTable(Numer_of_combinations - 1)
    
    CreateAnagram2 StrWord, WordsTable()
    
End Sub
Public Sub CreateAnagram2(ByVal StrWord As String, ByRef WordsTable() As String, Optional ByVal StartChr As Integer)
If StartChr = 0 Then
    ReDim ForbIndex(1 To Len(StrWord))
    StartChr = 1: AWordsNum = 0
End If
Dim ChrIndex As Integer, VerifForb As Integer, CreateWord As Integer
For ChrIndex = 1 To Len(StrWord)
    For VerifForb = 1 To StartChr - 1
        If ForbIndex(VerifForb) = ChrIndex Then GoTo NoTest
    Next VerifForb
    ForbIndex(StartChr) = ChrIndex
    TempWord = TempWord & Mid$(StrWord, ChrIndex, 1)
    If StartChr < Len(StrWord) Then
        CreateAnagram2 StrWord, WordsTable(), StartChr + 1
    ElseIf StartChr = Len(StrWord) Then
        'ReDim Preserve WordsTable(AWordsNum)
        WordsTable(AWordsNum) = TempWord
        AWordsNum = AWordsNum + 1
    End If
    TempWord = Left$(TempWord, Len(TempWord) - 1)
NoTest:
Next ChrIndex
End Sub

Function fac(getal As Long) As Long
    
    Dim res As Long
    
        If getal = 0 Then
            fac = 1
        Else
            res = 1
            While getal > 0
                res = res * getal
                getal = getal - 1
            Wend
            fac = res
        End If
            
End Function

signaler à un administrateur
Commentaire de Alain Proviste le 14/04/2003 19:05:18 administrateur CS

En effet ce code est infiniment plus rapide que le mien.
Dla balle.

signaler à un administrateur
Commentaire de Bricomix le 14/04/2003 19:24:22

En effet stevebelgium c'est intelligent. Je va le modifier tout de suite (et qq'autres ameliorations p'tet aussi). Alain Proviste : donne des comparaisons entre le tiens et le miens niveau temps.

signaler à un administrateur
Commentaire de Kaisermann le 14/04/2003 19:43:13

Il est assez rapide ton prog. Ton proc aussi, on voit la différence entre un 1900+ et mon 1700+, 6,65 s pour un mot de 9 lettres sous l'ide !

signaler à un administrateur
Commentaire de Bricomix le 14/04/2003 19:52:46

Ben le miens c'est un 1700+ @ 1600MHz

signaler à un administrateur
Commentaire de Bricomix le 14/04/2003 20:11:54

ce qui donne a peu près un 1900+. Je viens d'updater la source, les temps sont divisés par 1/3. Grace a l'amelioration de la gestion du tableau ForbIndex() et a l'idée de stevebelgium.

signaler à un administrateur
Commentaire de Alain Proviste le 14/04/2003 20:26:54 administrateur CS

C trop bon lol. Pas la peine de tenter de faire une comparaison. Je vais améliorer ma source et on en reparle. ( J'ai été stupide de passer par un tablo temporaire, toi t'as été moins con sur ce coup. )

GOGOGO de plus en plus vite.

signaler à un administrateur
Commentaire de Alain Proviste le 14/04/2003 20:27:12 administrateur CS

Et Kaisermann t'es qu'un sale traitre lol

signaler à un administrateur
Commentaire de Bricomix le 14/04/2003 20:51:22

Alain Proviste > pour 8 lettres, mon algo se montre (sur mon ordi) 1448x plus rapide !

signaler à un administrateur
Commentaire de stevebelgium le 14/04/2003 21:16:30

Hi , back again . Great to hear it goes fater ! GO GO ... :-)
Still have a little idea , working on it ... Maybe even faster !

signaler à un administrateur
Commentaire de apxa le 15/04/2003 11:44:39

config: XP 1600+, 512mo
mot: ANAGRAMME
compilé (0.94 s)
ide       (2.42 s)

hehe ;)

signaler à un administrateur
Commentaire de Bricomix le 15/04/2003 12:51:09

config : XP1900+ (XP1700+ compilé), 512mo
mot : ANAGRAMME
compilé : 0.99s (?)
ide : 2.30s (ah)

le temps du compilé vient p'tet de windows ME quand a l'ide c'est interpreté donc le processeur fait toute la difference !

signaler à un administrateur
Commentaire de Bricomix le 15/04/2003 13:28:38

J'ai fait une update, et maintenant regardez les nouveaux temps !

signaler à un administrateur
Commentaire de Alain Proviste le 16/04/2003 19:05:24 administrateur CS

J'ai voulu refaire le miens, puis au final juste avant de la publier je me suis aperçu qu'il était la dernière version du tiens. Je vois pas l'intêret de publier deux foix la même source donc...
C'est vrai n'empeche que passer par tant de tablo c'était n'importe quoi de ma part.

Bon travail Bricomix.

signaler à un administrateur
Commentaire de Bricomix le 17/04/2003 10:39:08

Alain P : merci !

signaler à un administrateur
Commentaire de Alain Proviste le 17/04/2003 16:51:25 administrateur CS

Un truc rigolo à noter : j'ai recompilé ton algo en QB4.5 ( Basic pour dos pour les incultes ) ça va encore plus vite.

signaler à un administrateur
Commentaire de Florent le 22/04/2003 16:50:43

Comme je disait, j'espère que fana des chiffres et des lettres va passer par là....
VOYELLE

signaler à un administrateur
Commentaire de Alain Proviste le 11/05/2004 01:11:18 administrateur CS

hmmm je travail actuellement sur un algo semblable mais amélioré,
qui donnerait toutes les combinaisons de x caractères parmi n lettres :
abc : 2 parmi 3 : ab ac ba ca bc cb
A toi de voir si tu peux me massacrer publiquement une nouvelle fois.

signaler à un administrateur
Commentaire de Bricomix le 11/05/2004 19:00:57

Je suis sur un truc important ;)

J'essaierai d'y repenser :)

signaler à un administrateur
Commentaire de kridek le 20/10/2005 01:45:53

Une petite info pour vos concours ...
Certains mots sont répétés plusieurs fois ...
ex aba -> aba;aab;baa;baa;aba,aab ....

Mais bon nul n'est parfait.

Et bravo pour cet exe

signaler à un administrateur
Commentaire de Alain Proviste le 22/10/2005 14:13:54 administrateur CS

c'est plus rapide d'appliquer un algo pour enlever les doublons après ce traitement

signaler à un administrateur
Commentaire de apxa le 22/10/2005 17:02:17

config: Pentium 4 3ghz, 1.25go
mot: ANAGRAMME
compilé (0.504 s)
ide     (1.298 s)

hehe ;)

signaler à un administrateur
Commentaire de kazuhiko le 26/11/2008 15:16:14 8/10

Par simple curiosité, j'ai migré le programme en VS8.
L'algo est toujours aussi performant qu'en VB6, même un peu plus. Par contre VS8 convertit les fonctions PRINT en PrintLine ce qui a pour effet de multiplier par 10 les temps d'écriture, en remplacant par StreamWriter.WriteLine la performance est encore meilleure qu'avant. C'est toujours bon à savoir pour qui doit migrer des applications.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.