On Tue, Aug 2, 2011 at 9:47 PM, Hector <hector1...@gmail.com> wrote:
> Hello folk,
>
> I was browsing through the code and found that fibonacci numbers are
> calculated by recursion method. So the time complexity is of O(n) and I
> don't expect space complexity be any optimal. It gave me the following
> results.

> There exists a algorithm which can calculate n^th fibonacci number in
> O(ln(n)) times. It only requires to calculate few fibonacci numbers (
> approximately ln(n)/ln(2) ) to calculate F_n. I implemented it and it shows
> the following results.

Just to nitpick: the recursive method has time complexity O(n^2) (the
SymPy version is terrible for large n due to also using O(n^2) memory)
and the fast algorithm has time complexity about O(n^1.6) (with Python
arithmetic).

I'm also not sure why your code is so complex (and it's not entirely
obvious that it's correct). Something like this is much nicer:

def fib(n):
    a, b, p, q = 1, 0, 0, 1
    while n:
        if n % 2:
            a, b = (a+b)*q + a*p, b*p + a*q
            n -= 1
        else:
            t = q*q
            p, q = p*p + t, t + 2*p*q
            n //= 2
    return b

Fredrik

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to