質問

マルコフチェーンを含む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のブロックでファイルを読み取り、バッファーに入れます。次に、割り当てに必要なバッファーを処理します。ファイルが完了するまで、次のブロックを繰り返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top