Algorithm 一小部分输入的比较排序的下界?

Algorithm 一小部分输入的比较排序的下界?,algorithm,sorting,math,big-o,proof,Algorithm,Sorting,Math,Big O,Proof,有人能给我讲解一下下列问题解的数学部分吗 显示不存在运行时间至少为一半的线性比较排序 是的!长度为n的输入。长度为n的输入的1/n的一小部分呢? 分数(1/(2)^n)怎么样 解决方案: 如果排序在线性时间内为m个输入排列运行,则 决策树的一部分,由m个对应的叶子及其 祖先是线性的。 使用与定理8.1证明中相同的论点证明这是不可能的 对于m=n/2,n/n、 或者n/2n。 我们有两个小时≥ m、 这给了我们h≥ lgm。对于这里给出的所有可能的ms, lgm=Ω(n lgn),因此h=Ω(n

有人能给我讲解一下下列问题解的数学部分吗

显示不存在运行时间至少为一半的线性比较排序 是的!长度为n的输入。长度为n的输入的1/n的一小部分呢? 分数(1/(2)^n)怎么样

解决方案:

如果排序在线性时间内为m个输入排列运行,则 决策树的一部分,由m个对应的叶子及其 祖先是线性的。 使用与定理8.1证明中相同的论点证明这是不可能的 对于m=n/2,n/n、 或者n/2n。 我们有两个小时≥ m、 这给了我们h≥ lgm。对于这里给出的所有可能的ms, lgm=Ω(n lgn),因此h=Ω(n lgn)。 特别是,

    lgn!/2= lg n! − 1 ≥ n lg n − n lg e − 1
    lgn!/n= lg n! − lg n ≥ n lg n − n lg e − lg n
    lgn!/2^n= lg n! − n ≥ n lg n − n lg e − n

这些证明中的每一个都是对更一般的证明的直接修改,即不能有排序速度超过Ω(n logn)的比较排序(您可以看到这个证明)。直觉上,论点如下。为了使排序算法正常工作,它必须能够确定元素的初始顺序。否则,它无法对值进行重新排序以将其按升序排列。给定n个元素,就有n个!这些元素的不同排列,意味着有n!排序算法的不同输入

最初,该算法对输入序列一无所知,并且无法区分任何n!不同的排列。每次算法进行比较时,都会获得更多关于元素排序的信息。具体而言,它可以判断输入置换是在比较结果为真的置换组中还是在比较结果为假的置换组中。您可以将算法可视化为二叉树,其中每个节点对应于算法的某些状态,并且特定节点的(最多)两个子节点指示在比较结果为真或假时将输入的算法状态

为了使排序算法能够正确排序,它必须能够为每个可能的输入输入输入一个唯一的状态,因为否则该算法无法区分两个不同的输入序列,因此会对其中至少一个进行错误排序。这意味着,如果考虑树中叶子节点的数量(算法已完成比较的部分,并且将要排序),则每个输入排列必须至少有一个叶节点。在一般证明中,有n!排列,所以必须至少有n个!叶节点。在二叉树中,拥有k个叶节点的唯一方法是高度至少为Ω(logk),这意味着您必须进行至少Ω(logk)的比较。因此,根据斯特林近似,一般排序下界为Ω(logn!)=Ω(n logn)

在你考虑的情况下,我们将自己限制在这些可能的排列的子集。例如,假设我们希望能够对n进行排序!/排列中的2个。这意味着我们的树的高度必须至少为lg(n!/2)=lg n!-1=Ω(n对数n)。因此。您无法在时间O(n)中排序,因为没有线性函数以Ω(n logn)的速率增长。第二部分,看看你是否能得到n!/n按线性时间排序,决策树也必须具有高度lg(n!/n)=lg n!-lg n=Ω(n logn),因此不能在O(n)比较中排序。对于最后一个,我们有lg n!/2n=lg n!-n=Ω(n logn),所以同样不能在O(n)时间内排序

但是,由于lg2n=n=O(n),您可以在线性时间内对2n个置换进行排序


希望这有帮助

有一个问题向我提出:当c是常数时,1/c怎么样?我们能说1/c*n吗!相关的: