如何生成随机文本?直观的方法是,以等概率的方式随机的选择每一个字母和空格,当然这样生成的文本好无意义。类似于这样:
vLtcNoXSseBeQHvTalbSbqVzFfLnaczP UrNImTyRnnMtQmZkATgEdLJP LYCsWnJavHDTMoqAAPxkmSuTgPPEdZBIOAzYPebkXw
如何生成令人感兴趣的文本呢?原理是这样的:多数事件发生在上下文。比如今天的温度和过去几天的温度相关,正常情况下不会出现太大的波动。
对于英文单词也是这样:如果当前字母是Q,那么下一个字母是U的可能性很大。通过把每个字母设置成前一个或几个字母的随机函数,就可以生成
更令人感兴趣的文本。
字母级别生成随机文本
如下代码是在字母级别随机生成文本,把k定义为4时,生成的单词基本都是英文单词了。
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <time.h>
int k=4; //阶数
char inputchars[5000000];
char *a[5000000]; //后缀数组
int nword = 0;
char* skip(char *p, int n)
{
return p+n;
}
const char* skip(const char *p, int n)
{
return p+n;
}
int charncmp(const char *p, const char *q)
{
int n=k;
while(n && *p==*q)
{
n--; p++, q++;
}
return ((n==