SUPER ALGO ANAGRAMMES

Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005 - 14 avril 2003 à 10:33
cs_kazuhiko Messages postés 3 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 3 mars 2009 - 26 nov. 2008 à 15:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/6681-super-algo-anagrammes

cs_kazuhiko Messages postés 3 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 3 mars 2009
26 nov. 2008 à 15:16
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.
apxa Messages postés 188 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 25 avril 2009
22 oct. 2005 à 17:02
config: Pentium 4 3ghz, 1.25go
mot: ANAGRAMME
compilé (0.504 s)
ide (1.298 s)

hehe ;)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
22 oct. 2005 à 14:13
c'est plus rapide d'appliquer un algo pour enlever les doublons après ce traitement
kridek Messages postés 1 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 20 octobre 2005
20 oct. 2005 à 01:45
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
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
11 mai 2004 à 19:00
Je suis sur un truc important ;)

J'essaierai d'y repenser :)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
11 mai 2004 à 01:11
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.
cs_Florent Messages postés 53 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 novembre 2005
22 avril 2003 à 16:50
Comme je disait, j'espère que fana des chiffres et des lettres va passer par là....
VOYELLE
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
17 avril 2003 à 16:51
Un truc rigolo à noter : j'ai recompilé ton algo en QB4.5 ( Basic pour dos pour les incultes ) ça va encore plus vite.
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
17 avril 2003 à 10:39
Alain P : merci !
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
16 avril 2003 à 19:05
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.
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
15 avril 2003 à 13:28
J'ai fait une update, et maintenant regardez les nouveaux temps !
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
15 avril 2003 à 12:51
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 !
apxa Messages postés 188 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 25 avril 2009
15 avril 2003 à 11:44
config: XP 1600+, 512mo
mot: ANAGRAMME
compilé (0.94 s)
ide (2.42 s)

hehe ;)
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
14 avril 2003 à 21:16
Hi , back again . Great to hear it goes fater ! GO GO ... :-)
Still have a little idea , working on it ... Maybe even faster !
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
14 avril 2003 à 20:51
Alain Proviste > pour 8 lettres, mon algo se montre (sur mon ordi) 1448x plus rapide !
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
14 avril 2003 à 20:27
Et Kaisermann t'es qu'un sale traitre lol
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
14 avril 2003 à 20:26
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.
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
14 avril 2003 à 20:11
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.
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
14 avril 2003 à 19:52
Ben le miens c'est un 1700+ @ 1600MHz
cs_Kaisermann Messages postés 6 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 27 mai 2003
14 avril 2003 à 19:43
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 !
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
14 avril 2003 à 19:24
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.
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
14 avril 2003 à 19:05
En effet ce code est infiniment plus rapide que le mien.
Dla balle.
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
14 avril 2003 à 15:20
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
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
14 avril 2003 à 10:33
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
Rejoignez-nous