【问题标题】:Markov C++ read from file performanceMarkov C++ 从文件读取性能
【发布时间】:2010-01-28 10:44:29
【问题描述】:

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

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

例子:

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

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

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

谢谢!

【问题讨论】:

  • 能否请您重新格式化代码以使其更具可读性?

标签: c++ string markov


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    过早的优化是万恶之源。让你的程序先运行,然后优化。

    【讨论】:

    • 谢谢!将遵循您的建议软件开发阶段:)
    猜你喜欢
    • 2016-09-05
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多