当前位置: 代码迷 >> 综合 >> Scala 编程中分而治之的思想 (divide and conquer)
  详细解决方案

Scala 编程中分而治之的思想 (divide and conquer)

热度:87   发布时间:2023-12-12 11:37:28.0

一种思想:

把系统分成最简单的状态,处理它,迭代它

两种套路:

1 使用head tail:

思想即使:

情况1:如果当前list为空,怎么处理

情况2:如果当前情况为非空,即有head和非空队列tail。这种情况处理  是使用递归调用tail的结果(假定除了head以外其他的数据都处理好了) 和 head进行某种操作。


2 使用merge

思想:

1 把List分为两个部分,first ,second

2 fist进行某种操作,second行某种操作

3 把两者merge在一起


代码胜过雄辩,比如对于一个List进行排序:

思想1:

def isort(xs: List[Int]): List[Int] = xs match {
case List() => List()
case x :: xs1 => insert(x, isort(xs1))
}
def insert(x: Int, xs: List[Int]): List[Int] = xs match {
case List() => List(x)
case y :: ys => if (x <= y) x :: xs
else y :: insert(x, ys)
}


思想2:

def msort[T](less: (T, T) => Boolean)
(xs: List[T]): List[T] = {
def merge(xs: List[T], ys: List[T]): List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xs1, y :: ys1) =>
if (less(x, y)) x :: merge(xs1, ys)
else y :: merge(xs, ys1)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n
merge(msort(less)(ys), msort(less)(zs))
}
}


注明:

使用了curry函数式编程思想(多参数),非常简单实现依赖注入,比如依赖比较规则




  相关解决方案