亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

動(dòng)態(tài)規(guī)劃算法的思想及實(shí)現(xiàn)

includecmath / 2358人閱讀

摘要:介紹動(dòng)態(tài)規(guī)劃簡(jiǎn)稱是算法設(shè)計(jì)思想當(dāng)中最難也是最有趣的部分了,動(dòng)態(tài)規(guī)劃適用于有重疊子問(wèn)題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問(wèn)題,是一種在數(shù)學(xué)計(jì)算機(jī)科學(xué)和經(jīng)濟(jì)學(xué)中經(jīng)常使用的,通過(guò)把原問(wèn)題分解為相對(duì)簡(jiǎn)單的子問(wèn)題的方式求解復(fù)雜問(wèn)題的方法。

介紹

動(dòng)態(tài)規(guī)劃(簡(jiǎn)稱DP)是算法設(shè)計(jì)思想當(dāng)中最難也是最有趣的部分了,動(dòng)態(tài)規(guī)劃適用于有重疊子問(wèn)題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問(wèn)題,是一種在數(shù)學(xué)、計(jì)算機(jī)科學(xué)和經(jīng)濟(jì)學(xué)中經(jīng)常使用的,通過(guò)把原問(wèn)題分解為相對(duì)簡(jiǎn)單的子問(wèn)題的方式求解復(fù)雜問(wèn)題的方法。使用動(dòng)態(tài)規(guī)劃方法解題有較高的時(shí)間效率,關(guān)鍵在于它減少了很多不必要的計(jì)算和重復(fù)計(jì)算的部分

它的思想就是把一個(gè)大的問(wèn)題進(jìn)行拆分,細(xì)分成一個(gè)個(gè)小的子問(wèn)題,且能夠從這些小的子問(wèn)題的解當(dāng)中推導(dǎo)出原問(wèn)題的解。同時(shí)還需要滿足以下兩個(gè)重要性質(zhì)才能進(jìn)行動(dòng)態(tài)規(guī)劃

最優(yōu)子結(jié)構(gòu)性: 既所拆分的子問(wèn)題的解是最優(yōu)解。

子問(wèn)題重疊性質(zhì): 既在求解的過(guò)程當(dāng)中,每次產(chǎn)生的子問(wèn)題并不總是新問(wèn)題,有些子問(wèn)題會(huì)被重復(fù)計(jì)算多次。動(dòng)態(tài)規(guī)劃算法正是利用了這種子問(wèn)題的重疊性質(zhì),對(duì)每一個(gè)子問(wèn)題只計(jì)算一次,然后將其計(jì)算結(jié)果保存在一個(gè)表格中,當(dāng)再次需要計(jì)算已經(jīng)計(jì)算過(guò)的子問(wèn)題時(shí),只是在表格中簡(jiǎn)單地查看一下結(jié)果,從而獲得較高的解題效率

舉個(gè)栗子

首先先引一道動(dòng)態(tài)規(guī)劃的經(jīng)典問(wèn)題最長(zhǎng)不下降子序列

它的定義是: 設(shè)有由n個(gè)不相同的整數(shù)組成的數(shù)列b[n],若有下標(biāo)$i_1

例如

13,7,9,16,38,24,37,18,44,19,21,22,63,15

那么就有13<16<38<44<63長(zhǎng)度為5的不下降子序列。
但是經(jīng)過(guò)觀察實(shí)際上還有7<9<16<18<19<21<22<63長(zhǎng)度為8的不下降子序列,那么是否還有更長(zhǎng)的不下降子序列呢?請(qǐng)找出最長(zhǎng)的不下降子序列

輸入格式

第一行為n,表示n個(gè)數(shù)(n<=100000),第二行為n個(gè)數(shù)的數(shù)值(數(shù)字之間用空格隔開(kāi)且最后一個(gè)數(shù)字末尾不能留有空格)

輸出格式

一個(gè)整數(shù),表示最長(zhǎng)不下降子序列的長(zhǎng)度。

輸入例子

4

1 3 1 2

輸出例子

2

思路

假如要求得某一段的最優(yōu),就要想更小段的最優(yōu)怎么求,再看看由最小段的最優(yōu)能否擴(kuò)大推廣到最大段的最優(yōu);

假設(shè)這么一個(gè)表:

第三行表示該序列元素的所能連接的最長(zhǎng)不下降子序列的長(zhǎng)度,因?yàn)楸旧黹L(zhǎng)度為1,所以初始值都為1

第四行表示鏈接于哪個(gè)序列元素形成最長(zhǎng)不下降子序列

先從倒數(shù)第二項(xiàng)63算起,在它的后面僅有一項(xiàng),因此僅作一次比較,因?yàn)?3>15,所以從63出發(fā),不作任何鏈接,長(zhǎng)度還是為1。

再看倒數(shù)第三項(xiàng)22,在它的后面有2項(xiàng),因此必須要在這2項(xiàng)當(dāng)中找出比22大,長(zhǎng)度又是最長(zhǎng)的數(shù)值作為鏈接,由于只有22<63,所以修改22的長(zhǎng)度為2,即自身長(zhǎng)度加上所鏈接數(shù)值的長(zhǎng)度,并修改鏈接位置為13,也就是63的下標(biāo)。

