Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

You cannot do Fibonacci in O(1). You can reasonably do it in O(log n), though. Recursive Fibonacci is not O(n^2) either, it’s exponential.


If you have O(1) arbitrary-precision floating-point operations in O(1), you can do Fibonacci in O(1) by Binet's formula. But you don't, so you can't.

Also, by a similar argument, the O(log n) by matrix exponentiation is really O(n log(n)^2 log(log(n))) by Schönhage-Strassen, I think. (The sequence is exponential in n, so the number of digits is O(n).) I may have miscounted the logs.


You’re exactly right, I omitted the Schonhage Strassen just to simplify the point.


https://en.m.wikipedia.org/wiki/Fibonacci_sequence#Closed-fo...

If exponentiation is done using floating-point arithmetic, this is O(1)


If you're fine getting wrong answers after the first 73, sure. Some people have higher standards than that.


Exponentiation is not a constant time operation, and floating points have finite precision.


Exponentiation is constant-time on floats. But as noted by sibling comments, the precision is a problem.


Everything is constant time is your precision is limited. Even the naive, recursive algorithm on integers is constant time if your integer size is limited (it will just be an exponentially big constant). To be able to meaningfully talk about complexity, you need to assume that something is not limited, and once you do that for floats, you’ll find that their exponentiation is no longer constant time.


Floats only have a finite precision.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: