我在Scala中有一个memoized分而治之算法:并行递归记忆化斯卡拉
val cache = mutable.Map[Int, BigInt]()
cache(1) = BigInt(0)
def dp(n: Int): BigInt = cache.getOrElseUpdate(n, {
partitions(n).map(i => dp(i)).min
// partitions is non-recursive function that given an Int returns a list[Int]
})
然而,我想这段代码转换到使用并行,同时通过改变partitions(n)
到partitions(n).par
它返回一个平行的列表,而不是递归。但是现在,我在cache
中处于不良状态,因为该地图不是并发的。当我将cache
与SynchronizedMap
实例化时,所有我的fork都加入了线程块,因为所有SynchronizedMap
都会在getOrElseUpdate
方法调用周围放置一个巨大的块。那么什么是斯卡拉成语做一个递归的鸿沟和征服算法并行与memoization?
CacheBuilder是,如果我是在Java编码,我会使用的第一件事。作为一名斯卡拉成瘾者,是否有任何适合斯卡拉的图书馆或成语来解决这个问题?如果不是,我会很快接受你的答案。谢谢! – pathikrit
我唯一知道的就是斯卡拉斯的“备忘录”类型。我相应地编辑了我的答案。 – 2013-01-24 08:58:51