Math 比较排序-理论
有人能给我解释一下这个问题的解决办法吗 假设给您一个由n个元素组成的排序序列。输入序列 由n=k个子序列组成,每个子序列包含k个元素。给定元素中的元素 子序列都小于后续子序列中的元素,并且 大于前面子序列中的元素。因此,需要做的就是 排序长度n的整个序列是对每个n=k中的k个元素进行排序 子序列。显示比较次数的n lg k下限 需要解决排序问题的这种变体 解决方案: 设S为n个元素的序列,被划分为n/k个子序列,每个子序列的长度为k 其中,任何子序列中的所有元素都大于所有元素 前一子序列的,小于后一子序列的所有元素的 随后 主张 任何基于比较的排序算法对S进行排序都必须在 最坏的情况 证明 首先请注意,正如提示中指出的,我们无法证明较低的 通过将排序每个子序列的下界相乘来绑定。 这只能证明没有更快的算法对子序列进行排序 独立地。这不是我们要证明的;我们不能提出任何建议 额外的假设Math 比较排序-理论,math,sorting,comparison,theory,lower-bound,Math,Sorting,Comparison,Theory,Lower Bound,有人能给我解释一下这个问题的解决办法吗 假设给您一个由n个元素组成的排序序列。输入序列 由n=k个子序列组成,每个子序列包含k个元素。给定元素中的元素 子序列都小于后续子序列中的元素,并且 大于前面子序列中的元素。因此,需要做的就是 排序长度n的整个序列是对每个n=k中的k个元素进行排序 子序列。显示比较次数的n lg k下限 需要解决排序问题的这种变体 解决方案: 设S为n个元素的序列,被划分为n/k个子序列,每个子序列的长度为k 其中,任何子序列中的所有元素都大于所有元素 前一子序列的,小于
现在,考虑SH的任何比较排序的高度H的决策树。 每个子序列的元素可以是任意顺序,任意k!排列 对应于子序列的最终排序顺序。而且,因为有n/k这样的 子序列,每个子序列可以是任意顺序,有(k!)^n/k个置换 可能与某些输入顺序的排序相对应的。因此,任何决定 用于排序的树必须至少有(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是(nlgk)的算法
有人能带我完成代码块中的步骤吗?尤其是当lg k!变成lg((k/2)^k/2)。我已将数学结果转载如下: (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)使用上述结果
希望这有帮助 我已将数学重印如下: (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)使用上述结果
希望这有帮助 我的怀疑是从第二步到第三步。谢谢你的帮助!我的怀疑是从第二步到第三步。谢谢你的帮助!