マルコフ連鎖を含む C++ クラスの 2 番目の課題があります。割り当ては単純ですが、ファイルから文字を読み取るときに最適な実装を理解できません。
私は約300kのファイルを持っています。割り当てのルールの 1 つは、Map クラスと Vector クラスを使用することです。マップ (キーは文字列のみ) では、値はベクトルになります。ファイルから読み取るときは、キー ペアの収集を開始する必要があります。
例:
File1.txt
1234567890
1234567890
Select Markov k=3 の場合、マップには次のように表示されます。
key vector
123 -> 4
456 -> 7
789 -> 0
0/n1 -> 2
234 -> 5
567 -> 8
890 -> /n
/n -> NULL
教授の提案は 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 プロ)。教授のサンプル プログラムは、このファイルを約 5 秒で実行します。
C++ でテキスト ファイルから固定長の単語を読み取る最適な方法がわかりません。
ありがとう!