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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top