Question

J'ai ma 2ème mission pour la classe C ++ qui comprend les chaînes de Markov. La mission est simple mais je ne suis pas en mesure de déterminer quelle est la meilleure mise en œuvre lors de la lecture des fichiers caractères.

J'ai un fichier autour de 300k. L'une des règles pour l'attribution est d'utiliser Map et les classes Vector. Dans la carte (clé est uniquement string) et les valeurs seront les vecteurs. Quand je lis à partir du fichier, je dois commencer à recueillir des paires de clés.

Exemple:

File1.txt
1234567890
1234567890

Si le produit de Markov k = 3, j'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 omble chevalier 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
}

}

Je laisse d'autres détails. Ma question principale est que si j'ai 318.000 caractères, je vais faire le conditionnel à chaque fois que ce qui ralentit mon ordinateur beaucoup (tout nouveau MAC Pro). Un exemple de programme du professeur exécute ce fichier dans environ 5 secondes.

Je ne suis pas en mesure de comprendre ce qui est la meilleure méthode pour lire les mots de longueur fixe à partir d'un fichier texte en C ++.

Merci!

Était-ce utile?

La solution

Avez-vous chronométré en fait le programme? 318.000 conditionals devrait être un morceau de gâteau pour votre nouvelle marque MAC Pro. Cela ne devrait prendre que microsecondes.

L'optimisation prématurée est la racine de tous les maux. Faites votre programme de travail en premier lieu, l'optimisation vient en deuxième position.

Autres conseils

Lecture de fichiers répétée va ralentir le programme.

Lire le fichier en blocs, de dire la taille 1024, placée dans un tampon. Ensuite, traiter ce tampon comme vous avez besoin pour l'affectation. Répétez l'opération pour le bloc suivant jusqu'à ce que vous avez terminé avec le fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top