精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:換人!他連動態規劃的一個模型三個特征都不懂

開發 前端
什么樣的問題適合用動態規劃實現呢,我們在一文學會動態規劃解題技巧中曾經提到,只要問題符合「遞歸+重復」,則基本斷定可以用動態規劃來解題。

 前言

之前我們簡單總結了一下動態規劃的解題套路,不少人反饋受益頗豐(如果是動態規劃初學者,強烈建議看看!)不過有位讀者說雖然動態規劃的解題套路是看懂了,不過一些動態規劃的主要特征,如無后效性沒有提到,所以今天我們就簡單以一道題再來溫習一下動態規劃的解題套路及其主要特征。

[[330327]]

什么樣的問題適合用動態規劃實現呢,我們在一文學會動態規劃解題技巧中曾經提到,只要問題符合「遞歸+重復」,則基本斷定可以用動態規劃來解題。簡單來說能用動態規劃解決的問題符合「一個模型三個特征」

一個模型: 多階段決策最優解模型,多階段意味著問題可以分解為多個階段進行求解,每個階段通常都有一個最優解,每個階段的最優解通過遞推公式可以求得下個階段的最優解,求得了每個階段的最優解,自然而然全局最優解也就解決了

三個特征

  1. 最優子結構:上文一個模型中所述每個階段的最優解即最優子結構
  2. 無后效性:當前階段的最優解只與它上個階段的最優解有關,它不 Care 上個階段的最優解是怎么得來的,之后階段的決策(最優解)也不會影響之前階段問題的求解
  3. 重復子問題: 如果問題采用自頂向下的方式解決,通常都會有重復子問題的,即我們所說的「遞歸+重復」,此時我們可以采用自下而上的套路來求解問題

如果大家對上文中的「一個模型三個特征」沒感覺也沒關系,我們可以套用如下動態規劃解題模板

  1. 判斷是否可用遞歸來解,可以的話進入步驟 2
  2. 分析在遞歸的過程中是否存在大量的重復子問題
  3. 采用備忘錄的方式來存子問題的解以避免大量的重復計算(剪枝)
  4. 改用自底向上的方式來遞推,即動態規劃

接下來我們先通過一道比較有意思的習題來套用以上解題模板來解題,然后再來解釋一下動態規劃的「一個模型三個特征」

問題定義

有如下 8 x 8 格子,機器人需要從開始位置走到結束位置,每次只能朝右或朝下走,粉色格子為障礙物,機器人不能穿過,問機器人從開始位置走到結束位置最多共有多少種走法?

 

這題如果用動態規劃可能一時半會兒看不出來,那我們就用窮舉法來看看怎么解,所謂窮舉法就是把機器人所有的路徑全部算出來,然后再相加

用窮舉法怎么做呢,對于機器人起始位置來說,它可以選擇向下或向右,所以它到終點的路徑數為其右邊格子到終點的路徑數與其下邊格子到終點的路徑數之和,偽代碼如下

  1. paths(start, end) = paths(start下方格子, end) + paths(start右邊格子, end

 

對于每個格子來說,它也可以選擇向左或向右,由于可以得出對于每個選中的格子,它都符合以下遞推公式:

  1. paths(機器人所在格子, end) = paths(機器人所在格子下方格子, end) + paths(機器人所在格子右方格子, end

表示成代碼如下:

  1. private int countPaths(boolean[][] grid, int row, int col) { 
  2.     if(isObstacle(grid, row, col)) return 0; 
  3.         if (isAtEnd(grid, row, col)) return 1; 
  4.         return countPaths(grid, row+1, col) + countPath(grid, row, col+1) 

看出規律了嗎,這其實是一個遞歸,那么如果用遞歸會有什么問題呢?

以上圖起始點出發為例,如果選擇了向右或向下,則右或下格子也可以選擇向右或向下,如果右格子選擇向下,下格子選擇向右,則這兩條路徑都經過了相同的格子,這兩條路徑相交了!也就是出現了重復子問題!

 

每次機器人可以選擇向右或向下走,如果我們把它抽象成一顆二叉樹,則結構如下 :

 

注:藍色代表相同的方塊

由于是一顆二叉樹,時間復雜度顯然是 O(2^n),指數級別!原因當然是由于解題中存在大量的重復子問題(圖中藍色代表相同方塊,即重復子問題),為了減少重復子問題,我們需要用備忘錄來保存中間的結果 (即減枝),這樣能讓時間復雜度大幅度減少,如下

 

經過「遞歸+備忘錄」后其實時間復雜度和動態規劃已經差不多了,不過我們之前一直強調盡量不要用遞歸的方式解題,因為遞歸層級過深,很可能導致棧溢出。

所以接下來我們改用動態規劃的方式看看該如何解決。

遞歸是采用自頂向下的方式來解決問題,對應到本題,就是從起點出發,推導出到終點的所有路徑和,而動態規劃則是自下而上,即從終點出發推導出到起點的所有路徑和。對于最右邊和最底邊的格子來說,由于它們只能向下或向右走,所以分別在它們的位置上標 1,代表從這些格子出發只有一種路徑,如下圖示:

 

最右和最下邊的格子的路徑數都填上了,其它格子就簡單了,顯然對于其它格子來說,

  1. paths(格子, end) = paths(下邊的格子, end) + paths(右邊的格子, end

注:如果格子為障礙物,則其到終點的路徑數為 0

也就是說每個格子到終點的路徑和等于其右邊格子到終點的路徑數與其下邊格子到終點的路徑數之和,這樣從右到左,從下到上根據以上遞推公式依次填上每個格子的路徑數即可,如下

 

顯然從起點到終點的路徑和為 10 + 17 = 27。時間復雜度是多少呢,從下到上,從右到左,兩層循環,顯然是 O(n^2),比起最開始用遞歸的 O(2^n) 大幅度提升了。

知道解題思路,用代碼實現相信不是什么大問題,我們以一個二維數組 grid[row][column] 來表示圖中的格子, 如果格子為障礙物,則其元素值初始化為 -1,其它格子元素初始化為 0,這樣我們只要做個兩層循環即可求得最終的解,代碼如下,注釋很詳盡,相信大家應該能看懂

  1. public class Solution { 
  2.  
  3.     /** 
  4.      * 初始化格子, -1 代表格子為障礙物 
  5.      */ 
  6.     private static final int GRIDS[][] = { 
  7.             {0,0,0,0,0,0,0,0}, 
  8.             {0,0,-1,0,0,0,-1,0}, 
  9.             {0,0,0,0,-1,0,0,0}, 
  10.             {-1,0,-1,0,0,-1,0,0}, 
  11.             {0,0,-1,0,0,0,0,0}, 
  12.             {0,0,0,-1,-1,0,-1,0}, 
  13.             {0,-1,0,0,0,-1,0,0}, 
  14.             {0,0,0,0,0,0,0,0} 
  15.     }; 
  16.  
  17.    static private int sumOfPaths() { 
  18.  
  19.        // 格子為 8 x 8 
  20.        int N = 8; 
  21.        /** 
  22.         * 初始化最右邊的格子 
  23.         */ 
  24.        for (int j = 0; j < N; j++) { 
  25.            GRIDS[N-1][j] = 1; 
  26.        } 
  27.  
  28.        /** 
  29.         * 初始化最底部的格子 
  30.         */ 
  31.        for (int i = 0; i < N; i++) { 
  32.            GRIDS[i][N-1] = 1; 
  33.        } 
  34.  
  35.        /** 
  36.         * 從右到左,從下到上填滿每個格子的值,由于最右和最底部的格子都初始化了, 
  37.         * 所以從倒數第二行,倒數第二列開始遍歷 
  38.         */ 
  39.        for (int i = N - 2; i >= 0; i--) { 
  40.            for (int j = N - 2; j >= 0; j--) { 
  41.                // 說明是障礙物,無需計算 
  42.                if (GRIDS[i][j] == -1) { 
  43.                    continue
  44.                } 
  45.  
  46.                /** 
  47.                 * 每個要計算的格子到終點的路徑和等于其右邊格子到終點的路徑數與其下邊格子到終點的路徑數之和 
  48.                 * 如果右邊或下邊的格子為障礙物,則其到終點的路徑數設置為 0 
  49.                 */ 
  50.                int rightPath = GRIDS[i+1][j] == -1 ? 0 : GRIDS[i+1][j]; 
  51.                int bottomPath = GRIDS[i][j+1] == -1 ? 0 : GRIDS[i][j+1]; 
  52.                GRIDS[i][j] = rightPath + bottomPath; 
  53.            } 
  54.        } 
  55.  
  56.        /** 
  57.         * 遍歷完之后起點格子對應的值即為最終所求的解 
  58.         */ 
  59.        return GRIDS[0][0]; 
  60.    } 
  61.  
  62.     public static void main(String[] args) { 
  63.         int result = Solution.sumOfPaths(); 
  64.         System.out.println("result = " + result); 
  65.     } 
  66. }     

可以看到,采用自底向上的動態規劃解法整體思路還是比較清晰且高效的。

問題解決了,現在我們回頭來看下動態規劃的一個模型和三個特征該如何理解

一個模型: 即多階段決策最優解模型,首先來看多階段,起始位置走向終點,第一階段可以看作是從起點向右或向下走,第一階段選中格子后,第二階段就要從第一階段選中的格子往右或往下走。。。,可以看到它的問題解確實是由多階段的最優組成的。

三個特征

1、最優子結構

上文我們說對于每個格子,它到終點的路徑數為其右邊格子到終點的路徑數與其下邊格子到終點的路徑數之和

  1. paths(格子, end) = paths(下邊的格子, end) + paths(右邊的格子, end

即對于每個格子來說,只要算出它的最優子結構(其右邊格子到終點的路徑數與其下邊格子到終點的路徑數),則此格子到終點的路徑和得出的就是最優解,進而可知上文中計算的 GRID[0][0] 也是全局最優解。

2、無后效性

每個格子到終點的路徑數只與其右邊格子到終點的路徑數與其下邊格子到終點的路徑數有關,它不 care 這兩者的路徑數是怎么得出的,也就是當前階段的解只與它上一層階段的解有關,它并不關心這些解是怎么算出來的,同時當前階段的解算完后,它并不會對之前的階段的解產生影響,這就是無后效性的含義。

3、 重復子問題

如果用遞歸的方式來做,我們之前分析過了,顯然存在重復子問題。

綜上,此題符合動態規劃的「一個模型三個特征」,所以可以用動態規劃來解題

總結本文用一道比較常見的習題來幫助大家重新溫習了一下動態規劃的特點:一個模型三個特征,相信大家對這些概念應該有比較深刻的認識了,其實忘記這些概念,使用前文所述動態規劃解題四步曲基本可以套路大多數動態規劃的問題,不過了解這些概念能進一步地加深我們對動態規劃的理想,知其然,知其所以然也很重要。

本文轉載自微信公眾號「碼海」,可以通過以下二維碼關注。轉載本文請聯系碼海公眾號。

 

責任編輯:武曉燕 來源: 碼海
相關推薦

2020-06-22 08:16:16

哈希hashCodeequals

2024-09-24 10:28:22

2022-01-10 11:04:41

單鏈表面試編程

2022-04-08 08:26:03

JavaHTTP請求

2021-09-28 13:42:55

Chrome Devwebsocket網絡協議

2025-10-20 04:00:00

2025-11-11 09:25:19

2025-09-19 09:57:46

2017-03-16 15:27:10

面試官測試技術

2021-05-19 08:17:35

秒殺場景高并發

2020-05-13 14:35:47

HashMap面試官Java

2023-07-31 08:26:09

2020-06-22 07:47:46

提交面試官訂單

2022-08-18 20:02:04

JSLRU緩存

2020-08-03 07:04:54

測試面試官應用程序

2020-10-05 21:46:54

線程

2021-06-09 07:55:19

NodeEventEmitte驅動

2025-06-04 03:15:00

高并發短鏈系統

2024-05-28 10:14:31

JavaScrip模板引擎

2021-10-15 09:53:12

工具
點贊
收藏

51CTO技術棧公眾號

国产黄色片在线观看| 日韩成人免费在线观看| 国产精品久久免费视频| 亚洲影院理伦片| 欧美日韩在线精品一区二区三区| 一炮成瘾1v1高h| 亚洲第一网站| xxxxxxxxx欧美| 国产乱了高清露脸对白| 国产一区精品福利| 五月婷婷激情综合网| 一区二区不卡在线观看| 亚洲人成色777777老人头| 久久精品免费观看| 2018国产精品视频| 538精品在线观看| 北条麻妃国产九九九精品小说| 日韩欧美中文一区二区| 国产精品一区二区羞羞答答| 岛国片av在线| 亚洲特级片在线| 热re99久久精品国99热蜜月| 亚洲精品国产精品国| 久久er99精品| 国产精品第三页| 国产成人无码精品久久久久| 中文字幕人成人乱码| 在线播放国产精品| 欧美精品黑人猛交高潮| 99精品中文字幕在线不卡| 欧美日韩精品三区| 无码无遮挡又大又爽又黄的视频| 超碰人人在线| 国产精品久久久久久久第一福利| 免费精品视频一区二区三区| 婷婷综合激情网| 国产大陆a不卡| 91影视免费在线观看| 一级α片免费看刺激高潮视频| 国产精品毛片在线| 久久久久一本一区二区青青蜜月| 国产大片免费看| 久久久久久久久久久久久久| 久久精品久久久久| 久草福利资源在线| 99久久精品费精品国产风间由美| 永久免费毛片在线播放不卡| 日本一卡二卡在线播放| 精品免费av| 亚洲一区999| 欧美做受高潮6| 欧美日韩伦理在线免费| 一区二区三区视频免费在线观看| x88av在线| 成人免费看片39| 日韩亚洲欧美成人| 日韩三级久久久| 国产精品伦理久久久久久| 北条麻妃99精品青青久久| 久久精品国产亚洲AV成人婷婷| 日韩欧美大片| 久久视频国产精品免费视频在线| 亚洲精品久久久久久国| 欧美 亚欧 日韩视频在线 | 亚洲aa在线观看| 97成人在线观看| 国产精品资源网站| 国产精品区一区二区三含羞草| 少妇喷水在线观看| av福利精品导航| 日本精品一区二区| 91亚洲精选| 一区二区三区在线看| 国产午夜大地久久| 粉嫩一区二区三区| 欧美精三区欧美精三区| 亚洲欧洲日韩综合| 亚洲福利网站| 色777狠狠综合秋免鲁丝| 亚洲成人生活片| 亚洲精品美女91| 国产精品wwww| 亚洲第一成年人网站| 久久一夜天堂av一区二区三区| 五码日韩精品一区二区三区视频| а√天堂官网中文在线| 激情亚洲一区二区三区四区| 亚洲天堂av线| 动漫3d精品一区二区三区乱码| 亚洲欧洲一区二区三区久久| 农村黄色一级片| 国产伦理一区| 亚洲va久久久噜噜噜| 色av男人的天堂免费在线| 国产精品美女一区二区三区| www.国产在线播放| 69堂精品视频在线播放| 精品国精品国产尤物美女| 精品人妻互换一区二区三区| 中文字幕一区二区精品区| 欧洲一区二区视频| 国产女18毛片多18精品| 久久久久一区二区三区四区| 午夜一区二区三区| 黄色在线观看www| 欧美久久久久久久久久 | 国产精品天干天干在观线 | 天堂精品中文字幕在线| 999国内精品视频在线| 韩国三级av在线免费观看| 一区二区三区在线高清| 色婷婷狠狠18| 五月综合久久| 国内精品小视频| jizz中国少妇| 国产精品天干天干在观线| 免费在线观看亚洲视频| 亚洲精品一区国产| 色七七影院综合| 午夜精品久久久久久久蜜桃| www.亚洲国产| 久操网在线观看| 精品国产一区二区三区2021| 色午夜这里只有精品| 337p粉嫩色噜噜噜大肥臀| 成人免费毛片高清视频| 91看片淫黄大片91| a一区二区三区亚洲| 中文字幕亚洲天堂| 美女黄页在线观看| 久久综合九色综合久久久精品综合 | 911福利视频| 国产探花在线精品| 欧美一级电影在线| 欧美熟妇交换久久久久久分类| 伊人色综合久久天天| www,av在线| 婷婷亚洲五月色综合| 川上优av一区二区线观看| 欧美人与禽zozzo禽性配| 国产性猛交普通话对白| 色综合久综合久久综合久鬼88| 国产毛片在线视频| 国产精品理论在线观看| 亚洲欧美激情网| 成人3d动漫在线观看| 国产精品国产三级国产专播精品人| 无码精品人妻一区二区| 精品久久久香蕉免费精品视频| 精品人妻一区二区三区日产| 亚洲精品一二| 欧美日韩精品免费看| 日本不卡一二三| 国产亚洲精品一区二555| 少妇一级淫片日本| 国产精品久久久99| 中文字幕第66页| 亚洲图片在线| 农村寡妇一区二区三区| 蜜桃视频成人m3u8| 久久精品2019中文字幕| av免费在线不卡| 午夜视频一区在线观看| 国产成人福利在线| 麻豆久久一区二区| 喜爱夜蒲2在线| 北条麻妃一区二区三区在线观看| 国内精品久久久久久久久| 四虎在线观看| 欧美少妇性性性| 天天天天天天天天操| 成人免费视频app| 成人午夜视频免费在线观看| 日韩精品诱惑一区?区三区| 亚洲www视频| h片在线观看视频免费免费| 亚洲一二在线观看| 国产99对白在线播放| 天天操天天综合网| 特级西西人体高清大胆| 高清国产午夜精品久久久久久| 草草久久久无码国产专区| 欧美自拍偷拍| 成人午夜电影在线播放| 日韩性xxx| 欧美另类在线观看| 蝌蚪视频在线播放| 欧美一个色资源| 国产伦精品一区二区三区视频网站| 国产精品青草综合久久久久99| 一级少妇精品久久久久久久| 视频一区免费在线观看| 红桃一区二区三区| 国产成人1区| 国产精品jizz视频| 激情中国色综合| 欧美亚洲视频在线看网址| 黄av在线免费观看| 91在线观看免费视频| 午夜激情福利在线| 激情成人亚洲| 亚洲巨乳在线观看| 三级精品视频| 99re在线| 欧美一区=区三区| 欧美在线视频观看免费网站| 曰本三级在线| 色噜噜久久综合伊人一本| 亚欧在线观看视频| 日韩欧美一二三四区| 一级二级三级视频| 在线亚洲精品福利网址导航| 国产成人自拍视频在线| 亚洲男人的天堂在线观看| 国产精品无码无卡无需播放器| 99精品一区二区三区| 深夜做爰性大片蜜桃| 麻豆精品久久久| 欧美在线观看视频网站| 国产色综合网| av无码久久久久久不卡网站| 一区二区三区四区在线观看国产日韩 | 亚洲区一区二区| 日韩一级片免费在线观看| 欧美一区二区三区公司| 一本一道精品欧美中文字幕| 91福利国产精品| 亚洲欧美另类在线视频| 岛国av在线不卡| 国产精品.www| 亚洲国产中文字幕在线视频综合| 欧美黄色aaa| 亚洲欧美电影院| 中文字幕在线有码| 国产精品妹子av| 永久免费看片直接| 最新欧美精品一区二区三区| 免费精品在线视频| 综合久久久久久| 破处女黄色一级片| 亚洲乱码精品一二三四区日韩在线| 日韩在线一卡二卡| 1000精品久久久久久久久| 国产3级在线观看| 亚洲欧洲一区二区三区| 国产传媒免费在线观看| 一区二区三区欧美在线观看| 黑人巨大精品一区二区在线| 夜夜精品视频一区二区| 国产精品二区一区二区aⅴ| 天天综合色天天综合| 欧美videossex极品| 在线观看不卡一区| 国产又色又爽又黄又免费| 337p亚洲精品色噜噜| 午夜精品一二三区| 亚洲精品二三区| 国产人成在线观看| 日韩视频在线一区| 亚洲第一图区| 2019中文字幕全在线观看| 性欧美hd调教| 成人两性免费视频| 国产精品欧美大片| 欧美性大战久久久久| 日韩免费在线| 日韩 欧美 视频| 久久xxxx精品视频| 日日干夜夜操s8| 懂色一区二区三区免费观看| 黄色在线观看av| 国产精品久线在线观看| 麻豆亚洲av熟女国产一区二| 精品久久久久久久久久久| 亚洲视屏在线观看| 日韩欧美色电影| 手机看片福利在线观看| 色婷婷av一区二区三区在线观看| bestiality新另类大全| 欧洲日本亚洲国产区| 91成人在线网站| 久久国产精品-国产精品| 欧美激情另类| 极品美女扒开粉嫩小泬| 久久电影网站中文字幕| 中文字幕第3页| 国产精品亲子伦对白| 日韩欧美一区二区一幕| 欧美四级电影网| 开心激情综合网| 色七七影院综合| 桃色av一区二区| 91中文在线观看| 国产精品密蕾丝视频下载| 天堂а√在线中文在线| 肉丝袜脚交视频一区二区| 26uuu国产| 国产精品每日更新| 久久黄色精品视频| 精品日韩一区二区三区 | 国产精品丝袜一区| 国语对白一区二区| 91精品国产综合久久蜜臀 | 久久久91精品国产| 另类图片综合电影| 国产富婆一区二区三区 | 国产色爱av资源综合区| 国产精品变态另类虐交| 欧美美女直播网站| 欧美日本网站| 97精品一区二区视频在线观看| 激情五月综合婷婷| 亚洲v欧美v另类v综合v日韩v| 一区二区国产精品| 黄页网站在线看| 亚洲色图清纯唯美| 日日噜噜噜噜人人爽亚洲精品| 精品久久久久一区| 成人ww免费完整版在线观看| 国产精品欧美一区二区| 国产成人一区二区三区影院| avav在线看| 91麻豆国产自产在线观看| 欧美成人aaaaⅴ片在线看| 精品国产免费人成电影在线观看四季| 69久久久久| 国产精品视频精品视频| 国产精品一国产精品| 日韩毛片在线免费看| 26uuu国产电影一区二区| 国产精品老女人| 亚洲精品福利视频| 在线观看爽视频| 免费看污久久久| 亚洲永久视频| 亚洲第一成人网站| 色吊一区二区三区 | 欧美成人精品激情在线观看| 4438五月综合| 成人在线免费观看网址| 国产精品小仙女| 国产亚洲自拍av| 亚洲国产精彩中文乱码av| 成人女同在线观看| 精品国产乱码久久久久久蜜柚| 99视频一区| 国精品无码人妻一区二区三区| 日本精品一级二级| 成人av毛片| 成人网在线免费观看| 欧美日韩国产欧| 三级电影在线看| 欧美色爱综合网| 久久日韩视频| 99视频日韩| 国产婷婷精品| 亚洲最大成人综合网| 欧美日韩欧美一区二区| 成a人片在线观看| 国产欧美韩日| 丝袜美腿成人在线| 亚洲欧洲综合网| 日韩欧美一级特黄在线播放| 国产在线精彩视频| 日韩在线电影一区| 国产一区二区按摩在线观看| 国产无遮挡aaa片爽爽| 亚洲精品有码在线| 婷婷精品久久久久久久久久不卡| 成人午夜免费在线视频| 91免费观看在线| 亚洲最大成人av| 久久全国免费视频| 国模吧精品视频| 欧美xxxx黑人| 色偷偷成人一区二区三区91| 免费高清在线观看| 国产精品麻豆免费版| 日韩精品1区2区3区| 欧美黑吊大战白妞| 亚洲欧洲自拍偷拍| 精品国产亚洲日本| av无码精品一区二区三区| 亚洲精品中文字幕乱码三区| 四虎国产精品永远| 亚洲精品免费一区二区三区| 国产精品五区| 国产黄色小视频网站| 精品亚洲aⅴ在线观看| 亚洲精品伊人| 日批视频在线免费看| 亚洲靠逼com| 大片免费播放在线视频| 成人国产1314www色视频| 热久久国产精品| 激情av中文字幕| 色琪琪一区二区三区亚洲区| 日韩电影免费观看| 亚洲资源视频| 久久久精品天堂|