首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中创建最小堆的最简单和最有效的方法是什么?

在Scala中创建最小堆的最简单和最有效的方法是什么?
EN

Stack Overflow用户
提问于 2014-11-25 05:43:31
回答 2查看 8.6K关注 0票数 11
代码语言:javascript
复制
val maxHeap = scala.collection.mutable.PriorityQueue[Int] //Gives MaxHeap

使用排序将PriorityQueue转换为minHeap的最简洁、最有效的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 06:22:24

您必须定义自己的Ordering

代码语言:javascript
复制
scala> object MinOrder extends Ordering[Int] {
         def compare(x:Int, y:Int) = y compare x
       }
defined object MinOrder

然后在创建堆时使用它:

代码语言:javascript
复制
scala> val minHeap = scala.collection.mutable.PriorityQueue.empty(MinOrder)
minHeap: scala.collection.mutable.PriorityQueue[Int] = PriorityQueue()

scala> minHeap.ord
res1: Ordering[Int] = MinOrder$@158ac84e
票数 19
EN

Stack Overflow用户

发布于 2016-08-14 02:24:08

2016年8月更新:您可以考虑chrisokasaki/scads/scala/heapTraits.scala来自)的建议。

这个提议说明了Heap的“不那么容易”的部分。

类型库与合并操作的概念证明。 在这里,"typesafe“意味着接口将永远不允许在同一个堆中混合不同的顺序。 特别地,

  • 当向现有堆添加元素时,该插入不能涉及与创建现有堆的顺序不同的顺序,以及
  • 当合并两个现有堆时,可以保证以相同的顺序创建堆。

它的设计

代码语言:javascript
复制
val h1 = LeftistHeap.Min.empty[Int] // an empty min-heap of integers
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27119557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档