在1到k范围内的n值的基于比较的排序的下限

时间:2011-07-07 18:51:45

标签: algorithm sorting

当所有值都在1到k的范围内时,我们能否为基于比较的算法的O(n lg n)运行时间做得更好,其中k <1。 Ñ

计算排序和基数排序不是基于比较的算法,不允许使用。通过决策树分析,似乎存在k ^ n个可能的排列。有2 ^ h个叶子,因此应该可以用基于比较的排序算法来解决O(n lg k)时间中的问题。

请不要给出基于非比较的排序算法来解决这个问题,所有排序必须基于两个元素之间的比较。谢谢!

3 个答案:

答案 0 :(得分:8)

可以在您指定的范围内轻松完成。构建k叶的二叉树并在每个叶上包含计数值。如果使用合适的平衡算法,处理每个元素(添加它或计算计数)将是O(lg k),因此所有这些元素都将是O(n lg k)。重新构成列表将是O(n)。

答案 1 :(得分:4)

好的,如果你坚持要比较。

您有 k 元素。因此,保留一个可以容纳所有元素的树结构。

浏览项目列表,每次都将项目添加到树中。如果项目已在树中,则只需递增该节点中的计数器。 (或者如果你想要实际的项目,你可以在每个节点中保留一个列表)

树只有 k 项。

最后,以顺序方式遍历树,并以正确的顺序添加项目(同时添加节点计数器中的数量)。

复杂性: O(nlogk)

答案 2 :(得分:0)

是的,您可以使用大小为k的数组。 (没有比较)

每个单元格我都会包含一个列表 翻看原始数组,将每个项目放在右侧单元格的列表中。

浏览第二个数组,将它们拉出来,按正确的顺序将它们放回去。

<强> O(n)的