【问题标题】:Specific algorithm sorting n elements with m distinct values特定算法对具有 m 个不同值的 n 个元素进行排序
【发布时间】:2012-09-27 17:41:04
【问题描述】:

我正在参加算法分析考试,这是其中之一:

提出一种算法,该算法将 n 个元素的列表(即 是可比的)并在 O(n log m) 时间内对它们进行排序,其中 m 是 输入列表中不同值的数量。

我已经阅读了常见的排序算法,但我真的想不出一个解决方案。

感谢您的帮助

【问题讨论】:

  • 甚至可以在O(n + m) 中解决这个问题,看看计数排序。
  • 也许O(n log m) 是当元素仅具有可比性(不能用作索引)时发生的情况,因此您必须构建一个平衡的 m 元素的 BST,并在叶子处使用计数器,然后执行一个计数排序,而不是一个简单的 m 计数器数组。
  • @harold 我猜你指的是Binary tree sort 使用自平衡二叉搜索树,但我仍然不知道你会如何得到 O(n log m)?
  • @HischT 我的想法更像是 jplot 解释的,只是我解释错了。哦,好吧。

标签: algorithm language-agnostic sorting


【解决方案1】:

您可以在n 元素上构建增强平衡二叉搜索树。存储在每个节点的增强信息将是它的频率。你用n 插入树来构建这个结构,这样做的时间是O(n lg m),因为只有m 节点。然后你按顺序遍历这棵树:访问左子树,然后打印存储在根f 次的元素,其中f 是它的频率(这是增强信息),最后访问右子树。这个遍历需要时间O(n + m)。所以,这个简单程序的运行时间是O(n lg m + n + m) = O(n lg m),因为m <= n

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 2021-08-06
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2015-07-26
    相关资源
    最近更新 更多