0
こんにちは私は、メモ帳でScalaのナップザックソリューションを実装しようとしています。ここでメモ化メモ帳とScalaのナップザックソリューション
ここ// knapsack = maxWeight: Int, weights: List[Int], values: List[Int]
val knapsack: ((Int, List[Int], List[Int]) => Int) = Memo {
case (0, _, _) | (_, Nil, _) | (_, _, Nil) => 0
case (weight, headWt :: tailWts, _ :: tailVals) if headWt > weight =>
knapsack(weight, tailWts, tailVals)
case (weight, headWt :: tailWts, headVal :: tailVals) => math.max(
headVal+knapsack(weight-headWt, tailWts, tailVals),
knapsack(weight-headWt, tailWts, tailVals))
}
println(knapsack(50, weights.sortBy(-_), values.sortBy(-_)))
のないコードは、メモの定義です:
case class Memo[A,B](f: A=>B) extends mutable.HashMap[A,B]{
override def apply(a: A):B = {
getOrElseUpdate(a, f(a))
}
}
しかし、私はコンパイル時エラーを取得しています:
Type mismatch, expected: List[Int], actual: List[Any]
私はメモを削除した場合、それは動作します良い。
ありがとうございました。
おかげであなたの助けのためにたくさんのSergGrを期待生成します。なぜ起こったのか、何の手がかりもありませんでした。そのような難しいことは、コンパイラのエラーメッセージから取得することです。 – aks