用随机字母生成随机文本,字母来自于文件的学习,用k=5阶马尔科夫链。此处用随机字母生成最忌文本不同于随机单词,可以用顺序搜索,而省去排序和指针数组,但是单词不能,因为从一个单词找到下一个单词还是很费时间的。
注意:每次更新p是指向nextp的下一个字符的,而不是p的下一个字符!!
参考:http://blog.chinaunix.net/uid-26548237-id-3764284.html点击打开链接
#include<iostream>
using namespace std;
char x[5000000];
int main()
{
int n=0,k=5;
char c;
char *p,*nextp,*q;
freopen("input.txt","r",stdin);
while ((c=getchar())!=EOF)
x[n++]=c;
for(int i=0;i<k;i++)
{
cout<<x[i];
x[n++]=0;
}
p=x;
for(int maxChar=200;maxChar>0;maxChar--)
{
int eqsofar=0;
for(q=x;q<x+n-k+1;q++)//用这个顺序搜索代替了随机单词构成文本中的word指针数组和排序。
{
int i=0;
for(i=0;i<k && *(q+i)==*(p+i);i++)
;
if(i==k)//找到了一个k个字符相等
{
if(rand()%++eqsofar==0)
nextp=q;
}
}
c=*(nextp+k);
if(c=='\0')
break;
cout<<c;
p=nextp+1;
}
system("pause");
return 0;
}