美文网首页
用Ruby实现算法--斐波那契数列

用Ruby实现算法--斐波那契数列

作者: spike15 | 来源:发表于2016-08-08 10:32 被阅读0次

定义

F(n) = F(n-1) + F(n-2)

基于定义的算法


def fib(n)
  return n if n == 0 || n == 1
  fib(n-1) + fib(n-2)
end

fibonacci的展开是指数级别的(exponential), 所以基于定义的算法的复杂度也是指数级的 O(2^n)

优化基本定义的算法

当n=5时

fib(5) = fib(4) + fib(3)
fib(4) = fib(3) + fib(2)
fib(3) = fib(2) + fib(1)

可以看到 fib(3)和fib(2)都计算了两次, 也就是说在基于定义的算法会重复计算 n-1, n-2...2 的值

因此, 将这些重复的值缓存起来, 就可以将算法复杂度降低到线性 O(n)


def fib_fast(n, mem = {})
  return n if n == 0 || n == 1
  mem[n] ||= fib_fast(n-1, mem) + fib_fast(n-2, mem)
end


相关文章

网友评论

      本文标题:用Ruby实现算法--斐波那契数列

      本文链接:https://www.haomeiwen.com/subject/lefrsttx.html