Algorithm 随机写马尔可夫模型效率
这是我的实现 但是,在分析文本文件时有点慢, 有谁有更好的想法或更好的数据结构来实现随机写入? 我不使用STL库,所以不要担心语法。 这里的vector不是使用push_back,而是使用.add randomInteger将在范围之间生成随机整数 如果可能的话,我想制作2000个字符 我认为最慢的部分是逐字符读取文件Algorithm 随机写马尔可夫模型效率,algorithm,data-structures,Algorithm,Data Structures,这是我的实现 但是,在分析文本文件时有点慢, 有谁有更好的想法或更好的数据结构来实现随机写入? 我不使用STL库,所以不要担心语法。 这里的vector不是使用push_back,而是使用.add randomInteger将在范围之间生成随机整数 如果可能的话,我想制作2000个字符 我认为最慢的部分是逐字符读取文件 void generateText(int order, string initSeed, string filename){ Map<string , Vecto
void generateText(int order, string initSeed, string filename){
Map<string , Vector<char> > model;
char ch;
string key;
ifstream input(filename.c_str());
for(int i = 0; i < order; i++){
input.get(ch);
key+=ch;
}
while(input.get(ch)){
model[key].add(ch);
key = key.substr(1,key.length()-1) + ch;
}
string result;
string seed = initSeed;
for(int i = 0;i<2000;i++){
if (model[seed].size() >0) {
ch = model[seed][randomInteger(0, model[seed].size()-1)];
cout << ch;
seed = seed.substr(1,seed.length()-1) + ch;
}
else
return;
}
}
void generateText(int顺序、字符串initSeed、字符串文件名){
地图模型;
char ch;
字符串键;
ifstream输入(filename.c_str());
for(int i=0;i cout您需要确定它花费的时间太长。(这个代码如何在普通笔记本电脑上运行不到一秒钟?)
如果是,您需要配置文件
例如,一个可能的候选者是生成随机数的成本
你只能通过分析来反驳我;)我认为它有点慢,因为它在分析阶段创建了很多临时字符串
for(int i = 0; i < order; i++){
input.get(ch);
key+=ch; // key = key + ch, at least one new string created
}
while(input.get(ch)){
model[key].add(ch); // key copied to hash table
key = key.substr(1,key.length()-1) + ch; // a couple of temp strings created
}
for(int i=0;i
你可以这样做:
char key[order + 1]; // pseudo code, won't work because order is not constant
key[order] = 0; /* NUL terminate */
for (int i = 0; i < order; i++) {
input.get(key[i]);
}
while (!(input.eof())) {
for (int j = 0; j < order - 1; k++) {
key[j] = key[j + 1];
}
input.get(key[order]);
model[key].add(ch);
}
char-key[order+1];//伪代码无效,因为顺序不是常量
键[顺序]=0;/*NUL终止*/
for(int i=0;i
这里实际创建的唯一字符串是在哈希表中作为键的字符串。该键在一个简单的字符数组中旋转,避免了字符串的临时性。我使用macbk Air 2012,因为我得到了一个比我的运行速度快得多的演示程序。我很好奇为什么演示可以运行得更快。我将一个文本文件放在此函数为1.8MB。输出结果大约需要2分钟。