偏置随机数发生器的可能方法是什么?

Ske*_*ith 3 c++ prng

我建了一个单词生成器,它选择一个长度,然后随机选择字母表的字母来组成单词.

该程序有效,但99%的输出是垃圾,因为它没有观察英语的结构,我正在用x和z得到尽可能多的单词.

我可以选择偏置RNG,以便更频繁地使用普通字母.

我正在使用stl播种的rand().

Bjö*_*ist 5

输出仍然是垃圾,因为偏置随机数生成器不足以构造正确的英语单词.但是偏向rng的一种方法是:

  1. 在大型英文文本(语料库)中制作字母出现的直方图.你会得到500'e',3'x',1'q',450'a',200'b'之类的东西.
  2. 将间隔划分为每个字母获得切片的范围,切片的长度是间隔中出现的数量.a得到[0-450],b [450,650],...,q [3500,3501].
  3. 生成介于0和区间总长度之间的随机数,并检查其落地位置.450-650之内的任何数字都会给你ab,但只有3500给你一个'q'.