我尝试使用 Scala Futures 编写并行合并排序。但是,当我在 Eclipse 的解释器中对大小为 100 000 的列表运行我的算法时,一切都变得非常缓慢,最终我收到一条错误消息,告诉我内存不足。当我从命令行在解释器中运行它时,它已经挂在大小为 10 000 的列表中(但现在我没有收到错误消息)。
为什么会发生这种情况,有解决办法吗?
import scala.actors.Future
import scala.actors.Futures._
object MergeSort{
def sort[T <% Ordered[T]](toBeSorted :List[T]) :List[T] = toBeSorted match{
case Nil => Nil
case List(x) => List(x)
case someList =>
val (left, right) = someList splitAt someList.length/2
val sortedLeft = future { sort(left) }
val sortedRight = sort(right)
merge(sortedLeft(), sortedRight, Nil)
}
def merge[T <% Ordered[T]](a :List[T], b :List[T], Ack: List[T]) :List[T] = (a, b) match {
case (Nil, ys) => Ack.reverse ++ ys
case (xs, Nil) => Ack.reverse ++ xs
case (x::xs, y::ys) if x < y => merge(xs, y::ys, x::Ack)
case (x::xs, y::ys) => merge(x::xs, ys, y::Ack)
}
}