Algorithm 分拣需要多少次操作?

Algorithm 分拣需要多少次操作?,algorithm,sorting,data-structures,time-complexity,decision-tree,Algorithm,Sorting,Data Structures,Time Complexity,Decision Tree,这是一道2016年入学考试题: 我们有N个不同的未知权重的球,它们的标签是1到N。我们得到了一个双盘天平,想用它来成对称量这些球,并将它们写在纸上,以便对所有这些球进行排序。在最坏的情况下,需要进行多少次称重操作?选择最佳答案 天花板[ n log2 n ] b层[ n log2 n ] 碳氮 − 1. d细胞[ log2n! ] 根据答题纸,正确的答案是:Ceil[ log2n! ] 我的问题是:这个解决方案是如何实现的?这个算法是如何工作的?是否存在伪代码?如果你看一下,你会发现我的答案是,

这是一道2016年入学考试题:

我们有N个不同的未知权重的球,它们的标签是1到N。我们得到了一个双盘天平,想用它来成对称量这些球,并将它们写在纸上,以便对所有这些球进行排序。在最坏的情况下,需要进行多少次称重操作?选择最佳答案

天花板[ n log2 n ] b层[ n log2 n ] 碳氮 − 1. d细胞[ log2n! ]

根据答题纸,正确的答案是:Ceil[ log2n! ]

我的问题是:这个解决方案是如何实现的?这个算法是如何工作的?是否存在伪代码?

如果你看一下,你会发现我的答案是,已知具有良好渐近行为的mergesort的比较总数是

n⌈log2n⌉ − 2.⌈log2n⌉ + 一,

当然⌈log2n⌉ = ⌈n log2 n⌉ 和2⌈log2n⌉ ≥ 对n来说也是如此≥ 1这确认答案a为上限

b是更紧的上界吗?如果你写⌈log2n⌉ = 对于某些0,log2 n+d≤ d<1,则得到 n log2 n+d− 2d n+1=n对数2 n+d− 2d+1=n对数2 n+n d− 2d+1/n 如果你写m:=⌈log2n⌉ n=2m − 最后一个括号变为d− 2d+2d − M 对于m的某些值,显示了对于整数m≥ 1这很可能是零。对于n=1,你得到m=0,这意味着d=0,所以整个括号变为零。所以当你计算出证明的细节时,这将表明b确实是mergesort的上界

那么c呢?n有一个简单的反例 = 3.如果你知道球1比2轻,比3小,这并不能告诉你如何对2和3进行排序。你可以通过将1与2和3进行比较来说明你不可能选择了次优算法,因为问题的对称性。这是一种普遍情况。所以c不是上界。它能是下界吗?当然,甚至可以确认已经订购了e个球,您必须称量每对连续的球,结果是n − 1比较。即使使用最好的算法,你也不能比猜测正确的顺序然后确认你的猜测做得更好

d是一个更紧的下界吗?再次建议它至少和c一样大,除了一个没有整数值的小区域。因此,如果它是一个下界,它会更紧。现在想想一个决策树。每个排序这n个球的算法都可以写成一个二叉决策树:比较给定节点中命名的两个球,然后根据比较的结果,你可以进行下两步中的一步。决策树必须有n个叶子,因为每个排列都必须是一个不同的叶子,这样一旦你到达一个叶子,你就知道确切的排列。而一个有n个叶子的二叉树必须至少有一个深度⌈log2n!⌉. 是的,这也是一个下限

总结所有这些,你有c≤ D≤ x≤ B≤ a、 其中x表示一个优化算法需要对所有球进行排序的比较次数。正如马克·迪金森(Mark Dickinson)所指出的,它给出了一些n和n的显式下界 = 12不等式d 顺便问一下,为了回答你的“这个算法是如何工作的”,为给定的n个排序找到最佳算法是相当容易的,至少在理论上是这样的:为这些n!个排序计算所有可能的决策树,然后选择一个深度最小的。当然,这种方法很快就会变得不切实际


现在我们知道,没有一个答案给出了最佳排序算法的正确计数,哪个答案是“最佳的”?这在很大程度上取决于上下文。在许多应用程序中,知道最坏时间行为的上限比知道下限更有价值,因此b优于d。但显然,创建解决方案表的人有不同的意见,选择d,或者是因为它更接近我假设的最佳值,但没有证明或者因为下限对手头的应用程序更有用。如果你想,你可能会以“最佳”为理由质疑整个问题在问题的范围内没有充分定义。

您是否尝试过找出正确的答案?您给出的解决方案也不是选择之一,尽管我认为是d。我纠正了它。抱歉@modulen有一个可能的答案是正确的:答案d假设总是有一个算法在k比较中排序,其中k是满足2^k>n!的最小整数。但这一点还不清楚,并建议在n=12的情况下需要30次比较,而ceillog2n!在这种情况下是29次。这个界限实际上是不可能实现的。它只是渐近正确的,但如果我们谈论渐近,ceil将是多余的,我们将看到big-O表示法。@user35583
他说:有一个明显的错误的推理链导致了答案d,所以似乎无论是谁提出的问题的预期答案都是d。但无论如何,我不认为这是最好的答案。特别是,a和b可能是真实答案的实际上限,而d则不是。非常好的答案,我认为最坏的情况是什么,选择最佳答案,意味着下限,不是吗?@user355834:我认为只有提出问题的人才能告诉你最佳答案的含义。所以1如果我们认为答案表是正确的,根据下限,d是正确的,或者至少更接近下限,不是吗?你能给我小费吗@马克·迪金森。最坏情况下的决策数=决策树高度,决策树高度>=Ceillog2叶数,这种情况下的叶数为n!。所以对于任何确定性算法,ceillog2n!是该算法最坏情况下称重操作计数的下限。但正如MvG所指出的,最坏情况下的下界并不是一个特别有用的东西:您通常需要一个上界。您确定n ceillog n=ceiln log n吗?一般来说,ceilb!=中欧实验室;例如,2 ceil1.5=4和ceil2*1.5=3。