マルコフC ++ファイルのパフォーマンスから読み取ります
質問
マルコフチェーンを含むC ++クラスの2番目の割り当てがあります。割り当ては簡単ですが、ファイルからCharを読むときに最適な実装が何であるかを把握することはできません。
約300kのファイルがあります。割り当てのルールの1つは、マップクラスとベクトルクラスを使用することです。マップ(キーは文字列のみ)で、値はベクトルになります。ファイルから読んでいるときは、キーペアの収集を開始する必要があります。
例:
File1.txt
1234567890
1234567890
マルコフk = 3を選択した場合、マップに入れる必要があります。
key vector
123 -> 4
456 -> 7
789 -> 0
0/n1 -> 2
234 -> 5
567 -> 8
890 -> /n
/n -> NULL
教授の提案は、charでcharを読むことですので、私のアルゴリズムは次のとおりです
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
}
}
他のいくつかの詳細を省略します。私の主な質問は、318,000文字を持っている場合、コンピューターを大いに遅くするたびに条件付きを行うことです(新しいMac Pro)。教授のサンプルプログラムは、このファイルを約5秒で実行します。
C ++のテキストファイルから固定長さの単語を読むのに最適な方法は何ですか?
ありがとう!
解決
実際にプログラムをタイミングしましたか? 318,000の条件は、新しいMac Proのケーキである必要があります。マイクロ秒のみが必要です。
早期最適化はすべての悪の根源です。プログラムを最初に機能させ、最適化が2番目になります。
他のヒント
ファイルの読み取りが繰り返されるとプログラムが遅くなります。
たとえばサイズ1024のブロックでファイルを読み取り、バッファーに入れます。次に、割り当てに必要なバッファーを処理します。ファイルが完了するまで、次のブロックを繰り返します。
所属していません StackOverflow