searching algorithm enquiry请教PROGRAMMING高手们:
If i divide the interval I=[0,1) into, say, 64 subintervals, and recode the 64 left pts into an Array A[0:63] in ascending order, how can I decide which interval a random number a (- [0,1) is in with the LEAST possible loopings?
The method I use now is : start from the centre A[33], check if a>A[33]. if yes, check the centre of the upper half
if a>A[49]; else check centre of the lower half if a>A[17]. So on and so forth, just like the idea of a binary ADC converter. but i need 6 looping interation in order to get the answer. Any one knows faster method than this?
er,
The worst case performance is very difficult to improve, which is lg(n)
You can improve the averge case performance, by the following data structure:
(I suggested)
Divide the [0, 1) into 64 equally spanned intervels,by b1=1/64, b2=2/64, ...
Record into B which interval of A that bi belongs to.
If B[i]=B[i+1], then you meet a nice case when the randon number fall into
b[i], b[i+1], otherwise, you maybe need to divide B[i] recursively.
To implement this will be tedious. You are can compute that the average
case for this datastructure will be O(1).
Hope that will be helpful
You can improve the averge case performance, by the following data structure:
(I suggested)
Divide the [0, 1) into 64 equally spanned intervels,by b1=1/64, b2=2/64, ...
Record into B which interval of A that bi belongs to.
If B[i]=B[i+1], then you meet a nice case when the randon number fall into
b[i], b[i+1], otherwise, you maybe need to divide B[i] recursively.
To implement this will be tedious. You are can compute that the average
case for this datastructure will be O(1).
Hope that will be helpful