我不知道本练习的答案,尤其是为什么他们要参加
n = [log(b - a +1 )] ?!!
我认为n = ceil(log2(b))
这是练习:
描述 RANDOM(a,b)的实现,该实现仅调用 RANDOM(0,1)。
和答案:
1: n = [lg(b − a + 1)]
2: Initialize an array A of length n
3: while true do
4: for i = 1 to n do
5: A[i] = RANDOM(0, 1)
6: end for
7: if A holds the binary representation of one of the numbers in a through
b then
8: return number represented by A
9: end if
10: end while
答案 0 :(得分:1)
它返回到十进制方法。当您要将数字从(0,1)
映射到(a,b)
时,只需将数字乘以(b-a)
,然后再加上a
。这意味着如果在x
中有一个数字(a,b)
,我们将有(b-a)*x + a
会将0
映射到a
,并且将1
映射到{{1 }}。
由于加号b
是所有数字的线性移位,因此在此忽略该移位。因此,最大值是a
,并且在b-a
的接近集合之间的值数是[a,b]
。