【发布时间】:2019-08-23 11:20:23
【问题描述】:
我正在阅读 CLRS,但被问题 5.1-2 卡住了。
描述仅调用 RANDOM(0,1) 的过程 RANDOM(a,b) 的实现。作为 a 的函数,您的过程的预期运行时间是多少 em> 和 b?
这里写的解决方案提供了 O(lg(b-a)) 的复杂度。
http://sites.math.rutgers.edu/~ajl213/CLRS/Ch5.pdf
我也写了一个算法,我想要一些关于它的建议。
Random[a,b]
arr[]={a,....,b}
if(high-low <= 1)
if(Random[0,1])
new_arr[high]
return
else
new_arr[low]
return
if(Random[0,1])
new_arr[a+b/2,.......,b]
else
new_arr[a,...........,a+b/2-1]
我的解决方案是基于分而治之的,复杂度也是 O((b-a+1))。
请问我的解决方案正确吗?
【问题讨论】:
-
你会在
codereview.stackexchange.com获得更好的运气。 -
我也去试试。TIA
-
当数组的长度不是 2 的幂时,预期的算法似乎无法正常工作。在这种情况下,某些数字的采样频率会高于其他数字。
-
你能说一个过采样的例子吗?我无法理解。我认为没有过采样,因为我自己使用 mid-1 和 mid 来处理它。@qwertyman
-
这是一个演示分布问题的 dotnetfiddle - dotnetfiddle.net/QlBulo 在非 2 的幂数中,某些值会比其他值更频繁地出现。