【问题标题】:Sorting a queue in O(n log n) using at most 2 queue使用最多 2 个队列对 O(n log n) 中的队列进行排序
【发布时间】:2021-11-21 13:21:43
【问题描述】:

我们的任务是使用基本功能(例如入队、出队、窥视、空)在 O(n log n) 中对队列进行排序。此外,我们可能会使用另一个队列来帮助我们。不允许使用其他数据结构。

很难想出解决方案,因为我觉得这可能是对分而治之问题的修改,但我无法使用 4 个基本功能提出解决方案。

是否有可能收到一些提示来解决这个问题?

【问题讨论】:

  • 入队和出队是指基本的推送和弹出?
  • 是的,入队 == 推送和出队 == 弹出
  • 是的。例如,队列 q 包含元素 {1, 2, 3, 4}。 q.push(5), 元素 = {1, 2, 3, 4 ,5} q.pop(), 元素 = {2, 3, 4, 5}
  • 您可以使用队列进行合并排序。
  • 除了 2 个队列之外,是否允许使用任何变量?

标签: algorithm data-structures


【解决方案1】:

给定队列 A 满而队列 B 空,如果 A 由 w 个元素的排序组组成,那么您可以将它们成对合并以产生 2w 个元素的排序组如下:

  1. While(A.length - B.length > w),将 w 个元素​​从 A 中拉出并放入 B。A 和 B 将由 w 元素的排序组组成,加上还剩一些。

  2. 从 A 和 B 中重复拉出 w 个元素​​,将它们合并到 A 的背面,以创建 2w 个元素的排序组。处理完所有元素后停止(注意不要从 A 中提取已处理的元素。您需要记住其原始大小)。 A 将由已排序的 2w 个组组成,而 B 将再次为空。

w=1 重复上述过程(1 组总是排序),然后 w=2, w=4 。 .. w=2n 等,直到整个队列排序完毕。

【讨论】:

  • 这是一个很好的理解归并排序的方法
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多