如何获得基于O(n log k)时间比较的算法来对k-multiset进行排序?

时间:2018-04-11 14:53:44

标签: algorithm sorting data-structures time-complexity

如果我有一个数组{1,1,1,1,2,2,3,4,4,4,5,5}这是一个排序的5-multiset,大小n = 12,k = 5 (不同的键)。什么是基于O(n log k)时间比较的算法来为类似的未排序数组排序k-multiset? 我想到的方法是3路分区快速排序。

1 个答案:

答案 0 :(得分:1)

只需将元素插入平衡二叉搜索树即可获得所需的复杂性。树的每个节点可以在输入中存储这些值的值和计数,如计数排序。树的大小最多为k,插入次数为n,因此总时间为O(n log k)。二叉搜索树是基于比较的,因此满足要求。

如果以某种方式完全禁止使用计数,我们可以在树的每个节点中存储相等值的链表,如果只是为了嘲笑这个要求。