Bonjour,
A mon avis la solution de MailSpam est la plus rapide car on ne parcourt le fichier qu'une seule fois tandis qu'avec les chaineOccurrence on le fait plusieurs fois.
Ami calmant, J.P![]()
Bonjour,
A mon avis la solution de MailSpam est la plus rapide car on ne parcourt le fichier qu'une seule fois tandis qu'avec les chaineOccurrence on le fait plusieurs fois.
Ami calmant, J.P![]()
je retire ce que je viens de dire
En effet j'ai fait un test sur un fichier de 903 ko avec ce code :
En mode Debug j'optiens les temps suivants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 MonBuffer est un Buffer x est un entier y est un entier TableauCar est un tableau de 256 entiers DuréeMaFonction est une Durée MonBuffer = fChargeBuffer("f:\french.txt") ChronoDébut POUR x = 1 _A_ Taille(MonBuffer) y = Asc(MonBuffer[[x]]) TableauCar[y]++ FIN DuréeMaFonction = ChronoFin() Info(DuréeMaFonction) // affichage du resultat on affiche chaque elements du tableau POUR Carac = 1 A 255 Trace(Caract(Carac) + " : "+TableauCar[Carac] +" occurrences") FIN taRecapOccurence est un tableau associatif d'entiers sMonFic est une chaîne cMonCar est un caractère toto est un entier sMonFic = fChargeTexte("f:\french.txt") ChronoDébut POUR nIdCar = 1 _A_ Taille(sMonFic) cMonCar = sMonFic[[nIdCar]] // il faut peut être faire un contrôle sur le type de caractère genre Tab ou RC etc... taRecapOccurence[cMonCar] = taRecapOccurence[cMonCar] +1 FIN DuréeMaFonction = ChronoFin() Info(DuréeMaFonction) // affichage du resultat on affiche chaque elements du tableau POUR toto = 1 _A_ 255 Trace(Caract(toto) + " : "+taRecapOccurence[Caract(toto)] +" occurrences") FIN resultat est un tableau associatif d'entier MonCarac est un entier Fichier est une chaîne Fichier = fChargeTexte("f:\french.txt") ChronoDébut POUR MonCarac = 1 A 255 resultat[MonCarac] = ChaîneOccurrence(Fichier,Caract(MonCarac)) FIN DuréeMaFonction = ChronoFin() Info(DuréeMaFonction) // affichage du resultat on affiche chaque elements du tableau POUR MonCarac = 1 A 255 Trace(Caract(MonCarac) + " : "+resultat[MonCarac] +" occurrences") FIN
1ère méthode : 947 ms
2ème méthode : 1819 ms
3ème méthode : 647 ms
donc c'est la méthode de tatayo avec ChaineOccurrence qui est la plus rapide ( cela vient certainement du fait que cette fonction doit être optimisée (codée en assembleur ou c ou c++).
Ami calmant, J.P ;-)
bonjour,
et en créant une dll fctLettres.dll en utilisant code::blocks avec ce code :
et appel en windev :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include "main.h" using namespace std; extern "C" __declspec(dllexport) int cptLettres(int c[],char chaine[]) { int i = 0; while (chaine[i] != '\0') { // remplissage du tableau c[(int)chaine[i++]]++; } return 1; }
on obtient un temp de 2ms
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MonBuffer est un Buffer TableauCar est un tableau de 256 entiers DuréeMaFonction est une Durée rtcode est un entier système MonBuffer = fChargeBuffer("f:\french.txt") ChronoDébut rtcode = API("fctLettres.dll","cptLettres",&TableauCar,&MonBuffer) DuréeMaFonction = ChronoFin() POUR Carac = 0 A 255 // attention au décalage tableau windev (démarre à 1) et cpp ( démarre à 0 ) Trace(Caract(Carac) + " : " + TableauCar[Carac+1] +" occurrences") FIN Info(DuréeMaFonction)![]()
Ami calmant, J.P![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager