国产一级簧片-国产一极毛片-国产一国产a一级毛片-国产一国产一有一级毛片-91三级视频-91大学生视频

藍鷗旗下品牌:鷗課學院
全國咨詢電話:13152008057
您的位置: 首頁 > 技術文章 > Python算法:如何解決樓梯臺階問題

Python算法:如何解決樓梯臺階問題

2021-09-14 藍鷗
5715人 瀏覽:

Python算法:如何解決樓梯臺階問題讓我們考慮以下問題。

有一個有N個臺階的樓梯,你一次可以爬1或2個臺階。

給定N,編寫一個函數,返回爬完樓梯的方式數量。步驟的順序很重要。

例如,如果N是4,那么有5種方式:

  • 1,1,1,1

  • 2,1,1

  • 1,2,1

  • 1,1,2

  • 2,2

如果規定的不是一次只能爬1或2步,而是可以使用正整數X集合內的任意數字爬樓梯,那會怎么樣?例如,如果X = {1,3,5},則表示一次爬升1,3或5階樓梯。

python-staircase-problem.jpg

解決方案

從一些測試案例開始總是好的做法。讓我們從小的案例開始,看看能否找到某種規律。

  • N = 1,1種爬樓方式:[1]

  • N = 2,2種爬樓方式:[1,1],[2]

  • N = 3,3種爬樓方式:[1,2],[1,1,1],[2,1]

  • N = 4,5種爬樓方式:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1]

你有沒有注意到什么?請看N = 3時,爬完3階樓梯的方法數量是3,基于N = 1和N = 2。存在什么關系?

爬完N = 3的兩種方法是首先達到N = 1,然后再往上爬2步,或達到N = 2再向上爬1步。所以 f(3) = f(2) + f(1)。

這對N = 4是否成立呢?是的,這也是成立的。因為我們只能在達到第三個臺階然后再爬一步,或者在到了第二個臺階之后再爬兩步這兩種方式爬完4個臺階。所以f(4) = f(3) + f(2)。

所以關系如下: f(n) = f(n – 1) + f(n – 2),且f(1) = 1和f(2) = 2。這就是斐波那契數列。

def fibonacci(n):
    if n <= 1:        return 1
    return fibonacci(n - 1) + fibonacci(n - 2)

當然,這很慢(O(2^N))——我們要做很多重復的計算!通過迭代計算,我們可以更快:

def fibonacci(n):
    a, b = 1, 2
    for _ in range(n - 1):
        a, b = b, a + b    return a

現在,讓我們嘗試概括我們學到的東西,看看是否可以應用到從集合X中取步數這個要求下的爬樓梯。類似的推理告訴我們,如果X = {1,3,5},那么我們的算法應該是f(n) = f(n – 1) + f(n – 3) + f(n – 5)。如果n <0,那么我們應該返回0,因為我們不能爬負數。

def staircase(n, X):
    if n < 0:        return 0
    elif n == 0:        return 1
    elif n in X:        return 1 + sum(staircase(n - x, X) for x in X if x < n)    
    else:        return sum(staircase(n - x, X) for x in X if x < n)

這也很慢(O(|X|^N)),因為也重復計算了。我們可以使用動態編程來加快速度。

每次的輸入cache[i]將包含我們可以用集合X到達臺階i的方法的數量。然后,我們將使用與之前相同的遞歸從零開始構建數組:

def staircase(n, X):
    cache = [0 for _ in range(n + 1)]
    cache[0] = 1
    for i in range(n + 1):
        cache[i] += sum(cache[i - x] for x in X if i - x > 0)
        cache[i] += 1 if i in X else 0
    return cache[-1]

現在時間復雜度為O(N * |X|),空間復雜度為O(N)。


  1. 廣告1
  2. 廣告2
  3. 廣告3
  4. 廣告4
主站蜘蛛池模板: 色青五月天| 手机看a| 亚洲资源在线| 中文字幕无线精品乱码一区| 99精品免费观看| 久久99国产亚洲精品观看| 久久视频免费在线观看| 韩国一级黄色毛片| 国产精品视频免费观看调教网| 国产精品久久久久久福利| 大伊香蕉精品视频在线天堂| 91视频站| 三级网站免费| 国产精品二区三区免费播放心| 2020黄网| 欧美特级大片| 国产综合久久一区二区三区| 九热视频在线观看| 91久久精品| 美女视频黄.免费网址| 波多野结衣一区在线观看| 亚洲精品欧美精品国产精品| 欧美高清在线精品一区二区不卡| 久久er视频| a级片在线免费观看| 亚洲成aⅴ人片在线影院八| 欧美激情第一欧美在线| 国产精品欧美亚洲韩国日本不卡 | 奇米网狠狠干| 国产在线观看一区精品| 真人一级毛片全部免| 欧美成人免费香蕉| 成人毛片视频免费网站观看| 亚洲高清免费视频| 国产91免费在线| 欧美日韩亚洲高清不卡一区二区三区| 国内外成人免费视频| 视频在线观看一区| 一区二区三区久久精品| 久久久久免费精品国产| 99精品热女视频专线|