【发布时间】:2016-04-20 18:51:29
【问题描述】:
我正在尝试解决以下问题(来自 Jeff Erikson 教授的笔记):给定下面的算法,它接受一个未排序的数组 A 并返回数组中的第 k 个最小元素(假设 Partition 做了它的名称暗示通过给定由 Random 返回的枢轴(假定在线性时间内返回 1 和 n 之间的均匀随机整数)并返回枢轴的新索引)的标准快速排序方法,我们将找到 exact 该算法比较输入数组中第 i 个最小元素和第 j 个最小元素的概率。
QuickSelect(A[1..n],k):
r <-- Partition(A[1..n],Random(n))
if k < r:
return QuickSelect(A[1..r-1],k)
else if k > r:
return QuickSelect(A[r+1..n],k-r)
else:
return A[k]
现在,我可以看到第一个 if 语句为真的概率为 (n-k)/n,第二个块为真的概率为 (k-1)/n,执行 else 语句的概率是 1/n。我也知道(假设 i
任何提示和/或建议将不胜感激。这是的家庭作业,所以我宁愿没有完整的解决方案给我,这样我就可以真正学到一点。提前致谢!
【问题讨论】:
-
这是通过模拟找到近似答案的问题之一。
-
@DavidEisenstat 这是否暗示我实际上实现了该算法并使用各种输入运行它几次,它会让我了解该函数应该是什么?
-
是的,就是这样。
标签: arrays algorithm probability analysis