如果我有一个数组{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路分区快速排序。
答案 0 :(得分:1)
只需将元素插入平衡二叉搜索树即可获得所需的复杂性。树的每个节点可以在输入中存储这些值的值和计数,如计数排序。树的大小最多为k
,插入次数为n
,因此总时间为O(n log k)
。二叉搜索树是基于比较的,因此满足要求。
如果以某种方式完全禁止使用计数,我们可以在树的每个节点中存储相等值的链表,如果只是为了嘲笑这个要求。