【问题标题】:"Priority stack" (a hybrid of priority queue and stack) in Python 3?Python 3 中的“优先级堆栈”(优先级队列和堆栈的混合体)?
【发布时间】:2018-12-24 13:03:50
【问题描述】:

我需要 Python 3 中的“优先级堆栈”数据结构(如优先级队列,但更像 LIFE 之类的堆栈)。

我知道queue.PriorityQueue,但找不到像queue.PriorityStack 这样的东西。

【问题讨论】:

  • 优先级堆栈到底能做什么?你试过写一个吗?
  • @PatrickHaugh 我认为,它应该像堆栈,但较高优先级的条目“浮动”在较低优先级的上方
  • 如果“优先级”决定了弹出项目的顺序,那么它与优先级队列有什么不同?
  • @neerad29 对于相同优先级的条目,它应该是 LIFO 而不是 FIFO。这就是差异的本质
  • 感谢您的澄清。您可以将其实现为堆栈的优先级队列。也就是说,优先级队列中的每个元素都是具有相同优先级的项目的堆栈。

标签: python python-3.x stack priority-queue


【解决方案1】:

最简单的方法是创建一个对象,其中包含您要插入的实际数据,以及每次插入时递增的序列号。所以你有一个看起来像这样的对象:

queueObject
    actual_data
    sequence_number
    priority

当你想在优先队列中插入一些东西时,你可以用一个新的序列号来创建这个对象。比如:

function insert(data, priority)
    obj = new queuedObject(data, priority, ++globalSequence)
    pq.insert(obj)

有了它和一个自定义比较器,您就可以使用标准的 Python heapq 对象。只需确保比较器比较优先级和序列号即可。

如果您愿意,可以使用时间戳代替序列号。无论哪种方式,假设您的比较器是正确的,这将确保具有相同优先级的项目按 LIFO 顺序出队。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2019-09-23
    • 2013-02-13
    相关资源
    最近更新 更多