Here, flip() is a function that returns 0 or 1 with equal probability. It can be proved function Random(n) returns a number from 0 to n-1 with identically distributed probabilities (using loop invariant).
function Random(n):
v = 1;
c = 0;
loop
v = 2v;
c = 2c + flip();
if (v >= n) then
if (c < n) then
return c;
else
v = v - n;
c = c - n;
end if
end if
end loop
end function
My question is how many random bits does this algorithm use in average (expected value of calling flip() function)?
I know it takes [logn]+1 times doubling v to reach n. Then with probability of n/v = n/v^([logn]+1) algorithm finishes. If it didn't finish, algorithm starts again. Here we don't know whether doubling v will cause v >= n or not and chhecking probability would be hard. How can I face this problem?
Any help is appreciated.