再看倒數(shù)第四項(xiàng)21,在它的后面有3項(xiàng),因此必須要在這3項(xiàng)當(dāng)中找出比21大,長(zhǎng)度又是最長(zhǎng)的數(shù)值作為鏈接(注意:是長(zhǎng)度),很容易看出,數(shù)值22滿足該條件,因此,修改21的長(zhǎng)度為3,并修改鏈接位置為12,即22的序列下標(biāo)。

依次類推,最后結(jié)果如下表:

最終狀態(tài)的轉(zhuǎn)移方程式為: $f(i) = max {f(j)} +1 (b_j

代碼

process.stdin.setEncoding("utf8");

var arr = [];
var bool = 0;
var n = 0;
var longest = 1;
var a = [];
var dp = [];

process.stdin.on("readable", function() {
  var chunk = process.stdin.read();
  if (chunk !== null) {
      arr.push(chunk.trim())
  }

  if(bool>=2){
      n = arr[0];
      process.stdin.emit("end")
  }

  bool++

});


process.stdin.on("end", function() {

    a = arr.slice(1).join(" ").split(" ").map(function(index, elem) {
        return parseInt(index);
    })

    for(let i = 0;ia[j]){
                dp[i] = Math.max(dp[j]+1,dp[i])
            }
            longest = Math.max(dp[i],longest)
        }

    }

    console.log("最長(zhǎng)長(zhǎng)度為:"+longest);


      process.stdout.write("end");
});

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81370.html

相關(guān)文章

  • 基本算法思想:遞歸+分治+動(dòng)態(tài)規(guī)劃+貪心+回溯+分支限界

    摘要:代碼實(shí)現(xiàn)見(jiàn)下面評(píng)論對(duì)應(yīng)代碼動(dòng)態(tài)規(guī)劃基本思想和分治法基本思想有共同的地方,不同的是子問(wèn)題往往不是獨(dú)立的,有事母問(wèn)題要借助子問(wèn)題的解來(lái)判斷,因此把已經(jīng)計(jì)算好的問(wèn)題記錄在表格中,后續(xù)如果需要查詢一下,可以避免重復(fù)計(jì)算,這是動(dòng)態(tài)規(guī)劃的基本思想。 作者:心葉時(shí)間:2018-05-01 19:28 本文對(duì)應(yīng)github地址:https://github.com/yelloxing/... 以上實(shí)現(xiàn)...

    EscapedDog 評(píng)論0 收藏0
  • 前端跳槽面試算法——動(dòng)態(tài)規(guī)劃

    摘要:我記得大三參加騰訊的校招面試時(shí)只準(zhǔn)備了幾種常見(jiàn)的排序算法就足以應(yīng)對(duì)了,然而今年包括今日頭條在內(nèi)的多家大廠的前端筆試題目中都出現(xiàn)了貪心算法動(dòng)態(tài)規(guī)劃分治算法等進(jìn)階性的算法題目。本篇博客參考今日頭條銀國(guó)徽老師的《js版數(shù)據(jù)結(jié)構(gòu)與算法》Part1改編自《漫畫(huà)算法》原作者:程序員小灰前言眾所周知,與后臺(tái)開(kāi)發(fā)人員相比,算法是我們前端開(kāi)發(fā)人員的一個(gè)弱項(xiàng)。而近兩年隨著互聯(lián)網(wǎng)行業(yè)競(jìng)爭(zhēng)愈發(fā)激烈,市場(chǎng)上對(duì)前端崗位...

    mushang 評(píng)論0 收藏0
  • 從斐波那契數(shù)列看遞歸和動(dòng)態(tài)規(guī)劃

    摘要:大名鼎鼎的斐波那契數(shù)列,,,,,,,,使用數(shù)學(xué)歸納法可以看出其規(guī)律為。對(duì)于斐波那契數(shù)列的求解,有自頂向下的記憶化搜索遞歸和自下向上的迭代法,他們都使用了動(dòng)態(tài)規(guī)劃的思想。 大名鼎鼎的斐波那契數(shù)列:0,1,1,2,3,5,8,13,21...使用數(shù)學(xué)歸納法可以看出其規(guī)律為:f(n) = f(n-1) + f(n-2)。 遞歸 下面首先直接使用遞歸(JavaScript實(shí)現(xiàn))來(lái)求解第 n ...

    charles_paul 評(píng)論0 收藏0
  • 動(dòng)態(tài)規(guī)劃入門(以爬樓梯為例)

    摘要:動(dòng)態(tài)規(guī)劃算法通?;谝粋€(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)。動(dòng)態(tài)規(guī)劃有三個(gè)核心元素最優(yōu)子結(jié)構(gòu)邊界狀態(tài)轉(zhuǎn)移方程我們來(lái)看一到題目題目有一座高度是級(jí)臺(tái)階的樓梯,從下往上走,每跨一步只能向上級(jí)或者級(jí)臺(tái)階。 概念 動(dòng)態(tài)規(guī)劃(dynamic programming)是運(yùn)籌學(xué)的一個(gè)分支,是求解決策過(guò)程(decision process)最優(yōu)化的數(shù)學(xué)方法。動(dòng)態(tài)規(guī)劃算法通?;谝粋€(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)...

    cyixlq 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

includecmath

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<