Algo le plus rapide pour trouver une répétition ?

Algo le plus rapide pour trouver une répétition ? - Algo - Programmation

Marsh Posté le 25-07-2005 à 21:07:27    

Quelle serait l'algo le plus rapide pour trouver le caractère(0 à 255) qui se répète le plus dans un fichier ?
 
La seule méthode que j'ai trouvé est de faire un tableau de 256 éléments et de parcourir le fichier octet par octet puis avec sa valeur aller dans la même position dans le tableau puis incrémenter la valeur.
 
Mais quand on a un fichier d'une centaine de mb c'est long.  :whistle:

Reply

Marsh Posté le 25-07-2005 à 21:07:27   

Reply

Marsh Posté le 26-07-2005 à 00:37:33    

NullDragon a écrit :

Quelle serait l'algo le plus rapide pour trouver le caractère(0 à 255) qui se répète le plus dans un fichier ?
 
La seule méthode que j'ai trouvé est de faire un tableau de 256 éléments et de parcourir le fichier octet par octet puis avec sa valeur aller dans la même position dans le tableau puis incrémenter la valeur.
 
Mais quand on a un fichier d'une centaine de mb c'est long.  :whistle:


Si tu veux faire des statistiques exactes, tu es bien obligé de lire le fichier entièrement et l'incrémentation de ton tableau n'est à mon avis probablement rien devant le temps nécessaire à la lecture sur disque.
 
Tu peux imaginer de prendre en compte 1 caractère sur 10 ou sur 100, si tu acceptes d'avoir des statistiques approximatives. Mais je pense que cela ne changera que le temps calcul, qui est probablement négligeable devant le temps de lecture du disque.  
 
Par contre, je te suggère d'essayer en vérifiant la taille du cluster (unité d'allocation) de ton disque et en analysant complètement un cluster sur n. Avec n = 10, n=100,... au choix. Le programme doit alors faire une lecture directe exactement d'un nombre entier de clusters (par exemple 1) en ne lisant que celui-là. Il est possible alors que tu gagneras du temps. Mais ce n'est pas certain non plus car avec une telle lecture "imprévisible" le dispositif de lecture "d'avance" du fichier ne peut être mis à profit et il est possible que cela n'aille pas plus vite...

Reply

Marsh Posté le 27-07-2005 à 17:39:16    

La seule optimisation que je vois est de t'arreter avant le fin du fichier des que la difference entre le nombre d'occurences du caractere le plus frequent et le nombre d'occurences du deuxieme caractere le plus frequent depasse le nombre de caracteres restant a lire. Dans la plupart des cas ca ne te fera pas gagner grand chose.
 
Sinon pour ameliorer les perf, il ne faut evidemment pas lire caractere par caractere avec read(). Utilise plutot fread(), ou mappe le fichier en memoire (c'est ce que je ferais).
 
Edit : j'avais oublie des mots.


Message édité par matafan le 03-08-2005 à 16:33:33
Reply

Marsh Posté le 03-08-2005 à 07:39:37    

Ca ne doit pas être si long que ça. En principe, en codant correctement, on doit être limité par la vitesse de transfert du disque dur, soit aujourd'hui quelques dizaines de Mo/s.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed