Go是否具有开箱即用的优先级队列(我可以从某个模块导入并优先使用python的priority queue)?
我知道优先级队列通常使用堆数据结构实现,并且有一个heap package,它还建议如何使用它来实现队列(在 Example(PriorityQueue)中) ,我可以很容易地抓住并使用它。
我的问题是这是一种推荐的方法,或者有一个我找不到的开箱即用优先级队列包?
答案 0 :(得分:0)
引用维基百科:
优先级队列是一种抽象数据类型,它类似于常规队列或堆栈数据结构,但另外每个元素都具有"优先级"与之相关联。 [...]虽然优先级队列通常使用堆来实现,但它们在概念上与堆不同。优先级队列是一个抽象概念,如"列表"或者"地图&#34 ;;
Go提供了一些在大多数应用程序中使用的基本数据结构,但是将更专业的数据结构实现给程序员。例如,go map可用于轻松实现集合。
您链接的 The example使用切片[]*Item
来表示更抽象的类型heap.Interface
以及(甚至更抽象的)类型PriorityQueue
。 Go是关于组合的,我会说在堆操作方面实现PriorityQueue
是很好的做法。
这使您可以作为程序员进行控制。如果您想要线程安全,请使用PriorityQueue
和sync.Mutex
的组合使其线程安全。如果你想要一个不同于堆的实现,可以使PriorityQueue
成为一个接口,你可以随意实现它。
当然,这是一种权衡。在这种情况下,实现了大约25行代码。如果实施数百行,您可能想要找到已经完成此操作的包。