【问题标题】:Comparison Sort - Theoretical比较排序 - 理论
【发布时间】:2012-03-07 09:50:44
【问题描述】:

谁能给我解释一下这个问题的解决方法?

假设你有一个 n 个元素的序列来排序。输入序列 由 n=k 个子序列组成,每个子序列包含 k 个元素。给定的元素 子序列都小于后续子序列中的元素,并且 大于前面子序列中的元素。因此,所有需要 对长度n的整个序列进行排序,就是对n=k中的每一个k个元素进行排序 子序列。显示比较次数的 n lg k 下限 需要解决排序问题的这种变体。

解决方案:

Sn 个元素的序列,这些元素分为 n/k 个子序列,每个子序列的长度为 k 其中任何子序列中的所有元素都大于所有元素 前一个子序列的元素,并且小于后一个子序列的所有元素 子序列。

声明

任何基于比较的排序算法对 S 进行排序都必须花费 (n lg k) 时间 最坏的情况。

证明

首先请注意,正如提示中所指出的,我们无法证明较低的 通过将排序每个子序列的下限相乘来绑定。 那只会证明没有更快的算法对子序列进行排序 独立。这不是我们被要求证明的;我们不能介绍任何 额外的假设。

现在,考虑 S 的任何比较排序的高度为 h 的决策树。因为 每个子序列的元素可以是任意顺序,任意 k! 排列 对应于子序列的最终排序顺序。而且,既然有 n/k 这样的 子序列,每个子序列可以是任意顺序,有 (k!)^n/k 个排列 的 S 可能对应于某些输入顺序的排序。因此,任何决定 用于排序 S 的树必须至少有 (k!)^n/k 个叶子。由于高度为 h 的二叉树 有不超过 2^h 个叶子,我们必须有 2^h ≥ (k!)^(n/k)h ≥ lg((k !)^n/k)。我们 因此获得

     h ≥ lg((k!)^n/k)          -- unbalanced parens - final one added?
       = (n/k) lg(k!)
       ≥ (n/k) lg((k/2)^k/2)
       = (n/2) lg(k/2)

第三行来自 k!,它的 k/2 个最大项至少各有 k/2 个。 (我们在这里隐含假设 k 是偶数。我们可以调整地板和天花板 如果 k 是奇数。)

因为在任何决策树中至少存在一条路径用于对具有长度的 S 进行排序 至少 (n/2) lg(k/2),任何基于比较的排序的最坏情况运行时间 S 的算法是 (n lg k)

有人可以指导我完成代码块中的步骤吗?尤其是当lg k!变成lg((k/2)^k/2)的那一步。

【问题讨论】:

    标签: math sorting comparison theory lower-bound


    【解决方案1】:

    我转载了下面的数学:

    (1)      h ≥ lg(k!n/k)

    (2)      = (n/k) lg(k!)

    (3)      ≥ (n/k) lg((k/2)k/2)

    (4)      = (n/2) lg(k/2)

    让我们来看看这个。从第 (1) 行到第 (2) 行使用对数的性质。类似地,从第 (3) 行到第 (4) 行使用对数的性质和 (n / k)(k / 2) = (n / 2) 的事实。所以技巧步骤是从第 (2) 行到第 (3) 行。

    这里的声明如下:

    对于所有 k,k! ≥ (k / 2)(k / 2)

    直觉上,思路如下。考虑k! = k(k - 1)(k - 2)...(2)(1)。如果您会注意到,这些术语中有一半大于 k / 2,而其中一半小于。如果我们删除所有小于 k 的项,我们会得到(接近)以下内容:

    k! ≥ k(k - 1)(k - 2)...(k / 2)

    现在,我们有 k / 2 ≥ k,所以我们有这个

    k! ≥ k(k - 1)(k - 2)...(k / 2) ≥ (k/2)(k/2)...(k/2)

    这是 (k / 2) 与自身 (k / 2) 次的乘积,因此它等于 (k / 2)k/2。这个数学并不精确,因为奇数和偶数的逻辑有点不同,但基本上使用这个想法,您可以得到早期结果证明的草图。

    总结一下:从(1)到(2)和从(3)到(4)使用对数的性质,从(2)到(3)使用上述结果。

    希望这会有所帮助!

    【讨论】:

    • 我的疑问是从第 2 步到第 3 步。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多