Я пытаюсь написать простую реализацию терпеливой сортировки, используя Scala.
Мне удалось правильно создать начальные стопки; однако мое использование приоритетной очереди для упрощения генерации выходного списка вызывает у меня головную боль.
Похоже, что моя реализация заказа либо неверна, либо игнорируется:
def PileOrdering = new Ordering[Stack[A]] {
def compare(a : Stack[A], b : Stack[A]) = a.head.compare(b.head)
}
// Use a priority queue, ordering on stack heads (smallest stack elems)
val pq = new PriorityQueue[Stack[A]]()(PileOrdering)
// piles is a List[Stack[A]]
pq ++= piles
// Extract an ordered list of elements
val returnVal = (0 until count) map (_ => {
val smallestList = pq.dequeue
val smallestVal = smallestList.pop
if (smallestList.length > 0){
pq.enqueue(smallestList)
}
smallestVal
})
PriorityQueue, по-видимому, упорядочена по размеру стека (я представляю порядок стека по умолчанию), а не по моему порядку.
Что-то выскакивает как явно неправильное? Любая помощь будет принята с благодарностью.
Спасибо,
Редактировать: я не пояснил в исходном вопросе: я использую Scala 2.8.1.
Редактировать2: я ожидал, что returnVal будет содержать наименьший -к наибольшему порядку элементов, найденному путем взятия наименьшего элемента из головок всех стеков. Даниэль указал, что мой порядок будет упорядочивать мои стеки от самого большого к самому маленькому (сами стеки уже упорядочены правильно, с наименьшим элементом сверху), что, по-видимому, является проблемой.
A
иcount
неизвестны. - person Daniel C. Sobral   schedule 29.11.2010returnVal
, иначе будет сложно понять, неправильный ваш код или нет. :-) - person Daniel C. Sobral   schedule 29.11.2010