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

我有一个大约30万的文件。作业的规则之一是使用地图和向量类。在地图(键是字符串)中,值将是向量。当我从文件中阅读时,我需要开始收集密钥对。

例子:

File1.txt
1234567890
1234567890

如果选择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 Pro)。教授的示例程序在大约5秒钟内执行此文件。

我无法弄清楚从C ++中的文本文件中读取固定长度单词的最佳方法。

谢谢!

有帮助吗?

解决方案

您实际上是否定时了程序?对于您的全新Mac Pro来说,有318,000条条件应该是小菜一碟。那应该只有微秒。

过早优化是所有邪恶的根源。使您的程序首先工作,优化排名第二。

其他提示

重复的文件读数将减慢程序。

将块的块(尺寸1024)读取放在缓冲区中。然后根据需要处理此缓冲区。重复下一个块,直到完成文件为止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top