Chinaunix首页 | 论坛 | 博客
  • 博客访问: 578616
  • 博文数量: 79
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-04 18:46
文章分类

全部博文(79)

文章存档

2014年(1)

2010年(5)

2009年(8)

2008年(11)

2007年(41)

2006年(13)

我的朋友

分类:

2009-05-05 21:21:23

前几天碰到一道题目,用加减法实现除法。本来是可以用二分法快速逼近的,不过二分法没办法避免递归或者说对数的空间复杂度。而使用 fibonacci 数列则可以不递归,也可以在常数空间复杂度内完成。

不过 fibonacci 数列到底是比 2 的指数慢。但是慢多少呢?这个可以计算出来。fibonacci 数列是 φ(φ=(2^0.5+1)/2≈1.618034)的指数。令 2^n = φ^k,则可求得 k/n = ln2/lnφ,约等于 1.440420。
可以用程序验证:

fib_prev = 1
fib = 1
fib_n = 1

x = 1

for i in range(1, 100000, 1):
    x += x

    while fib < x:
        t = fib
        fib += fib_prev
        fib_prev = t

        fib_n += 1

    if i % 1000 == 0:
        print fib_n * 1.0 / i


参考:
"Binomial heaps, Fibonacci heaps, and applications", Dan Feldman, ~dannyf/ds09/fibo-ds2008.ppt, date: 2009-05-05
阅读(1369) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~