日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

經(jīng)典動態(tài)規(guī)劃:戳氣球問題

算法與數(shù)據(jù)結構 ? 來源:算法與數(shù)據(jù)結構 ? 2020-06-03 17:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天我們要聊的這道題「Burst Balloon」和之前我們寫過的那篇 經(jīng)典動態(tài)規(guī)劃:高樓扔雞蛋問題 分析過的高樓扔雞蛋問題類似,知名度很高,但難度確實也很大。因此 labuladong 公眾號就給這道題賜個座,來看一看這道題目到底有多難。

它是 LeetCode 第 312 題,題目如下:

title

首先必須要說明,這個題目的狀態(tài)轉移方程真的比較巧妙,所以說如果你看了題目之后完全沒有思路恰恰是正常的。雖然最優(yōu)答案不容易想出來,但基本的思路分析是我們應該力求做到的。所以本文會先分析一下常規(guī)思路,然后再引入動態(tài)規(guī)劃解法。

一、回溯思路

先來順一下解決這種問題的套路:

我們前文多次強調過,很顯然只要涉及求最值,沒有任何奇技淫巧,一定是窮舉所有可能的結果,然后對比得出最值。

所以說,只要遇到求最值的算法問題,首先要思考的就是:如何窮舉出所有可能的結果?

窮舉主要有兩種算法,就是回溯算法和動態(tài)規(guī)劃,前者就是暴力窮舉,而后者是根據(jù)狀態(tài)轉移方程推導「狀態(tài)」。

如何將我們的扎氣球問題轉化成回溯算法呢?這個應該不難想到的,我們其實就是想窮舉戳氣球的順序,不同的戳氣球順序可能得到不同的分數(shù),我們需要把所有可能的分數(shù)中最高的那個找出來,對吧。

那么,這不就是一個「全排列」問題嘛,我們前文 回溯算法框架套路詳解 中有全排列算法的詳解和代碼,其實只要稍微改一下邏輯即可,偽碼思路如下:

