0 votes

Performances de la lecture de Markov C++ à partir d'un fichier

J'ai mon deuxième devoir pour la classe C++ qui inclut les chaînes de Markov. Le devoir est simple mais je n'arrive pas à trouver la meilleure implémentation pour lire les caractères d'un fichier.

J'ai un fichier d'environ 300k. L'une des règles du devoir est d'utiliser les classes Map et Vector. Dans Map (la clé est seulement une chaîne) et les valeurs seront les vecteurs. Lorsque je lis le fichier, je dois commencer à collecter les paires de clés.

Exemple :

File1.txt
1234567890
1234567890

Si on choisit Markov k=3, je devrais avoir dans ma carte :

key     vector
123  -> 4
456  -> 7
789  -> 0
0/n1 -> 2
234  -> 5
567  -> 8
890  -> /n
/n   -> NULL

La suggestion du professeur est de lire char par char, donc mon algorithme est le suivant

while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {   
       get nextchar if =!EOF
       insert nextchar value in vector
       insert tempstring to Map and assign vector         
       unget char
}

}

J'omets quelques autres détails. Ma question principale est que si j'ai 318 000 caractères, je vais devoir faire le conditionnel à chaque fois ce qui ralentit beaucoup mon ordinateur (MAC pro tout neuf). Un exemple de programme du professeur exécute ce fichier en 5 secondes environ.

Je n'arrive pas à déterminer quelle est la meilleure méthode pour lire des mots de longueur fixe à partir d'un fichier texte en C++.

Merci !

4voto

phaedrus Points 8060

La lecture répétée de fichiers ralentira le programme.

Lisez le fichier en blocs, de taille 1024 par exemple, et placez-les dans un tampon. Puis traitez ce tampon comme vous le souhaitez pour le travail. Répétez l'opération pour le bloc suivant jusqu'à ce que vous ayez fini avec le fichier.

2voto

amarillion Points 5863

Avez-vous réellement chronométré le programme ? 318 000 conditionnels devraient être un jeu d'enfant pour votre tout nouveau MAC pro. Cela ne devrait prendre que quelques microsecondes.

L'optimisation prématurée est la racine de tous les maux. Faites d'abord fonctionner votre programme, l'optimisation vient ensuite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X