0

我有第二个 C++ 类作业,其中包括马尔可夫链。分配很简单,但我无法弄清楚从文件中读取字符时最好的实现是什么。

我有一个大约 300k 的文件。分配的规则之一是使用 Map 和 Vector 类。在 Map(键只是字符串)中,值将是向量。当我从文件中读取时,我需要开始收集密钥对。

例子:

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

教授的建议是逐字符读取,所以我的算法如下

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++ 文本文件中读取固定长度单词的最佳方法是什么。

谢谢!

4

2 回答 2

5

重复文件读取会减慢程序的速度。

以块为单位读取文件,例如大小为 1024,放入缓冲区。然后根据分配的需要处理此缓冲区。重复下一个块,直到完成文件。

于 2010-01-28T10:51:26.903 回答
3

你真的给节目计时了吗?318,000 个条件句对于您全新的 MAC pro 来说应该是小菜一碟。这应该只需要几微秒。

过早的优化是万恶之源。让你的程序首先工作,优化其次。

于 2010-01-28T10:50:50.273 回答