intres=Integer.MIN_VALUE; /*輸入一組氣球,返回戳破它們獲得的最大分數(shù)*/ intmaxCoins(int[]nums){ backtrack(nums,0); returnres; } /*回溯算法的偽碼解法*/ voidbacktrack(int[]nums,intsocre){ if(nums為空){ res=max(res,score); return; } for(inti=0;i

回溯算法就是這么簡單粗暴,但是相應的,算法的效率非常低。這個解法等同于全排列,所以時間復雜度是階乘級別,非常高,題目說了nums的大小n最多為 500,所以回溯算法肯定是不能通過所有測試用例的。

二、動態(tài)規(guī)劃思路

這個動態(tài)規(guī)劃問題和我們之前的動態(tài)規(guī)劃系列文章相比有什么特別之處?為什么它比較難呢?

原因在于,這個問題中我們每戳破一個氣球nums[i],得到的分數(shù)和該氣球相鄰的氣球nums[i-1]和nums[i+1]是有相關性的。

我們前文動態(tài)規(guī)劃套路框架詳解 說過運用動態(tài)規(guī)劃算法的一個重要條件:子問題必須獨立。所以對于這個戳氣球問題,如果想用動態(tài)規(guī)劃,必須巧妙地定義dp數(shù)組的含義,避免子問題產(chǎn)生相關性,才能推出合理的狀態(tài)轉移方程。

如何定義dp數(shù)組呢,這里需要對問題進行一個簡單地轉化。題目說可以認為nums[-1] = nums[n] = 1,那么我們先直接把這兩個邊界加進去,形成一個新的數(shù)組points:

intmaxCoins(int[]nums){ intn=nums.length; //兩端加入兩個虛擬氣球 int[]points=newint[n+2]; points[0]=points[n+1]=1; for(inti=1;i<=?n;?i++)?{ ????????points[i]?=?nums[i?-?1]; ????} ????//?... }

現(xiàn)在氣球的索引變成了從1到n,points[0]和points[n+1]可以認為是兩個「虛擬氣球」。

那么我們可以改變問題:在一排氣球points中,請你戳破氣球0和氣球n+1之間的所有氣球(不包括0和n+1),使得最終只剩下氣球0和氣球n+1兩個氣球,最多能夠得到多少分?

現(xiàn)在可以定義dp數(shù)組的含義:

dp[i][j] = x表示,戳破氣球i和氣球j之間(開區(qū)間,不包括i和j)的所有氣球,可以獲得的最高分數(shù)為x。

那么根據(jù)這個定義,題目要求的結果就是dp[0][n+1]的值,而 base case 就是dp[i][j] = 0,其中0 <= i <= n+1, j <= i+1,因為這種情況下,開區(qū)間(i, j)中間根本沒有氣球可以戳。

//basecase已經(jīng)都被初始化為0 int[][]dp=newint[n+2][n+2];

現(xiàn)在我們要根據(jù)這個dp數(shù)組來推導狀態(tài)轉移方程了,根據(jù)我們前文的套路,所謂的推導「狀態(tài)轉移方程」,實際上就是在思考怎么「做選擇」,也就是這道題目最有技巧的部分:

不就是想求戳破氣球i和氣球j之間的最高分數(shù)嗎,如果「正向思考」,就只能寫出前文的回溯算法;我們需要「反向思考」,想一想氣球i和氣球j之間最后一個被戳破的氣球可能是哪一個?

其實氣球i和氣球j之間的所有氣球都可能是最后被戳破的那一個,不防假設為k?;仡檮討B(tài)規(guī)劃的套路,這里其實已經(jīng)找到了「狀態(tài)」和「選擇」:i和j就是兩個「狀態(tài)」,最后戳破的那個氣球k就是「選擇」。

根據(jù)剛才對dp數(shù)組的定義,如果最后一個戳破氣球k,dp[i][j]的值應該為:

dp[i][j]=dp[i][k]+dp[k][j] +points[i]*points[k]*points[j]

你不是要最后戳破氣球k嗎?那得先把開區(qū)間(i, k)的氣球都戳破,再把開區(qū)間(k, j)的氣球都戳破;最后剩下的氣球k,相鄰的就是氣球i和氣球j,這時候戳破k的話得到的分數(shù)就是points[i]*points[k]*points[j]。

那么戳破開區(qū)間(i, k)和開區(qū)間(k, j)的氣球最多能得到的分數(shù)是多少呢?嘿嘿,就是dp[i][k]和dp[k][j],這恰好就是我們對dp數(shù)組的定義嘛!

結合這個圖,就能體會出dp數(shù)組定義的巧妙了。由于是開區(qū)間,dp[i][k]和dp[k][j]不會影響氣球k;而戳破氣球k時,旁邊相鄰的就是氣球i和氣球j了,最后還會剩下氣球i和氣球j,這也恰好滿足了dp數(shù)組開區(qū)間的定義。

那么,對于一組給定的i和j,我們只要窮舉i < k < j的所有氣球k,選擇得分最高的作為dp[i][j]的值即可,這也就是狀態(tài)轉移方程:

//最后戳破的氣球是哪個? for(intk=i+1;k

寫出狀態(tài)轉移方程就完成這道題的一大半了,但是還有問題:對于k的窮舉僅僅是在做「選擇」,但是應該如何窮舉「狀態(tài)」i和j呢?

for(inti=...;;) for(intj=...;;) for(intk=i+1;k

三、寫出代碼

關于「狀態(tài)」的窮舉,最重要的一點就是:狀態(tài)轉移所依賴的狀態(tài)必須被提前計算出來。

拿這道題舉例,dp[i][j]所依賴的狀態(tài)是dp[i][k]和dp[k][j],那么我們必須保證:在計算dp[i][j]時,dp[i][k]和dp[k][j]已經(jīng)被計算出來了(其中i < k < j)。

那么應該如何安排i和j的遍歷順序,來提供上述的保證呢?我們前文 動態(tài)規(guī)劃答疑篇 寫過處理這種問題的一個雞賊技巧:根據(jù) base case 和最終狀態(tài)進行推導。

PS:最終狀態(tài)就是指題目要求的結果,對于這道題目也就是dp[0][n+1]。

我們先把 base case 和最終的狀態(tài)在 DP table 上畫出來:

對于任一dp[i][j],我們希望所有dp[i][k]和dp[k][j]已經(jīng)被計算,畫在圖上就是這種情況:

那么,為了達到這個要求,可以有兩種遍歷方法,要么斜著遍歷,要么從下到上從左到右遍歷:

斜著遍歷有一點難寫,所以一般我們就從下往上遍歷,下面看完整代碼:

intmaxCoins(int[]nums){ intn=nums.length; //添加兩側的虛擬氣球 int[]points=newint[n+2]; points[0]=points[n+1]=1; for(inti=1;i<=?n;?i++)?{ ????????points[i]?=?nums[i?-?1]; ????} ????//?base?case?已經(jīng)都被初始化為?0 ????int[][]?dp?=?new?int[n?+?2][n?+?2]; ????//?開始狀態(tài)轉移 ????//?i?應該從下往上 ????for?(int?i?=?n;?i?>=0;i--){ //j應該從左往右 for(intj=i+1;j

至此,這道題目就完全解決了,十分巧妙,但也不是那么難,對吧?

關鍵在于dp數(shù)組的定義,需要避免子問題互相影響,所以我們反向思考,將dp[i][j]的定義設為開區(qū)間,考慮最后戳破的氣球是哪一個,以此構建了狀態(tài)轉移方程。

對于如何窮舉「狀態(tài)」,我們使用了小技巧,通過 base case 和最終狀態(tài)推導出i,j的遍歷方向,保證正確的狀態(tài)轉移。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4810

    瀏覽量

    98619
  • 代碼
    +關注

    關注

    30

    文章

    4977

    瀏覽量

    74422

原文標題:經(jīng)典動態(tài)規(guī)劃:戳氣球問題

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助,關于TJA1103硬件時間問題求解

    我正在使用 MR-CANHUBK334,其中集成了一個 gPTP 堆棧,該堆棧配置為從 TJA1103 的硬件時間模塊獲取時間。該節(jié)點配置為 Gran Master。我的問題是,有時在入口/出口
    發(fā)表于 03-26 07:38

    合規(guī)之錨:FDA對電子時間的最新指南與藥廠應對之道

    在藥品生產(chǎn)與質量管理的數(shù)字化進程中,電子時間已成為證明數(shù)據(jù)完整性的核心要素。對于面向國際市場的制藥企業(yè)而言,理解FDA對電子時間的最新要求,不僅是滿足監(jiān)管合規(guī)的底線,更是構建可信數(shù)據(jù)體系
    的頭像 發(fā)表于 03-24 09:40 ?186次閱讀
    合規(guī)之錨:FDA對電子時間<b class='flag-5'>戳</b>的最新指南與藥廠應對之道

    具身智能工業(yè)機器人:集群協(xié)同與動態(tài)任務分配

    and Control》期刊發(fā)布的研究,通過引入多智能體協(xié)同算法,制造系統(tǒng)能夠實現(xiàn)基于實時狀態(tài)的動態(tài)任務分配,使多個機器人從孤立作業(yè)進化為具備自主協(xié)商能力的智能體。在個性化制造場景下,動態(tài)路徑規(guī)劃與均勻任務分配算法可顯著提升系
    的頭像 發(fā)表于 03-21 15:46 ?171次閱讀

    無人機動態(tài)環(huán)境自適應避障系統(tǒng)平臺的應用與未來發(fā)展

    ? ? 無人機動態(tài)環(huán)境自適應避障系統(tǒng)平臺的應用與未來發(fā)展 ? ?北京華盛恒輝無人機動態(tài)環(huán)境自適應避障系統(tǒng)是一種融合多傳感器感知、智能決策與實時路徑規(guī)劃的先進自主飛行技術,旨在保障無人機在復雜、
    的頭像 發(fā)表于 01-08 15:35 ?302次閱讀

    AI賦能微電網(wǎng)規(guī)劃,開啟智能新時代

    ,為微電網(wǎng)規(guī)劃注入了“智慧基因”,推動規(guī)劃過程從“靜態(tài)估算”轉向“動態(tài)預判”,從“單點優(yōu)化”邁向“全局協(xié)同”,開啟了微電網(wǎng)智能規(guī)劃的全新時代。
    的頭像 發(fā)表于 01-05 14:36 ?531次閱讀
    AI賦能微電網(wǎng)<b class='flag-5'>規(guī)劃</b>,開啟智能新時代

    基于感知引導的多步驟精細操作任務與運動規(guī)劃

    傳統(tǒng)的任務與運動規(guī)劃(TAMP)系統(tǒng)在機器人操作應用中通常依賴靜態(tài)模型運行,因此在面對新環(huán)境時往往表現(xiàn)不佳。將感知與操作相融合,是應對這一挑戰(zhàn)的有效途徑,使機器人能夠在執(zhí)行過程中實時更新規(guī)劃,從而適應動態(tài)變化的場景。
    的頭像 發(fā)表于 11-14 10:18 ?1654次閱讀
    基于感知引導的多步驟精細操作任務與運動<b class='flag-5'>規(guī)劃</b>

    基于SIMP與折衷規(guī)劃法的航空附件齒輪箱結構輕量化設計與動態(tài)特性提升

    航空發(fā)動機附件齒輪箱作為動力傳遞系統(tǒng)的關鍵部件,其箱體結構設計直接影響發(fā)動機的功率密度、可靠性及振動特性。針對傳統(tǒng)經(jīng)驗設計方法難以滿足高剛度、輕量化及高動態(tài)性能要求的挑戰(zhàn),本文提出了一種基于折衷規(guī)劃法的多目標拓撲優(yōu)化方法。
    的頭像 發(fā)表于 11-07 15:21 ?1045次閱讀
    基于SIMP與折衷<b class='flag-5'>規(guī)劃</b>法的航空附件齒輪箱結構輕量化設計與<b class='flag-5'>動態(tài)</b>特性提升

    開關電源的經(jīng)典培訓

    開關電源方面的經(jīng)典培訓資料,有相同愛好的同學,可以下載學習! 獲取完整文檔資料可下載附件哦!?。?! 如果內容有幫助可以關注、點贊、評論支持一下哦~
    發(fā)表于 11-04 16:46

    STEVAL-SMARTAG2 NFC動態(tài)標簽傳感器板技術解析與應用指南

    STMicroelectronics STEVAL-SMARTAG2 NFC動態(tài)標簽傳感器板是一款支持NFC的傳感器節(jié)點,帶有慣性MEMS和環(huán)境傳感器。STMicroelectronics板設有
    的頭像 發(fā)表于 10-28 09:54 ?966次閱讀
    STEVAL-SMARTAG2 NFC<b class='flag-5'>動態(tài)</b>標簽傳感器板技術解析與應用指南

    光伏電站無人機巡檢管控平臺如何進行任務規(guī)劃管控?

    技術手段與管理制度,從而實現(xiàn)對光伏電站巡檢效率、安全性與數(shù)據(jù)價值的平衡。 在任務規(guī)劃管控方面,光伏電站無人機巡檢管控平臺實現(xiàn)了精準化與動態(tài)調整。針對巡檢任務分層設計,如日常巡檢采用的航線、頻率等,以及重點檢測的
    的頭像 發(fā)表于 10-27 17:13 ?671次閱讀
    光伏電站無人機巡檢管控平臺如何進行任務<b class='flag-5'>規(guī)劃</b>管控?

    PTR54L15藍牙模組的引腳規(guī)劃——電源域

    要開發(fā)低功耗藍產(chǎn)品,ptr54L15的是一個不錯的選擇,支持最新的藍牙6.1協(xié)議規(guī)范,無論是處理性能、功耗、資源、性價比等多個維度來看,都是一個不錯的選擇。這個模組跟經(jīng)典的PTR5618相比,性能
    發(fā)表于 06-25 19:13

    動態(tài)BGP與靜態(tài)BGP的區(qū)別?

    BGP(邊界網(wǎng)關協(xié)議,Border Gateway Protocol) 是互聯(lián)網(wǎng)中用于自治系統(tǒng)(AS)之間路由信息交換的核心協(xié)議。在實際部署中,BGP 可分為靜態(tài) BGP和動態(tài) BGP兩種方式,二者
    發(fā)表于 06-24 06:57

    投入式水位計:助力水資源規(guī)劃與結構安全

    的設備。一、水資源規(guī)劃:數(shù)據(jù)驅動的科學管理水資源的高效利用依賴于對水體動態(tài)的精準掌握。投入式水位計通過測量水庫、河流、湖泊等水位變化,為蓄水調度、灌溉規(guī)劃及生態(tài)保護提
    的頭像 發(fā)表于 06-19 13:17 ?720次閱讀
    投入式水位計:助力水資源<b class='flag-5'>規(guī)劃</b>與結構安全

    AGV小車中的動態(tài)路徑規(guī)劃算法揭秘

    并非一成不變時,動態(tài)路徑規(guī)劃能力就顯得至關重要。本文將深入探討幾種主流的動態(tài)路徑規(guī)劃算法(如A、Dijkstra、RRT等),并解析它們如何在AGV行業(yè)中大顯身手。 為何需要
    的頭像 發(fā)表于 06-17 15:54 ?2049次閱讀
    AGV小車中的<b class='flag-5'>動態(tài)</b>路徑<b class='flag-5'>規(guī)劃</b>算法揭秘

    AGV通信第2期 AGV集群智能路徑規(guī)劃解決方案

    在智能制造加速發(fā)展的背景下,AGV作為智慧物流的核心載體,其路徑規(guī)劃的智能化水平直接影響工廠的運作效率。在工廠物流升級過程中,企業(yè)面臨以下技術挑戰(zhàn): ? 動態(tài)環(huán)境適應:復雜工況下需實時避障并保持最優(yōu)
    的頭像 發(fā)表于 05-09 14:03 ?800次閱讀
    AGV通信第2期 AGV集群智能路徑<b class='flag-5'>規(guī)劃</b>解決方案
    临潭县| 宁津县| 马尔康县| 昭觉县| 寿光市| 绥宁县| 从江县| 资阳市| 舟曲县| 宣汉县| 博爱县| 修武县| 闻喜县| 博湖县| 边坝县| 开远市| 噶尔县| 颍上县| 三原县| 曲沃县| 临颍县| 玉树县| 青岛市| 犍为县| 鸡泽县| 大冶市| 上思县| 凉山| 仪征市| 临夏市| 静宁县| 买车| 张家川| 板桥市| 湖州市| 高唐县| 克拉玛依市| 翼城县| 苍山县| 家居| 育儿|