[MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 動態規划II:文本對齊,黑傑克


這節課通過講解動態規划在文本對齊(Text Justification)和黑傑克(Blackjack)上的求解過程,來幫助我們理解動態規划的通用求解的五個步驟:

動態規划求解的五個“簡單”步驟:

  • 定義子問題;
  • 猜部分解決方法;
  • 關聯子問題的解決方法;
  • 遞歸&記錄 或者 構建自下向上的動態規划表;
  • 解決原問題。

 

拿上節課的例子(斐波那契數和最短路徑)來看,如下圖所示:

 

一、文本對齊

首先,我們先看下文本對齊問題,在使用word排版文字的時候,為了排版美觀,我們常會用到文本兩端對齊的功能。文本對齊功能就是將文本拆分成合適的行,讓行內盡可能塞進足夠的詞。微軟MS OFFICE是用貪心算法做的,而Latex是用動態規划算法去做,效率會更高些。在解決文本對齊問題時,我們要定義它的對齊代價,即如果拆分后的文本近似與行寬,則它們的badness近乎於0,但如果不合適,則無窮。如下圖所示:

現在,我們用上面講的五步求解步驟來分析下:

  1. 子問題:自第i個word后的文本后綴words[i:](子問題數量為n);
  2. 猜:從哪開始第2行(猜的選擇小於等於n-i,即不超過后綴words[i:]的長度);
  3. 遞歸;
  4. 拓撲次序:從后往前去安排words;(補充:對一個有向無環圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序,是將G中所有頂點排成一個線性序列,使得圖中任意一對頂點u和v,若邊<u,v>∈E(G),則u在線性序列中出現在v之前。通常,這樣的線性序列稱為滿足拓撲次序(Topological Order)的序列,簡稱拓撲序列。)
  5. 原問題:求起始位置的動態規划。

在上面的過程中會用到父指針,用於記住哪個猜的是最好的,這樣下一個猜測可以直接基於上一個最好的猜測進行。

 

二、黑傑克

黑傑克是一個賭場游戲,如果看過《決勝21點》的話,電影里面的21點撲克玩法就是黑傑克。游戲者的目標是使手中的牌的點數之和不超過 21 點且盡量大。在要牌的過程中,如果所有的牌加起來超過21點,玩家就輸了——叫爆掉(Burst)。假如他沒爆掉,那么你就與他比點數大小,大為贏。拿牌叫HIT,停牌(不再拿牌)叫STAND。玩家叫player,庄家叫dealer。

在黑傑克中的動態規划求解五步為上圖所示,這里不做詳細解釋,因為游戲規則我也不是很懂,后續有空再了解進行補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM