我正在进行算法分析考试的练习,这是其中之一:
提出一种算法,该算法将n个元素列表作为输入 是可比较的)并在O(n log m)时间内对它们进行排序,其中m是 输入列表中的不同值的数量。
我已经阅读了常见的排序算法,我真的无法提出解决方案。
感谢您的帮助
答案 0 :(得分:8)
您可以在n
元素上构建扩充的平衡二叉搜索树。存储在每个节点的增强信息将是它的频率。您使用n
插入到树中构建此结构,执行此操作的时间为O(n lg m)
,因为只有m
个节点。然后你对这棵树进行有序遍历:访问左子树,然后打印存储在根f
次的元素,其中f
是它的频率(这是增强信息),最后访问正确的子树。此遍历需要时间O(n + m)
。因此,从O(n lg m + n + m) = O(n lg m)
开始,这个简单程序的运行时间为m <= n
。