1. 程式人生 > >幾句話讀懂動態規劃:動態規劃與數學歸納法

幾句話讀懂動態規劃:動態規劃與數學歸納法

昨天晚上 今天凌晨在寫動態規劃的練習題
從兩點折騰到四點一連折騰了兩個小時有看了一會參考書還是沒有搞明白。
整什麼無向圖啊路徑啊一點也不新手友好。
在這裡插入圖片描述
但後來慢慢的看了看題目和原始碼,今天下午突然反應過來:

這不就是數學歸納法麼

跟大家分享一下。

在這裡插入圖片描述
首先,我們來回顧一下數學歸納法:

數學歸納法分為兩種
1.	這兩種的共同點都是已經知道了n=1的時候的情況
2.兩者都知道了中間的資訊
	只不過一種知道的只是k-1的資訊
	另一種知道的是1~k-1的所有資訊		
3.目的都是求n = k時候的函式值

而對應到動態規劃的遞迴寫法

  • 上文中的1對應的正好是邊界條件
  • 上文中的2這對應的正是我們假定已經知道的資訊(都可以通過1中的邊界求出來)
  • 上文中對應的三正是偶們要求的目標

那麼解決動態規劃這類的問題就變成了以下三步:

  • 抓住邊界(作為遞迴邊界,是數學歸納時候的初始狀態)
  • 找到狀態轉移方程(也就是數學歸納法中第k項和第k-1項或者前k-1項的關係
  • 之後進行根據上面兩點寫出遞迴函式,進行適當的優化。

在這裡插入圖片描述
廢話不多說,上例子

  • 例1:完全加括號的矩陣連乘問題

問題描述見我的上一篇部落格:https://blog.csdn.net/weixin_42222917/article/details/83342269


這裡我們發現:

  • 邊界條件是:

  • 當一個括號裡只有一個元素的時候:也就是每一個元素都被單獨用括號括在一起了()這個時候返回0,作為邊界條件

  • n = k 最終的結果(也就是第n項)在這裡的意義就是所有的括號都被開啟之後

  • 而n= k-1則是還差一個括號,所i有的括號都被開啟

  • 而n= k 和 n = k-1的關係則是

在這裡插入圖片描述

例子2:

最長公共子序列問題
參見
https://blog.csdn.net/weixin_42222917/article/details/83342710
在這裡,

邊界條件是:
		當著兩個串中有一個的長度小於零的時候,返回0
n=k
	代表著兩個最長字串的最長公共子序列
n = k-1 ~n=0
	代表了這兩個串的子串的最長公共子序列
而他們之間的關係如下圖

在這裡插入圖片描述