【发布时间】:2016-02-19 20:33:06
【问题描述】:
有没有一种方法可以在函数中本地化记忆(通过 Memoize.jl)?或者至少删除记忆创建的字典?
澄清:假设我定义了一个函数 f(x, y)。我想为每个新的 y 值创建一个新表。也就是说,给定 y = y0,f( . , y0) 对 x、x-1 等进行自我迭代,但给定一个新的 y = y1,我不需要为 y0 存储旧表,这样内存就可以被释放。我该怎么做?
解决方案:
cachedfib() = begin
global dict = Dict()
global dict2 = Dict()
function _fib(n::Int, a::Int)
if !haskey(dict2, a)
dict2[a] = true
dict = Dict()
end
if haskey(dict, (n, a))
return dict[(n, a)]
elseif n < 2
dict[(0, a)] = 0
dict[(1, a)] = 1
return dict[(n, a)]
else
dict[(n, a)] = a*(_fib(n - 1, a) + _fib(n - 2, a))
return dict[(n, a)]
end
end
end
fib = cachedfib()
fib(10, 1)
fib(10, 2)
现在调用dict 和dict2 并检查字典是否在每次第二个参数更改时刷新。当要存储的参数是整数并且使用Array 而不是Dict 时,您可以获得更好的性能
【问题讨论】:
标签: julia memoization