这是CLR(算法导论)的问题。问题如下:
假设快速排序的每个级别的分割比例为1-α到α,其中0 <α。 α≤1/ 2是常数。表明递归树中叶子的最小深度约为-lg n /lgα,最大深度约为-lg n / lg(1-α)。 (不要担心整数舍入。)http://integrator-crimea.com/ddu0043.html
我没有得到如何达到这个解决方案。根据链接,他们表明,对于1:9的比率,最大深度是log n / log(10/9)和最小log n / log(10)。那么如何证明上述公式呢?因为我是算法和数据结构课程的新手,请帮助我解决我的错误。
答案 0 :(得分:8)
首先,让我们考虑一下这个简单的问题。假设你有一个数字n和一个分数(在0和1之间)p。你需要将n与p相乘多少次才能得到的数字小于或等于1?
n*p^k <= 1
log(n)+k*log(p) <= 0
log(n) <= -k*log(p)
k => -log(n)/log(p)
现在,让我们考虑一下你的问题。假设您将两个片段中的较短片段发送给左侧孩子,将较长片段发送给右侧孩子。对于最左边的链,通过在上面的等式中用\ alpha代替p来给出长度。对于最右边的链,通过将1- \α替换为p来计算长度。这就是为什么你把这些数字作为答案。
答案 1 :(得分:0)
一般问题和答案
假设每个快速排序级别的拆分均成比例 1-α至α,其中0 <α≤1/ 2为常数。证明递归树中叶子的最小深度约为-lgn /lgα 并且最大深度约为-lgn / lg(1-α)。 (不必担心整数舍入。)
answer:
最小深度遵循的路径始终占据分区的较小部分,即将元素数量乘以α。一次迭代将元素的数量从 n 减少到αn,而 i 迭代将元素的数量减少到(α^ i)n 。在一片叶子上,仅剩一个元素,因此在深度为 m 的最小深度叶子上,我们有(α^ m)n = 1 。因此,αm= 1 / n 。取日志,我们得到 m *lgα= -lgn 或 m = -lgn /lgα。 类似地,最大深度对应于总是占据分区的较大部分,即,每次都保持元素的1-α的一部分。当仅剩一个元素时,即 [(1-α)^ M] n = 1 时,达到最大深度 M 。因此, M = -lgn / lg(1-α)。
所有这些等式都是近似的,因为我们忽略了地板和天花板。