我一直在阅读 CLRS 并遇到了编写一个过程 Rand(a,b) 的问题,该过程使用 Rand(0,1) 以 50% 的概率生成 0 或 1 的过程 Rand(0,1) 随机均匀地在 a 到 b 之间生成一个随机数.
我想到了以下解决方案,时间为 O(b):
int Rand_a_b(int a,int b)
{
int i,k=0;
for(i=0;i<b-a;i++)
{
k+=Rand(0,1);
}
return a+k;
}
请为此提出更好的方法。