国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

瀏覽:38日期:2022-06-22 13:51:25

斐波那契數列

首先我們來定義一下斐波那契數列:

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

即數列的第0項:

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

算法一:遞歸

遞歸計算的節點個數是O(2ⁿ)的級別的,效率很低,存在大量的重復計算。

比如:

f(10) = f(9) + f(8)

f(9) = f(8) + f(7) 重復 8

f(8) = f(7) + f(6) 重復 7

時間復雜度是O(2ⁿ),極慢

def F1(n): if n <= 1: return max(n, 0) # 前兩項 return F1(n-1)+F1(n-2) # 遞歸算法二:記憶化搜索

開一個大數組記錄中間結果,如果一個狀態被計算過,則直接查表,否則再遞歸計算。

總共有 n 個狀態,計算每個狀態的復雜度是 O(1),所以時間復雜度是 O(n)。但由于是遞歸計算,遞歸層數太多會爆棧。

res = [None]*100000def F2(n): if n <= 1: return max(n, 0) if res[n]: return res[n] # 如果已存在則直接查找返回結果 res[n] = F2(n-1)+F2(n-2) # 不存在則計算 return res[n]算法三:遞推

開一個大數組,記錄每個數的值。用循環遞推計算。

總共計算 n 個狀態,所以時間復雜度是 O(n)。但需要開一個長度是 n 的數組,內存將成為瓶頸。

def F3(n): if n <= 1: return max(n, 0) res = [0, 1] for i in range(2,n+1):res.append(res[i-1]+res[i-2]) return res[n]算法四:遞歸+滾動變量

比較優秀的一種解法。仔細觀察我們會發現,遞推時我們只需要記錄前兩項的值即可,沒有必要記錄所有值,所以我們可以用滾動變量遞推。

時間復雜度還是 O(n),但空間復雜度變成了O(1)。

def F4(n): if n <= 1: return max(n, 0) fn, f0, f1 = 0, 1, 0 # fn為最終結果,f0為第0項,f1為第一項, for i in range(2, n+1):fn = f0 + f1 # 前兩項和f0, f1 = f1, fn # 遞推變量 return fn算法五:矩陣乘法+快速冪

利用矩陣運算的性質將通項公式變成冪次形式,然后用平方倍增(快速冪)的方法求解第 n 項。

先說通式:

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

利用數學歸納法證明:

這里的a0,a1,a2是對應斐波那契的第幾項

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

證畢。

所以我們想要的得到An,只需要求得Aⁿ,然后取第一行第二個元素即可。

如果只是簡單的從0開始循環求n次方,時間復雜度仍然是O(n),并不比前面的快。我們可以考慮乘方的如下性質,即快速冪:

Python實現求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

這樣只需要 logn 次運算即可得到結果,時間復雜度為 O(logn)

def mul(a, b): # 首先定義二階矩陣乘法運算 c = [[0, 0], [0, 0]] # 定義一個空的二階矩陣,存儲結果 for i in range(2): # rowfor j in range(2): # col for k in range(2): # 新二階矩陣的值計算c[i][j] += a[i][k] * b[k][j] return cdef F5(n): if n <= 1: return max(n, 0) res = [[1, 0], [0, 1]] # 單位矩陣,等價于1 A = [[1, 1], [1, 0]] # A矩陣 while n:if n & 1: res = mul(res, A) # 如果n是奇數,或者直到n=1停止條件A = mul(A, A) # 快速冪n >>= 1 # 整除2,向下取整 return res[0][1]

總的來說不是很難,適合擴展思路。更多關于Python的資料請關注好吧啦網其它相關文章!希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产高清精品自在线看 | 中文字幕乱码中文乱码综合 | 亚洲国产日韩综合久久精品 | 男女男在线精品网站免费观看 | 国产一区三区二区中文在线 | 日韩欧美中文字幕在线视频 | 午夜影院福利社 | 亚洲精品国产免费 | 日本黄网在线观看 | 特黄特色一级特色大片中文 | 全免费a级毛片免费看不卡 全免费毛片在线播放 | 免费一区二区三区久久 | 久久精品女人毛片国产 | 欧美成人综合在线 | 国产成人99精品免费观看 | 欧美成人精品三级网站 | 精品国产精品国产 | 免费中文字幕 | 99久久精品国产一区二区 | 在线视频中文字幕 | 成人免费的性色视频 | 国产精品v在线播放观看 | 免费久久久久 | 免费观看三级毛片 | 欧美特级特黄a大片免费 | 99视频精品全部在线播放 | 久草网在线视频 | 欧美三级欧美一级 | 国产成人福利美女观看视频 | 成人国产片免费 | 午夜性爽快免费视频播放 | 国产只有精品 | 泷泽萝拉亚洲精品中文字幕 | 91九色精品国产 | 国产成人一级 | 国产欧美日韩视频免费61794 | 亚洲精品字幕一区二区三区 | 韩国一级特黄清高免费大片 | 欧美综合在线观看 | 青久草视频 | 亚洲精品不卡久久久久久 |