假设我有n
个整数。对于每个查询,我可以选择两个并进行比较。准确地说,我需要多少个查询才能将它们从最小到最大排序?
当然,答案将是O(n log n)
的顺序。但我想要一个确切的答案。
让a(n)
成为所需的数字查询。然后很明显a(n) >= log_2(n!)
(或者更确切地说,是大于那个的最小整数)。是否发生了平等? n<=5
似乎也是如此,但我不太确定。
编辑:我想出的一种排序算法如下:很明显,如果您知道a_1, ..., a_i
的顺序,并且想了解a_{i+1}
适合的位置,则需要log_2(i+1)
次查询。然后,您可以先对a_1, a_2
进行排序,然后添加a_3
(将log_2(3)
次查询),然后添加a_4
(将log_2(4)
次查询),. ..,然后添加a_n
(将log_2(n)
次查询)。总共需要<= log_2(n!)+n
次查询。顺便说一下,有没有人知道这种排序算法的名称?
答案 0 :(得分:0)
基于比较的排序的下界有一个完善的理论结果,它是Omega(n lg n)
。使用决策树证明是非常简单的。这里有一些解释的链接,虽然你可以通过简单搜索“排序的下限”在谷歌上找到更多的理论工作:
http://en.wikipedia.org/wiki/Comparison_sort#Lower_bound_for_the_average_number_of_comparisons