【发布时间】:2014-09-21 20:22:44
【问题描述】:
我需要订购一组信封。每个信封都用它的高度和宽度来描述。如果信封 1 可以插入信封 2,则信封 1 小于信封 2。如果信封1无法插入信封2,反之亦然,则无法进行比较。
如何在 scala 中订购这些信封?我在互联网上找不到任何相关信息。
这是我的一些代码:
object EnvelopeOrdering extends PartialOrdering[(Int, Int)] {
override def tryCompare(x: (Int, Int), y: (Int, Int)): Option[Int] = {
if (x._1 < y._1 && x._2 < y._2) return Some(1)
if (x._1 > y._1 && x._2 > y._2) return Some(-1)
if (x._1 == y._1 && x._2 == y._2) return Some(0)
None
}
override def lteq(x: (Int, Int), y: (Int, Int)): Boolean = x._1 < y._1 && x._2 < y._2
}
【问题讨论】:
-
这不是一个简单的排序问题。这个问题可能是相关的:math.stackexchange.com/questions/55891/…
-
gist.github.com/ThiporKong/4399695 之类的东西应该可以帮助您入门。当然,您首先有一个 O(N^2) 步骤来获取索引对,但如果事实证明有必要,您可以随时进行优化。
-
Box stacking problem的可能重复
-
为什么不把部分顺序扩展到不矛盾的全顺序呢?除非您要求排序稳定(这是经典排序问题中的一项重要要求),否则无需使用“部分排序感知”的自定义排序算法即可获得结果。
-
我不明白你想做什么。能举个例子吗?
标签: algorithm scala sorting partial-ordering