On Tue, Aug 17, 2010 at 3:53 AM, Richard O'Keefe <o...@cs.otago.ac.nz> wrote:
> On Aug 17, 2010, at 12:37 AM, Roel van Dijk wrote:
>>
>> phi = (1 + sqrt 5) / 2
>> fib n = ((phi ** n) - (1 - phi) ** n) / sqrt 5
>>
>> The use of (**) should make the complexity at least O(n). Please
>> correct me if I'm wrong (or sloppy).
>
> Using the classic
>        x**0 = 1
>        x**1 = x
>        x**(2k+0) = (x**2)**k           k > 0
>        x**(2k+1) = (x**2)**k + x       k > 1
> powers of smallish numbers or matrices can be computed in logarithmic
> time.
That is an interesting trick. So there exists an algorithm that
calculates Fibonacci numbers in O(log n) time.

> Using x**n = exp(n*log(x)) and floating point arithmetic,
> the whole thing can be done in O(1) time, and the price of
> some inaccuracy.
It will calculate a subset of the Fibonacci numbers in O(1) time.
Thinking about it I think you can easily calculate subsets of any
function in O(1) time, as long as the function is guaranteed to
terminate. Simply precompute the answers and store them in an array.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to