题
我有包括马尔可夫链在内的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)读取放在缓冲区中。然后根据需要处理此缓冲区。重复下一个块,直到完成文件为止。
不隶属于 StackOverflow