Tag: memoization

在Scala中有没有一种通用的方法来记忆?

我想记住这个: def fib(n: Int) = if(n <= 1) 1 else fib(n-1) + fib(n-2) println(fib(100)) // times out 所以我写了这个,这令人惊讶的编译和工作(我感到惊讶,因为fib引用本身的声明): case class Memo[A,B](f: A => B) extends (A => B) { private val cache = mutable.Map.empty[A, B] def apply(x: A) = cache getOrElseUpdate (x, f(x)) } val fib: Memo[Int, BigInt] = Memo { case 0 => 0 […]

如何在Clojure中生成记忆recursion函数?

我试图编写一个函数,返回在Clojure memoizedrecursion函数,但我有困难使recursion函数看到自己的memoized绑定。 这是因为没有创buildvar? 另外,为什么我不能使用let创build的本地绑定使用memoize? 这个稍微不寻常的斐波那契序列制造商,从一个特定的数字开始,是我希望我能做的一个例子: (defn make-fibo [y] (memoize (fn fib [x] (if (< x 2) y (+ (fib (- x 1)) (fib (- x 2))))))) (let [f (make-fibo 1)] (f 35)) ;; SLOW, not actually memoized 使用with-local-vars似乎是正确的方法,但它也不适用于我。 我想我不能closuresvars? (defn make-fibo [y] (with-local-vars [fib (fn [x] (if (< x 2) y (+ (@fib (- x […]

用于python 2.7的memoization库

我发现python 3.2在functools库中有memoization作为装饰器。 http://docs.python.org/py3k/library/functools.html#functools.lru_cache 不幸的是,它还没有回到2.7。 有没有什么特定的原因,为什么它不能在2.7? 有没有第三方库提供相同的function,或者我应该写我自己的?

ActiveSupport :: Memoizable引用哪个Ruby memoize模式?

所以在Rails 3.2中,ActiveSupport :: Memoizable已经被弃用了。 该消息显示: DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and will be removed in future releases,simply use Ruby memoization pattern instead. 它指的是“Ruby的memoization模式”(单数)好像有一个模式,我们应该都知道和参考… 我认为他们的意思是这样的: def my_method @my_method ||= # … go get the value end 要么 def my_method return @my_method if defined?(@my_method) @my_method = # … go get the value end 还有什么我错过了吗?

在C ++ 11中编写通用记忆function

寻找一种方法来实现一个通用的通用memoization函数,将采取一个函数,并返回相同的memoized版本? 在Python中寻找像@memo(来自Norving的网站)的装饰器。 def memo(f): table = {} def fmemo(*args): if args not in table: table[args] = f(*args) return table[args] fmemo.memo = table return fmemo 更一般的是,有没有办法用C ++来expressiongenerics和可重用的装饰器,可能使用C ++ 11的新特性?

什么types用于存储在Scala中的内存中的可变数据表?

每次调用一个函数时,如果它是给定的一组参数值的结果还没有记忆,我想把结果放到一个内存表中。 一列是为了存储结果,而另一列是为了存储参数值。 我如何最好地实施这个? 参数是不同的types,包括一些枚举。 在C#中我通常使用DataTable。 在Scala中有相当的吗?

什么时候GHC Haskell自动记忆?

我不明白为什么m1显然是memo而m2不在以下内容: m1 = ((filter odd [1..]) !!) m2 n = ((filter odd [1..]) !! n) 在第一次调用时,m1 10000000需要大约1.5秒,而后续调用的一小部分(大概是caching列表),而m2 10000000总是花费相同的时间(每次调用重build列表)。 任何想法发生了什么? GHC是否和何时将记忆function有什么经验法则? 谢谢。