Random(a,b)问题;

1.请描述RANDOM(a,b)的过程的一种实现,它只是调用RANDOM(0,1). 作为a和b的函数,你的过程期望运行时间是多少?;

解决方法: Random(a,b)的本质是从K个数中随机的等概率的选出一个,  用RANDOM(0,1)随机产生n = b-a+1长度的序列S = {X1,X2,..,Xn};

步骤 1.如果产生的序列都为0或都为1则本次筛选作废;   假如 选择把Xi = 0的选项淘汰掉,要从剩余序列中随机选择一个数,进入步骤2;

步骤 2.如果剩余的数列大于一个数,则重复步骤1; 剩余最后一个数则为要选择的数字;

证明这种方式每个数字的选择是1/n的;

定义 Ai表示选择了第i个数字的事件;

Pr{Ai}, Ai事件发生,必须有两件事情发生, 第一,筛后留下的数字中

必须有Ai,用事件Bik来表示;  筛选后的数字个数为 {1,...k} 1=<k<n;   第二. 再次从K个数字中选择

Ai; 用事件Aik来表示;假设从K个数中随机选择Ai的算法实现,并且概率为1/k;

Pr(Ai)  = ∑Pr{Bik ∩ Aik },1=< k<n;

P{Bik} = C(n-1,k-1)/(2^n-2);  全为 0,1的两个序列排除;

P{Aik}  = 1/k;

Bik和Aik两个事件是独立的,因此:

P{Ai} =∑ Pr{Bi ∩ Aik} = ∑P{Bi}*P{Aik} =∑ C(n-1,k-1)/(2^n-2)*1/k,1=< k<n;

求解后得 Pr{Ai} = 1/n;

K个数中随机选择数的算法定义为Random(K), 上述算法可知对于任意K,则k-1的随机概率是 1/k-1时,从K个数中随机选择一个数的概率为1/k;

当K = 2时,Random(2)(Random(0,1)实现从2个数值随机选择一个)的概率是1/2;  数学归纳法 可知对于n>=2个以上的数,此算法产生随机数的概率

为 2/n;

求期望值:  求平均多少次能把规模减少到一;

(2^n - 2)/2^n 的概率能减少至少一个数据; 减少(1,2,3,..k) 1=<k<n个数据;

要求减少n-1个数据,进行随机选择的次数;  

设随机变量X为淘汰数据个数: X范围(1....k)  1=<k<n

X = k;

E(X) = ∑C(n,k)*k/(2^n-2) = C(n,1)*1/(2^n-2) + C(n,2)*2/(2^n-2)+....C(n,n-1)*(n-1)/(2^n-2)  = n/2 ;

平均每次应该减少 n/2 个数据; 一直到减少为1为止; 因此 期望运行时间为数 为O(logN);


解法2: 选择2^n-1>=(b-a+1); 取最小的n;

Random(0,1)生成 n次,组合为二位机制数; 如果这二进制属于0-b-a+1;则返回该号码;

否则,重新生成;

生成二进制数∈(a,b) 概率为p,  不属于则 为1-p;

p =(b-a+1)/ 2^n;

定义随机变量X 表示生成的二进制数成功的尝试次数:X 的范围{1,2,..........k}. k>=1;

Pr{X = k} = ((1-p)^(k-1))p;∩

期望运行次数(算法中生成m位序列的调用次数)为:  E[X]=sum(k*q^(k-1)p) [k=1......+无穷]=1/p=2^n/(b-a+1)
用T表示调用一次RANDOM(0,1)所需要的时间,每次运行时间为输出m位bit的时间:O(log(b-a) × T)
期望运行时间:O(T × log(b-a) × 2^m/(b-a+1) )=(约等于)O(T × log(b-a))  (因为m=(约等于)log(b-a+1))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值