日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法设计:动态规划问题

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法设计:动态规划问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

適合采用動態規劃(dynamic programming)方法的最優化問題中的兩個要素:最優子結構和重疊子問題。

最優子結構:

用動態規劃求解最優化問題的第一步就是刻畫最優解的結構,如果一個問題的解結構包含其子問題的最優解,就稱此問題具有最優子結構性質。因此,某個問題是否適合應用動態規劃算法,它是否具有最優子結構性質是一個很好的線索。使用動態規劃算法時,用子問題的最優解來構造原問題的最優解。因此必須考查最優解中用到的所有子問題。

重疊子問題:

在斐波拉契數列結構圖中,可以看到大量的重疊子問題,比如說在求fib(6)的時候,fib(2)被調用了5次。如果使用遞歸算法的時候會反復的求解相同的子問題,不停的調用函數,而不是生成新的子問題。如果遞歸算法反復求解相同的子問題,就稱為具有重疊子問題(overlapping subproblems)性質。在動態規劃算法中使用數組來保存子問題的解,這樣子問題多次求解的時候可以直接查表不用調用函數遞歸。
步驟:

  • 動態規劃方法的第一個步驟是描述最優解的結構的特征。
  • 第二個步驟是利用子問題的最優解來遞歸定義一個最優解的值。
  • 第三個步驟計算最優解
  • 第四個步驟構造最優解
  • 一、eg1:dp方法求解硬幣找零問題

    我們的動態編程解決方案將從找零一分錢開始,并系統地找到我們需要的找零額。這保證我們在算法的每一步,已經知道為任何更小的數量進行找零所需的最小硬幣數量。

    用一個動態規劃算法來解決我們的找零問題。?dpMakeChange?有三個參數:一個有效硬幣值的列表,我們要求的找零額,以及一個包含每個值所需最小硬幣數量的列表。 當函數完成時,minCoins?將包含從 0 到找零值的所有值的解

    def dpMakeChange(coinValueList,change,minCoins):for cents in range(change+1):coinCount = centsfor j in [c for c in coinValueList if c <= cents]:if minCoins[cents-j] + 1 < coinCount:coinCount = minCoins[cents-j]+1minCoins[cents] = coinCountreturn minCoins[change]

    總結

    以上是生活随笔為你收集整理的算法设计:动态规划问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。