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

标签 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 向分区快速排序。

最佳答案

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

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

关于algorithm - 如何获得基于 O(n log k) 时间比较的算法来对 k-multiset 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778332/

相关文章:

c++ - 面对cpp中排序功能的问题

java - 快速排序 - 相等检查的原因

algorithm - 查找字符串的排序等级

c++ - 范围到值组的高效映射

data-structures - 如何使用 HashSet 实现 HashTable

c++ - 在 C++ 中使用 getline 和 >> 运算符检查输入文件

在球体上计算 Voronoi 图的算法?

algorithm - 求两个不相交子数组的最大和

用于嵌入式系统的 C++ 数据容器

algorithm - 是否有替代固定大小数组的坐标系?