【发布时间】:2018-11-16 08:09:47
【问题描述】:
我正在阅读Algorithms Illuminated: Part 1,问题 5.3 状态:
令 ⍺ 为某个常数,与输入数组长度 n 无关, 严格在 0 到 1/2 之间。假设你达到了大约 从preceding problem 在每个 递归调用 - 所以每当递归调用被赋予一个数组 长度 k,它的两个递归调用中的每一个都传递一个子数组 ⍺k 和 (1 - ⍺)k 之间的长度。多少次连续递归调用 可以在触发基本情况之前发生吗?等效地,哪个级别 算法的递归树可以包含叶子吗?表达你的 答案是一系列可能的数字 d,从最小值到 可能需要的最大递归调用数。 [提示: 将具有不同基数的对数函数联系起来的公式是 log n = ln n]
答案选择:
- -log(n)/log(⍺)
- 0
- -log(n)/log(1 - ⍺)
- -log(n)/log(1 - 2⍺)
我的分析:
如果 ⍺ ⍺,则子数组长度为 (1 - ⍺)n 的分支将具有更大的递归深度。
n / (1 - ⍺)^d = 1
Taking log[base(1 - ⍺)] on both sides
log[base(1 - ⍺)](n) = d
By log rule
d = log(n)/log(1 - ⍺)
最好的情况应该是log(n)/log(⍺),因此答案 1 似乎是正确的。但是,我对减号感到困惑;我不明白递归树的高度怎么可能是负数。另外,我希望有人验证我的分析,如上所示。
有什么想法吗?
【问题讨论】:
标签: algorithm recursion quicksort