Markov C ++ Lesen Sie die Dateileistung
Frage
Ich habe meine 2. Zuordnung für die C ++ - Klasse, die Markov -Ketten enthält. Die Aufgabe ist einfach, aber ich kann nicht herausfinden, was die beste Implementierung beim Lesen von Zeichen aus Dateien ist.
Ich habe eine Datei um 300.000. Eine der Regeln für die Zuordnung ist die Verwendung von Karten- und Vektorklassen. In MAP (Schlüssel ist nur Zeichenfolge) und Werte sind die Vektoren. Wenn ich aus der Datei lese, muss ich mit dem Sammeln von Schlüsselpaaren beginnen.
Beispiel:
File1.txt
1234567890
1234567890
Wenn Sie Markov K = 3 auswählen, sollte ich in meiner Karte haben:
key vector
123 -> 4
456 -> 7
789 -> 0
0/n1 -> 2
234 -> 5
567 -> 8
890 -> /n
/n -> NULL
Der Vorschlag des Professors lautet, Char von char zu lesen, daher ist mein Algorithmus der folgende
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
}
}
Ich habe einige andere Details weg. Meine Hauptfrage ist, dass ich jedes Mal, was meinen Computer sehr verlangsamt (brandneuer Mac Pro), die Bedingung erledigen werde, wenn ich 318.000 Zeichen habe. Ein Beispielprogramm des Professors führt diese Datei in rund 5 Sekunden aus.
Ich kann nicht herausfinden, welche Methode die beste Methode ist, um feste Längenwörter aus einer Textdatei in C ++ zu lesen.
Vielen Dank!
Lösung
Haben Sie das Programm tatsächlich abgestimmt? 318.000 Bedingungen sollten ein Kinderspiel für Ihren brandneuen Mac Pro sein. Das sollte nur Mikrosekunden dauern.
Frühgeborene Optimierung ist die Wurzel aller Bösen. Lassen Sie Ihr Programm zuerst funktionieren, die Optimierung wird an zweiter Stelle.
Andere Tipps
Wiederholte Dateilesung verlangsamt das Programm.
Lesen Sie die Datei in Blöcken von Say Größe 1024 in einen Puffer ein. Verarbeiten Sie diesen Puffer dann, wie Sie für die Zuordnung benötigt werden. Wiederholen Sie den nächsten Block, bis Sie mit der Datei fertig sind.