algorithm - 随机算法模仿

标签 algorithm random clrs

我正在阅读 CLRS,但我被困在问题 5.1-2 上。

描述仅调用 RANDOM(0,1) 的过程 RANDOM(a,b) 的实现。作为 ab?

此处编写的解决方案提供了 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))。

请告诉我我的解决方案是否正确?

最佳答案

当 b-a+1 不是 2 的幂时会出现问题(如果我正确理解您的代码,但其中缺少一些东西)。

例如考虑数组 [1,2,3]。你有 0.5 的概率去 [1] 和 0.5 的概率去 [2,3]。这意味着最后,选择每个数字的概率是:

  • 1 : 0.5
  • 2 : 0.25
  • 3 : 0.25

即使您将数组划分为 [1,2]/[2,3],概率也不正确,您将拥有

  • 1 : 0.25
  • 2 : 0.5
  • 3 : 0.25

关于algorithm - 随机算法模仿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57625320/

相关文章:

c++ - 在 C++ 中实现 SHA-256

在客户端/服务器之间同步文本的算法

Java - 返回字符串中特定字符的随机索引

algorithm - "word"在分析计算机算法中的意义

c++ - 如何用数组实现紧凑型链表?

algorithm - 尝试算法的媒介?

python - 如何根据列表移动数据框中的值?

python - 如何让 Python 在两个选项之间做出选择?

algorithm - CLRS 对 Rabin Karp 的解释

java - 在给定的数组段中查找最小数