在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系数在哪里?
这不是作业
谢谢!
答案 0 :(得分:0)
c
来自c*celing(n/5)
- 考虑n/5 = 10.2
- 然后c * ceiling(n/5) = 11c > cn/5
,因此我们需要额外添加c
。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
。