algorithm - SELECT算法分析中的复现

标签 algorithm clrs

在 CLRS (2/e,第 191 页,第 9.3 节) 中,对用于查找数组中第 i 个最小元素的 SELECT 算法的分析如下所示归纳证明:

1.  T(n) <= c celing(n/5) + c(7n/10 + 6) + an
2.       <= cn/5 + c + 7cn/10 + 6c + an
3.       = 9cn/10 + 7c + an
4.       = cn + (-cn/10 + 7c + an)
5.       = cn,  when -cn/10 + 7c + an <= 0

我理解算法,但证明中的两个操作让我有点难过。

问题 1:在第 2 行中,额外的 c 项是从哪里来的(第二项)? c 乘以 (7n/10 + 6) 项得到 7cn/10 + 6c

问题2:在第4行中,我们是如何从9cn/10cn + (-cn/10 ...)? 9系数哪里去了?

这不是作业

谢谢!

最佳答案

  1. 额外的 c 来自 c*celing(n/5) - 考虑 n/5 = 10.2 - 然后 c * ceiling(n/5) = 11c > cn/5 所以我们需要添加一个额外的 c
  2. 9cn/10 = (10-1)cn/10 = 10cn/10 - cn/10 = cn - cn/10 ... = cn + (-cn/10 ...)

关于algorithm - SELECT算法分析中的复现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850008/

相关文章:

algorithm - 归并排序计算复杂度时 "cn"到底是什么?

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

performance - 使用 CLRS 代码和 Robert Sedgewick 代码进行插入排序的运行时间差异

algorithm - 在给定经纬度、日期和时间的情况下查找阴影的方向

algorithm - 在间隔列表中搜索间隔重叠?

algorithm - 使用贪心算法进行优化

algorithm - 分布式数据并行前十算法

algorithm - 是否有一种算法可以在 Http 上工作,用于估计时钟偏差?

algorithm - 使用分而治之的矩阵乘法,时间复杂度

algorithm - 棒材切割的结果计算