精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线国产91| 国产女人18毛片水18精| 亚州国产精品| 色婷婷综合久久久| 咪咪色在线视频| www黄色在线观看| 亚洲一区二区三区高清不卡| 一区二区欧美激情| 久久发布国产伦子伦精品| bbw在线视频| 国产精品久久久久久亚洲伦| 99久久99久久精品国产片| 国产尤物在线视频| 99精品电影| 亚洲精品久久久久| 最新天堂在线视频| 美女流白浆视频| 成人在线播放| 久久亚区不卡日本| 91久久精品视频| 欧美三级午夜理伦| 久久久久电影| 亚洲欧美日本精品| 久久久久亚洲av片无码v| 午夜精品成人av| 洋洋av久久久久久久一区| 色综合电影网| 污污网站在线免费观看| 狠狠色狠狠色合久久伊人| 欧美亚洲日本黄色| 青娱乐免费在线视频| 大胆日韩av| 日韩精品中文字幕在线| 国产chinesehd精品露脸| 精品美女一区| 色综合久久88色综合天天免费| 艳色歌舞团一区二区三区| 亚州男人的天堂| 国产福利91精品| 成人午夜一级二级三级| 成人黄色免费网| 久久精品国产清高在天天线| 性欧美视频videos6一9| 一区二区在线观看免费视频| 久久中文亚洲字幕| 亚洲三级免费看| 亚洲午夜久久久久久久久红桃| 视频一区国产| 日韩欧美资源站| 日本人69视频| 精品123区| 欧美伊人久久久久久午夜久久久久| 成人午夜视频在线观看免费| 操你啦视频在线| 亚洲欧洲三级电影| 亚洲一区精品视频| 午夜免费视频在线国产| 亚洲国产激情av| 日韩精品最新在线观看| 成人一区二区不卡免费| 国产三级欧美三级| 午夜老司机精品| 成人性生交大片免费看午夜| 日本一区二区动态图| 日本中文不卡| 在线看av的网址| 国产精品电影院| 欧洲xxxxx| 最新黄网在线观看| 亚洲国产色一区| 日日摸日日碰夜夜爽无码| 97在线超碰| 欧美午夜久久久| 亚洲国产精品毛片av不卡在线| 欧洲精品一区二区三区| 欧美少妇xxx| 天天综合网久久| 欧美1区2区3| 亚洲国产成人精品女人久久久 | 99在线播放| 亚洲美女一区二区三区| 嫩草影院中文字幕| av在线不卡免费| 欧美色视频日本版| 91香蕉视频导航| 精品一区二区三区免费看| 精品999久久久| 欧美特黄一区二区三区| 日韩精品水蜜桃| 欧美精品一区三区| 九九热精品视频在线| 久久精品噜噜噜成人av农村| 99久久伊人精品影院| 欧美一级在线免费观看| 欧美激情综合五月色丁香小说| 中文字幕免费在线不卡| av丝袜在线| 在线观看一区二区精品视频| 男插女视频网站| 清纯唯美亚洲经典中文字幕| 自拍偷拍亚洲区| 国产91av视频| 久久99精品国产麻豆婷婷 | 99久久精品国产一区二区成人| 成人av动漫在线| 日日骚一区二区网站| 色呦呦在线视频| 日本道精品一区二区三区| av影片在线播放| 欧美日韩123| 久久久久久久国产精品| 中文在线免费看视频| 成人精品在线视频观看| 亚洲一区二区三区加勒比| 成人一级福利| 欧美一区二区三区免费观看视频| 国产精品久久久久无码av色戒| 91超碰国产精品| 日本精品一区二区三区在线| 国产黄色片免费| 欧美国产亚洲另类动漫| 欧美网站免费观看| 日韩在线观看中文字幕| 最近更新的2019中文字幕| 日韩精品视频免费播放| 国产一区二区三区在线观看精品| 日本一区二区三区免费观看| 99re6在线精品视频免费播放| 4438亚洲最大| 国产美女网站视频| 石原莉奈一区二区三区在线观看| 99久re热视频这里只有精品6| 男人影院在线观看| 欧美日韩在线精品一区二区三区激情 | 深爱五月激情网| 日韩视频一区| 国产经典一区二区三区 | 欧美日韩第一页| 中文字幕一区二区免费| 国产亚洲欧美日韩俺去了| 午夜精品久久久久久久无码| 国产精品115| 欧美富婆性猛交| 精品久久久中文字幕人妻| 成人免费视频在线观看| 91插插插插插插插插| 国产影视一区| 国产精品国产三级国产专播精品人| 四虎精品在线| 色噜噜狠狠成人中文综合| 精品夜夜澡人妻无码av| 性一交一乱一区二区洋洋av| 精品国产_亚洲人成在线| 国产蜜臀一区二区打屁股调教| 欧美一区二区女人| 久久精品www| 成人在线综合网| 99在线精品免费视频| 国产伦理久久久久久妇女| 国内精品免费午夜毛片| 天天操天天操天天干| 欧美日韩国产中文字幕| 国产黄色网址在线观看| 日本系列欧美系列| 国产又爽又黄ai换脸| 久久在线观看| 久久久免费在线观看| 少妇高潮一区二区三区69| 精品毛片网大全| xxxxx在线观看| 毛片不卡一区二区| 欧美aaa在线观看| 免费观看亚洲视频大全| 久久久久久久久网站| 青青草免费在线视频| 在线免费av一区| 可以免费看av的网址| 国产精品99久久久久久有的能看 | 国产伦视频一区二区三区| av资源网在线播放| 亚洲午夜精品久久久久久性色 | 亚洲精品国产精品乱码在线观看| 韩国精品在线观看| 久久综合久久网| 欧美一区二区性| 成人18视频| 欧美特黄aaaaaaaa大片| 日韩中文字幕国产精品| 亚洲国产一二三区| 色美美综合视频| 欧美激情图片小说| 久久久国产综合精品女国产盗摄| 视频免费1区二区三区| 亚洲人体偷拍| 亚洲欧美成人一区| 国产精品巨作av| 国产精品偷伦一区二区| 国产网红在线观看| 一本色道久久88精品综合| www.日韩在线观看| 欧美亚洲免费在线一区| 久久免费精彩视频| 国产精品女同互慰在线看| 亚洲一区二区三区黄色| 免费在线成人网| 免费看国产曰批40分钟| 婷婷亚洲图片| 日韩精品欧美专区| 成人香蕉社区| 成人黄色av免费在线观看| 悠悠资源网亚洲青| 九九热这里只有精品6| 国产无套粉嫩白浆在线2022年| 精品日韩在线观看| 国产又粗又猛又爽又黄视频 | 中文字幕欧美人妻精品| 婷婷亚洲久悠悠色悠在线播放| 1024在线看片| 91小视频免费观看| 老司机av网站| 国内久久精品视频| 国产xxxxx视频| 日韩视频一区| 福利在线一区二区| 欧美国产三区| 一区二区免费在线观看| 精品国产a一区二区三区v免费| 国产女主播一区二区三区| 国产95亚洲| 国产欧美亚洲精品| 天然素人一区二区视频| 91sa在线看| 精品丝袜在线| 91黑丝高跟在线| 欧美精品videossex少妇| 久热国产精品视频| 麻豆av在线免费看| 日韩小视频在线观看| 成人77777| 国产一区二区三区毛片| 污视频网站免费观看| 欧美大片拔萝卜| 国产后入清纯学生妹| 日韩欧美一区在线观看| 精品国产va久久久久久久| 欧美高清性hdvideosex| 97精品人妻一区二区三区香蕉| 欧美偷拍一区二区| 久久国产香蕉视频| 欧美吞精做爰啪啪高潮| 亚洲无码精品国产| 9191久久久久久久久久久| 国产又大又长又粗| 欧美一卡2卡三卡4卡5免费| 国产色视频在线| 精品裸体舞一区二区三区| 成人黄色免费视频| 亚洲成人黄色在线| 亚洲av毛片成人精品| 国产婷婷成人久久av免费高清| 水中色av综合| 中文字幕日韩高清| 黄色网址在线免费观看| 欧美大片欧美激情性色a∨久久| 牛牛精品在线| 欧美在线视频导航| 精品成人免费一区二区在线播放| 国产精品日韩欧美| 精品视频在线观看免费观看 | 亚洲欧美成人一区二区三区| 婷婷在线精品视频| 亚洲v中文字幕| 欧美brazzers| 欧美精品 日韩| 国产综合在线播放| 亚洲欧美日韩在线高清直播| av在线电影观看| 欧美理论电影在线观看| 97在线视频免费观看完整版| 国产99久久精品一区二区| 欧美日韩视频免费看| 97人人干人人| 精品久久精品| 2021国产视频| 久久精品盗摄| 日本成人在线免费| 久久精品欧美一区二区三区麻豆| 久艹在线观看视频| 欧美日韩性生活视频| 中文字幕一级片| 亚洲福利视频免费观看| 国产在线超碰| 久久久久久91| 久久不卡日韩美女| 国产女主播一区二区| 欧美gayvideo| 色欲av无码一区二区人妻| 久久成人久久鬼色| 国产偷人妻精品一区| 亚洲丝袜自拍清纯另类| www成人在线| 7777精品久久久大香线蕉| 亚洲 国产 欧美 日韩| 久久亚洲精品一区二区| 日日av拍夜夜添久久免费| 99久久精品久久久久久ai换脸| 国产麻豆一区二区三区精品视频| 女人床在线观看| 日本午夜一区二区| 国产三级国产精品| 亚洲一区视频在线观看视频| 国产成人麻豆免费观看| 亚洲韩国日本中文字幕| 超碰在线caoporen| 国产精品免费一区豆花| 女同一区二区三区| 日本三级中文字幕在线观看| 日韩avvvv在线播放| 99久久人妻精品免费二区| 亚洲欧美色一区| 中文字幕观看在线| 亚洲欧美日韩久久久久久| 成人在线免费观看黄色| 2019国产精品视频| 成人免费在线观看av| 成人在线免费播放视频| 91婷婷韩国欧美一区二区| 精品一区二区三区人妻| 欧美一区二区三区公司| 免费在线观看av网站| 国产精品免费小视频| 国产一区二区精品久| 国产精品wwwww| 久久日韩粉嫩一区二区三区| 日韩欧美三级视频| 精品国产精品网麻豆系列| 中文av资源在线| 91色p视频在线| 91免费精品| 亚洲激情在线看| 亚洲欧洲国产日韩| 国产免费一区二区三区最新不卡| 色多多国产成人永久免费网站 | 欧美色区777第一页| 免费国产在线视频| 国产成人aa精品一区在线播放| 丝袜av一区| 国产1区2区在线| 国产拍揄自揄精品视频麻豆| 国产免费www| 中文日韩在线视频| www.精品国产| 永久久久久久| 韩日欧美一区二区三区| 欧美肥妇bbwbbw| 欧美一区二区三区色| 中文在线免费| 国产一区二区三区无遮挡| 亚洲欧美成人| japanese中文字幕| 精品视频一区二区不卡| 久热国产在线| 成人女人免费毛片| 国产欧美短视频| 久久精品视频18| 欧美挠脚心视频网站| 黄色在线播放网站| 国产乱码精品一区二区三区日韩精品 | 成人美女在线观看| 日本在线播放视频| 中文字幕亚洲综合| 精品午夜视频| 国产资源在线视频| 中文天堂在线一区| 国产视频手机在线观看| 国产综合在线视频| 国际精品欧美精品| 无套内谢丰满少妇中文字幕| 亚洲国产精品一区二区尤物区| 日韩电影在线观看完整版| 国产精品网红福利| 99xxxx成人网| 快灬快灬一下爽蜜桃在线观看| 欧美一级日韩一级| 欧美gv在线观看| 99久久精品国产观看| 萌白酱视频在线| 亚洲精品一区二区三区福利| 欧美影视资讯| 今天免费高清在线观看国语| 26uuu精品一区二区| 国产又粗又长又大视频| 45www国产精品网站| 97国产精品| 国产精品无码永久免费不卡| 欧美日韩夫妻久久| 在线手机中文字幕| 老司机午夜网站| 国产日产亚洲精品系列| 性网爆门事件集合av|