SELECT算法分析中的重现

时间:2012-10-11 23:15:17

标签: algorithm clrs

在CLRS (2/e, page 191, section 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/10转到cn + (-cn/10 ...)的? 9系数在哪里?

这不是作业

谢谢!

2 个答案:

答案 0 :(得分:0)

  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 ...)

答案 1 :(得分:0)

仅为第2行添加更多信息。 我们有ceiling(x) <= x + 1。因为x是下一个整数的圆形。假设m <= x < m+1,然后是ceiling(x) = m+1,x+1 >= m+1,所以我们有ceiling(x) <= x + 1。在这种情况下,c * ceiling(n/5)必须小于或等于c*(n/5+1),然后您才能获得额外的c