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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【README1】动态规划之解题思路

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【README1】动态规划之解题思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一:動態規劃介紹
  • 二:如何寫出狀態轉移方程
  • 三:動態規劃框架

一:動態規劃介紹

動態規劃(Dynamic Programming)的問題應該讓大家很是頭疼,因為它只要一出現,就代表了這十有八九是個難題。

動態規劃類的題目有一個特點就是求最值,比如經典的最長遞增子序列,最小編輯距離等等。既然是求最值,那么肯定要有一個比較的過程,不然這個“最”談何而來呢,所以求最值往往意味著你要列出所有的可能情況,然后求最值

列出所有的情況也就意味著窮舉,但是動態規劃的窮舉有些特點,就是你如果暴力窮舉會存在很多很多的重疊子問題,什么是重疊子問題呢?斐波那契數列大家肯定知道,你是否記得在求斐波那契數的時候有一部分數會被反復重復計算多次?


正是因為這樣的重疊子問題,導致采用遞歸的方式完成斐波那契數列這種題,當給定的輸入過大時,將會導致非常大的時間復雜度。所以你們經常聽到過的備忘錄或者dp數組就是為了解決這樣的重疊問題的

然后動態規劃問題一定會具有 “最優子結構” 的性質。什么是最優子結構呢?舉個簡單的例子,你們學校有20個班,并且已經知道每個班最高分,那么我想統計全校成績最高分是多少,這該怎么辦呢?我想在這樣的情況下,你肯定不會遍歷全校同學,你會直接比較每個班的最高分,那么在這里 班里最高的就是全校最高的最優子結構

最后,雖然說動態規劃的核心思想就是窮舉所有情況,但是它的窮舉相比于回溯等算法來說難度還是挺高的,而且情況千變萬化,所以如何正確列出 “狀態轉移方程” 才是關鍵

二:如何寫出狀態轉移方程

再次重復,動態規劃的三要素

  • 重疊子問題
  • 最優子結構
  • 狀態轉移方程
  • 其中能否寫出狀態轉移方程直接決定了你是否可以做出相應的題目

    在寫狀態轉移方程前你一定要思考以下幾點

  • 這個問題的最簡單情況是什么
  • 這個問題有什么狀態
  • 對于每個狀態,可以做出什么選擇使得狀態發生改變
  • 如何定義dp數組來表現狀態和選擇
  • 三:動態規劃框架

    還是那句話,世界上沒有萬能的模板可以解決任何題目這里的框架也不像數學公式那樣代入進去就能有正確答案,所謂的框架其實就是給你一個思考方向,你能知道這一步,下一步應該干嘛,不至于胡思亂想。最最最重要的其實還是你的理解力

    # 初始化base case dp[0][0][...]=base case; # 狀態轉移 for 狀態1 in 狀態1 的所有取值for 狀態 2 in 狀態2的所有取值for...dp[狀態1][狀態2][...]=求最值(選擇1,選擇2...);

    接下文:【README2】動態規劃之斐波那契數列說明重疊子問題如何解決

    總結

    以上是生活随笔為你收集整理的【README1】动态规划之解题思路的全部內容,希望文章能夠幫你解決所遇到的問題。

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