排序(排序)5个元素所需的比较次数最少


22

找到排序(排序)五个元素所需的最少数量的比较,并设计一种算法,使用该数量的比较对这些元素进行排序。

解决方案有5个!= 120个可能的结果。因此,用于排序过程的二叉树将至少具有7个级别。事实上, ≥120意味着≥7.但7比较是不够的。排序(排序)五个元素所需的最少比较次数是8。2hh

这是我的实际问题:我确实找到了可以在8次比较中完成的算法,但是如何证明在7次比较中无法完成?


Answers:


27

解决方法是错误的。Demuth [1; 通过2秒 [5.3.1]显示仅使用七个比较就可以对五个值进行排序,即在这种情况下,“信息理论”的下限很严格。

答案是适合的方法,而不是通用算法。这也不是很好。这是大纲:n=5

  1. 排序前两对。

  2. 订购这两个对各自的较大元素。

    称结果为 ; 我们知道和。[a,b,c,d,e]a<b<dc<d

  3. 将插入。e[a,b,d]

  4. 将插入到步骤3的结果中。c

第一步显然需要进行两次比较,第二步只有一次。最后两个步骤各进行两次比较;在这两种情况下,我们都将其插入三元素列表中(对于第4步,请注意,从中我们知道小于当前列表的最后一个元素),然后首先与中间元素进行比较。总共进行了七个比较。c<dc

由于我看不到如何编写“好的”伪代码,因此请参见此处以了解经过测试的(希望是可读的)实现。


  1. 博士 HB Demuth撰写的论文(斯坦福大学)(1956年)

    另请参阅HB Demuth的电子数据排序(1985)

  2. Donald E. Knuth的分类和搜索计算机编程艺术卷。3(第2版,1998年)

5
该测试给出了五分,表明不可能。想知道您的答案会得到多少分:-)(由于测试不会错,可能为零)。
gnasher729

0

基于比较的排序的理论下限是。也就是说,仅使用或比较对项目进行排序,至少需要以2为底的对数,因此操作。log(n!)n<>n!log(5!)6.91

由于和,因此使用二元决策树可以对7个比较中的5个项目进行排序。该树会准确地找出您拥有的120个排列中的哪个,然后进行排序所需的交换。5!=12027=128

它不是漂亮的代码,也不是简短的代码,您可能应该使用代码生成方法来创建决策树并进行交换,而不是手工编码,但是它可以工作。并证明可以对5个项目进行任何可能的排列,从而证明您最多可以对7个比较中的5个项目进行排序。


Ω(nlogn)

最坏情况的理论下限是ceil(log2(n!)),因为正好有n !!排列,如果有k个比较,则需要2 ^ k≥n!。不仅是常数1,这是正确的。
gnasher729

-1

我在想快速排序。您选择恰好是中间元素的元素作为枢轴。将枢轴与剩余的4个项目进行比较,得出两堆要排序的项目。这些堆中的每一个都可以按1个比较进行排序。除非我犯了一个严重的错误,否则5个项目仅在6个比较中就被完全排序了,我认为这是完成这项工作所需的绝对最少的比较。最初的问题是找到排序5个元素最少的比较。


1
如何在一堆比较中对3个元素进行排序?
xskxzr

您在说什么三元素堆?我上面描述的内容在第一遍之后产生了2堆2个元素。
scottyc

我认为您使用随机元素作为枢轴。如何在4个比较中选择中间元素作为枢轴?
xskxzr

我不是那个意思 从上面“因为5!= 120 ....使用二进制决策树,您可以在7个比较中对5个项目进行排序。” 元素的排列数量为120,但是必须有一个分支只有6个比较,因为运行quicksort的随机样本只需要6个即可完成工作。120个排列之一是排序列表。该分支最多可包含4个比较。
scottyc

-2

如果可以测试算法,请在所有数字组合上对其进行测试。如果您有很多数字,请测试许多随机组合。不精确,但是比所有组合都快。

最小
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4

最多
3 ^ 3
4 ^ 4
5 ^ 5

插入中间使用3-6表示4个数字。
将4-5合并为4个数字。
通过Wiki进行的最小比较是4个数字等于5 :) 5等于7。您使用8还是那么多。
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
如果您在比较之前就了解所有内容,则可以进行比较。我的4个数字的平均值是3.96 / 1024所有组合。


2
这不能回答问题。该问题询问如何证明仅使用7个比较就无法进行排序。要使用您的方法,我们必须枚举最多使用7个比较的所有算法。我认为有太多此类算法无法在合理的时间内枚举。无论如何,我看不出这与现有答案相加了什么,现有答案已经为问题提供了完整的答案。我们希望您专注于回答问题,在其中可以添加新内容。
DW

添加图形和提示提示。用于从cmp之前预测cmp值。而他的最小值是7,其他来源是8,真实最小值。是4!4仅适用于asc / desc顺序。Ex1:00000 01234 43210 10000 ... Ex2:插入中间:43210,开始4,得到3,cp 4> 3,得到2,cp 4> 2,cp 3> 3,得到1,cp(mid)3> 1,cp 2> 1,得到0,cp(mid)3> 0,cp 2> 0,cp 1> 0 ... 8 cmp。具体命令或算法可能为7。您可以在我的页面上查找4个数字mlich.zam.slu.cz/js-sort/x-sort-x2.htm,平均为3.96。最小-最大3-6。可以换5并测试他的alg。
彼得·姆利奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.