2014-11-25 8 views

Antwort

12

Sie müssen Ihre eigenen Ordering definieren:

scala> object MinOrder extends Ordering[Int] { 
     def compare(x:Int, y:Int) = y compare x 
     } 
defined object MinOrder 

Dann nutzen Sie, dass, wenn die Heap-Erstellung:

scala> val minHeap = scala.collection.mutable.PriorityQueue.empty(MinOrder) 
minHeap: scala.collection.mutable.PriorityQueue[Int] = PriorityQueue() 

scala> minHeap.ord 
res1: Ordering[Int] = [email protected] 
+6

Ich denke, Sie müssen nicht einmal Ihre eigene Bestellung erstellen, können Sie Methode .reverse einer bereits bestehenden verwenden: Bestellung [Int] .reverse – nachinius

+3

für die Fertigstellung val minHeap = scala.collection.mutable.PriorityQueue.empty (Bestellung [Int]. Reverse) https://codebunk.com/pb/788100787 – nachinius

0

Update August 2016: Sie den Vorschlag chrisokasaki/scads/scala/heapTraits.scala von Chris Okasaki (chrisokasaki) betrachten kann.

Dieser Vorschlag zeigt die "nicht-so-easy" Teil eines Heap:

Proof-of-Concept für typsichere Haufen mit einem Druckvorgang.
Hier bedeutet "typesafe", dass die Schnittstelle niemals zulässt, dass verschiedene Ordnungen innerhalb des gleichen Heaps gemischt werden.
Insbesondere

  • wenn ein Element zu einem bestehenden Haufen hinzu, dass Insertion nicht eine Ordnung verschieden von der beinhalten kann, benutzt, um die bestehenden Haufen zu erstellen, und
  • beim Zusammenführen von zwei existierenden Heaps, die Haufen sind garantiert mit der gleichen Bestellung erstellt worden zu sein.

Siehe its design.

val h1 = LeftistHeap.Min.empty[Int] // an empty min-heap of integers 
Verwandte Themen