给定非均匀012产生函数,构造均匀012产生函数
- IT业界
- 2025-09-05 01:39:02

给定非均匀012产生函数,构造均匀012产生函数。非均匀012产生函数的概率是未知的。 思路:拒绝采样 设产生0、1、2的概率分别是 p p p、 q q q、 r r r, p > 0 , q > 0 , r > 0 p>0,q>0,r>0 p>0,q>0,r>0, p + q + r = 1 p+q+r=1 p+q+r=1。那么产生3个数,且0、1、2均恰好产生一次的概率为 p q r pqr pqr,这些概率是均等的。亦即产生012、021、102、120、201、210的概率是相同的。因此可以连续产生3个数,判断产生的是否是这几种之一,把其他的抛弃。那么,剩下的模式每一种产生的概率为 p q r pqr pqr,是均等的。由于0、1、2在剩下的模式中任一位置产生的概率均为三分之一,因此任意返回一个位置的数即可。 代码 #include <iostream> using namespace std; int rand012(); //non-uniform 0, 1, 2 bool legal(int a, int b, int c){ return a != b && b != c && a != c; } int uni_rand012() { //uniform 0,1,2 int a, b, c; do{ a = rand012(); b = rand012(); c = rand012(); }while(!legal(a, b, c)); return a; }
给定非均匀012产生函数,构造均匀012产生函数由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“给定非均匀012产生函数,构造均匀012产生函数”
上一篇
第一章-数制与码制