O(1)的費氏數列?公式解就一定是O(1)?

我在撰寫此貼文時,原留言者已經刪留言了,反正就是說「費氏數列有公式解,複雜度就是O(1)

於是一堆國手紛紛出籠,然後就……你看就知道了
原文連結:https://www.facebook.com/groups/pythontw/permalink/10158445814613438/

甚至出現 「πe 都存在月球上,這樣就存取最快了,O(1)!」

(果然用爛留言去釣高手是最快的辦法,O(1)!)


版上的大神在反串什麼?

首先,先來簡單介紹時間複雜度(這只是大眾版的)
要計算最壞的時間複雜度我們會用 big-O

假設n是資料個數 或 計算大小
O(1)是常數複雜度
意思是說:計算量不會與 n 的大小有任何關係,Ex.1+2++N的公式解

是對數複雜度
意思是說:計算量會與 的大小呈現對數關係,Ex.二分搜尋法

是線性複雜度
意思是說:計算量會與 的大小呈現線性(直線)關係

公式解就一定是O(1)?

從1加到N的算式可以寫成這樣

算式就要做一次乘法跟一次除法

不論開多大,開到,算式都只要做一次乘法跟一次除法就好

可是費氏數列有公式解

對,費氏數列有公式解,但是它不是

關鍵就是這個

要算第項,這東西就要乘
要算第項,這東西就要乘
要算第項,這東西就要乘

所以這是線性複雜度
(高手就知道這是,這可以矩陣快速冪)

的意義不是在快,而是資料量大小不論多少,他都是固定的計算次數。

如果今天我設計了一個函數:
,要計算次數是
,要計算次數是
,要計算次數是
不論的大小,計算次數都是

時間複雜度:,因為計算次數跟沒有任何關係

總結

要下什麼總結呢?我只知道原Po在原文被歪樓後就被邊緣了QQ

然後原留言者也刪留言、關臉書了。

如果討論是一直在堅持自己的意見,那就不叫討論了

結果變成競程選手們茶餘飯後的話題

整體過程大概就是這樣啦!如果有錯誤,歡迎在底下留言討論!

2019/02/15 更新

新文朝聖:https://www.facebook.com/groups/pythontw/permalink/10158487765003438/

Buy Me A Coffee

O(1)的費氏數列?公式解就一定是O(1)?
https://blog.yangjerry.tw/fibonacci-is-bigO1/
作者
Jerry Yang
發布於
2019年1月31日
許可協議