国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動(dòng)態(tài)規(guī)劃——數(shù)塔問(wèn)題(三維數(shù)組的應(yīng)用)

這篇具有很好參考價(jià)值的文章主要介紹了動(dòng)態(tài)規(guī)劃——數(shù)塔問(wèn)題(三維數(shù)組的應(yīng)用)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?一、例題要求及理論分析

聲明:理論指導(dǎo)《算法設(shè)計(jì)與分析 第四版》

因?yàn)檫@個(gè)地方用到了三維數(shù)組,感覺很有意思就故意挑出來(lái)分享給大家(三維數(shù)組可以看成很多頁(yè)二維數(shù)組)

4.5.1認(rèn)識(shí)動(dòng)態(tài)規(guī)劃
數(shù)塔問(wèn)題:
如圖4-12所示的一個(gè)數(shù)塔,從頂層到底層或從底層到頂層,在每一結(jié)點(diǎn)可以選擇向左走或是向右走,要求找出一條路徑,使路徑上的數(shù)值和最大。
問(wèn)題分析:
(1)不難理解,這個(gè)問(wèn)題用貪婪算法有可能會(huì)找不到真正的最大和。以圖4-12為例就是如此。采用貪婪策略,無(wú)論是自上面下,還是自下而上,每次向下都選擇較大的一個(gè)數(shù)移動(dòng),則路徑和分別為:
三維數(shù)組 動(dòng)態(tài)規(guī)劃,# C語(yǔ)言算法,動(dòng)態(tài)規(guī)劃,算法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)塔圖
9+15+8+9+10=51(自上而下),19+2+10+12+9=52(自下而上)
都得不到最優(yōu)解,真正的最和是:
9+12+10+18+10=59
(2)要找到最大和的前提條件是,要能看到數(shù)塔的全貌,下面的算法設(shè)計(jì)都是以此為前提的。
在知道數(shù)塔全貌的前提下,可以用枚舉法或第5章將學(xué)習(xí)的搜索算法來(lái)解決問(wèn)題。但從圖中可以看出,在數(shù)塔層數(shù)為?n?時(shí),要枚舉的路徑為2^(n-1)條。在?n?稍大的情況下,需要列舉出的路徑條數(shù)是一個(gè)非常龐大的數(shù)目。所以枚舉法也不是一個(gè)適合此問(wèn)題的算法策略。
(3)這個(gè)問(wèn)題的原始數(shù)據(jù)是一個(gè)三角形的二維圖形,而且問(wèn)題的答案與各層數(shù)據(jù)間關(guān)系復(fù)雜,不適合用分治算法分解為與原問(wèn)題相似的子問(wèn)題。
下面就學(xué)習(xí)用動(dòng)態(tài)規(guī)劃解決此問(wèn)題。
算法設(shè)計(jì):動(dòng)態(tài)規(guī)劃設(shè)計(jì)過(guò)程如下。
1.階段劃分
從數(shù)塔問(wèn)題的特點(diǎn)來(lái)看,不難發(fā)現(xiàn)解決問(wèn)題的階段劃分,應(yīng)該是自下而上逐層決策。不同于貪婪策略的是做出的不是唯一決策,第一步對(duì)于第五層的8個(gè)數(shù)據(jù),做如下4次決策:
對(duì)經(jīng)過(guò)第四層2的路徑,在第五層的19,7中選擇19;
對(duì)經(jīng)過(guò)第四層18的路徑,在第五層的7,10中選擇10;
對(duì)經(jīng)過(guò)第四層9的路徑,在第五層的10,4中也選擇10;
對(duì)經(jīng)過(guò)第四層5的路徑,在第五層的4,16中選擇16。
這是一次決策過(guò)程,也是一次遞推過(guò)程和降階過(guò)程。因?yàn)橐陨系臎Q策結(jié)果將5階數(shù)塔題變?yōu)?階子問(wèn)題,遞推出第四層與第五層的和為:
21(2+19),28(18+10),19(9+10),21(5+16)

用同樣的方法還可以將4階數(shù)塔問(wèn)題變?yōu)?階數(shù)塔問(wèn)題……最后得到的1階數(shù)問(wèn)題,就是整個(gè)問(wèn)題的最優(yōu)解。
2、存儲(chǔ)、求解
1)原始信息存儲(chǔ)
原始信息有層數(shù)和數(shù)塔中的數(shù)據(jù),層數(shù)用一個(gè)整型變量 n 存儲(chǔ),數(shù)塔中的數(shù)據(jù)用二維數(shù)組 data ,存儲(chǔ)成如下的下三角陣:

9

12 15

10? 6? ?8

2? ?18? 9? 5

19? 7? 10? 4? 16

2)動(dòng)態(tài)規(guī)劃過(guò)程存儲(chǔ)
由于早期階段動(dòng)態(tài)規(guī)劃決策的結(jié)果是一組數(shù)據(jù),且本次的決策結(jié)果是下次決策的唯一依據(jù)(無(wú)后效性),所以必須在存儲(chǔ)每一次決策的結(jié)果,若僅僅是求最優(yōu)解,用一個(gè)一維數(shù)組存儲(chǔ)最新的決策結(jié)果即可;但若要同時(shí)找出最優(yōu)解的構(gòu)成或路徑,則必須用二維數(shù)組 d 存儲(chǔ)各階段的決策結(jié)果。根據(jù)上面的算法設(shè)計(jì),二維數(shù)組 d 的存儲(chǔ)內(nèi)容如下:

?d [ n ][j]= data [ n ][j]? ? j=1,2,……,n;
?i = n -1, n -2,…,1, j =1,2,…, i 時(shí)
?d [ i ][ j ]= max ( d [ i +1][j], d [ i +1][j+1])+ data [ i ][j]
最后 d [1][1]存儲(chǔ)的就是問(wèn)題的結(jié)果。

二、代碼

#include<stdio.h>
int main()
{
 int a [50][50][3], i , j , n ;
 printf (" please input the number of rows :\n");
 scanf("%d",&n);
 for ( i =1; i <= n ; i = i +1)
   for ( j =1; j <= i ; j = j +1)
    { 
        scanf("%d",&a [ i ][ j ][1]);
        a [ i ][ j ][2]= a [ i ][ j ][1];
        a [ i ][ j ][3]=0;
    }
 for ( i = n -1; i >=1; i = i -1)
   for ( j =1; j <= i ; j = j +1)
    if ( a [ i +1][ j ][2]> a [ i +1][ j +1][2])
        {
        a [ i ][ j ][2]= a [ i ][ j ][2]+ a [ i +1][ j ][2];
        a [ i ][ j ][3]=0;
        }
   else 
       {
       a [ i ][ j ][2]= a [ i ][ j ][2]+ a [ i +1][ j +1][2]; a [ i ][ j ][3]=1;
       }
   printf (" max =%d\n", a [1][1][2]);
    j =1;
for ( i =1; i <= n -1; i = i +1)
{ printf ( "%d->",a [ i ][ j ][1]);
 j = j + a [ i ][ j ][3];
}
 printf ("%d", a [ n ][ i ][1]);
 return 0;
}

三、運(yùn)行結(jié)果?

三維數(shù)組 動(dòng)態(tài)規(guī)劃,# C語(yǔ)言算法,動(dòng)態(tài)規(guī)劃,算法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777603.html

到了這里,關(guān)于動(dòng)態(tài)規(guī)劃——數(shù)塔問(wèn)題(三維數(shù)組的應(yīng)用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 貪心算法解決背包問(wèn)題和動(dòng)態(tài)規(guī)劃解決0-1背包問(wèn)題(c語(yǔ)言)

    貪心算法解決背包問(wèn)題和動(dòng)態(tài)規(guī)劃解決0-1背包問(wèn)題(c語(yǔ)言)

    運(yùn)行結(jié)果如下: 運(yùn)行結(jié)果如下: 總結(jié): 貪心算法: 每一步都做出當(dāng)時(shí)看起來(lái)最佳的選擇,也就是說(shuō),它總是做出局部最優(yōu)的選擇。 貪心算法的設(shè)計(jì)步驟: 對(duì)其作出一個(gè)選擇后,只剩下一個(gè)子問(wèn)題需要求解。 證明做出貪心選擇后,原問(wèn)題總是存在最優(yōu)解,即貪心選擇總是安

    2024年02月04日
    瀏覽(20)
  • 動(dòng)態(tài)規(guī)劃算法解決背包問(wèn)題,算法分析與C語(yǔ)言代碼實(shí)現(xiàn),時(shí)間效率解析

    動(dòng)態(tài)規(guī)劃算法解決背包問(wèn)題,算法分析與C語(yǔ)言代碼實(shí)現(xiàn),時(shí)間效率解析

    ??【數(shù)據(jù)結(jié)構(gòu)與算法】專題正在持續(xù)更新中,各種數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建原理與運(yùn)用?,經(jīng)典算法的解析?都在這兒,歡迎大家前往訂閱本專題,獲取更多詳細(xì)信息哦?????? ??本系列專欄 - ?數(shù)據(jù)結(jié)構(gòu)與算法_勾欄聽曲_0 ??歡迎大家 ??? ?點(diǎn)贊?? ?評(píng)論?? ?收藏?? ??個(gè)人主

    2023年04月16日
    瀏覽(18)
  • 3.數(shù)組算法、動(dòng)態(tài)規(guī)劃

    3.數(shù)組算法、動(dòng)態(tài)規(guī)劃

    Array是一個(gè)容器,可以容納固定數(shù)量的項(xiàng)目,這些項(xiàng)目應(yīng)該是相同的類型。大多數(shù)數(shù)據(jù)結(jié)構(gòu)都使用數(shù)組來(lái)實(shí)現(xiàn)其算法。以下是理解Array概念的重要術(shù)語(yǔ)。 元素 - 存儲(chǔ)在數(shù)組中的每個(gè)項(xiàng)稱為元素。 索引 - 數(shù)組中元素的每個(gè)位置都有一個(gè)數(shù)字索引,用于標(biāo)識(shí)元素。 可以使用不同語(yǔ)

    2024年02月16日
    瀏覽(26)
  • 【動(dòng)態(tài)規(guī)劃】?jī)蓚€(gè)數(shù)組問(wèn)題

    【動(dòng)態(tài)規(guī)劃】?jī)蓚€(gè)數(shù)組問(wèn)題

    題目鏈接 狀態(tài)表示 dp[i][j] 表示 s1 0 到 i 區(qū)間內(nèi),以及時(shí)s2 0 到 j 區(qū)間內(nèi)所有的子序列中,最長(zhǎng)的公共子序列 狀態(tài)轉(zhuǎn)移方程 根據(jù)最后一個(gè)位置的請(qǐng)款分類討論。 初始化 關(guān)于字符串的dp問(wèn)題,空串是有研究意義的。引入空串的概念之后會(huì)方便我們的初始化 這里還可以使用之前

    2024年02月11日
    瀏覽(27)
  • 藍(lán)橋杯-動(dòng)態(tài)規(guī)劃-子數(shù)組問(wèn)題

    藍(lán)橋杯-動(dòng)態(tài)規(guī)劃-子數(shù)組問(wèn)題

    目錄 一、乘積最大數(shù)組 二、乘積為正數(shù)的最長(zhǎng)子數(shù)組長(zhǎng)度 三、等差數(shù)列劃分 四、最長(zhǎng)湍流子數(shù)組 心得: 最重要的還是狀態(tài)表示,我們需要根據(jù)題的意思,來(lái)分析出不同的題,不同的情況,來(lái)分析需要多少個(gè)狀態(tài) 乘積最大數(shù)組 1.狀態(tài)表示 dp[i]:到達(dá)i位置的最大乘積子數(shù)組。

    2024年02月05日
    瀏覽(20)
  • c++ 子數(shù)組動(dòng)態(tài)規(guī)劃問(wèn)題

    1.最大子數(shù)組和?? 力扣 給你一個(gè)整數(shù)數(shù)組 nums ,請(qǐng)你找出一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 子數(shù)組 是數(shù)組中的一個(gè)連續(xù)部分。 示例 1: 示例 2: 示例 3: 2.環(huán)形子數(shù)組最大和 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長(zhǎng)平臺(tái) 給

    2024年02月12日
    瀏覽(20)
  • 兩個(gè)數(shù)組的dp問(wèn)題(2)--動(dòng)態(tài)規(guī)劃

    兩個(gè)數(shù)組的dp問(wèn)題(2)--動(dòng)態(tài)規(guī)劃

    ??一)交錯(cuò)字符串: 97. 交錯(cuò)字符串 - 力扣(LeetCode) 一)確定一個(gè)狀態(tài)標(biāo)識(shí): 如果我選擇s1的一段區(qū)間,再進(jìn)行選擇s2得一段區(qū)間,那么s3這個(gè)字符串的長(zhǎng)度就已經(jīng)固定 預(yù)處理:在s1字符串s2字符串和s3字符串前面加上一個(gè)虛擬字符,讓下標(biāo)從1開始進(jìn)行計(jì)數(shù) 如果要是從1號(hào)位置開始進(jìn)

    2024年02月15日
    瀏覽(20)
  • 【動(dòng)態(tài)規(guī)劃】【數(shù)學(xué)】【C++算法】805 數(shù)組的均值分割

    【動(dòng)態(tài)規(guī)劃】【數(shù)學(xué)】【C++算法】805 數(shù)組的均值分割

    視頻算法專題 動(dòng)態(tài)規(guī)劃匯總 數(shù)學(xué) 給定你一個(gè)整數(shù)數(shù)組 nums 我們要將 nums 數(shù)組中的每個(gè)元素移動(dòng)到 A 數(shù)組 或者 B 數(shù)組中,使得 A 數(shù)組和 B 數(shù)組不為空,并且 average(A) == average(B) 。 如果可以完成則返回true , 否則返回 false 。 注意:對(duì)于數(shù)組 arr , average(arr) 是 arr 的所有元素的和

    2024年02月20日
    瀏覽(24)
  • C++算法 —— 動(dòng)態(tài)規(guī)劃(7)兩個(gè)數(shù)組的dp

    C++算法 —— 動(dòng)態(tài)規(guī)劃(7)兩個(gè)數(shù)組的dp

    每一種算法都最好看完第一篇再去找要看的博客,因?yàn)檫@樣會(huì)幫你梳理好思路,看接下來(lái)的博客也就更輕松了。當(dāng)然,我也會(huì)盡量在寫每一篇時(shí)都可以不懂這個(gè)算法的人也能邊看邊理解。 動(dòng)規(guī)的思路有五個(gè)步驟,且最好畫圖來(lái)理解細(xì)節(jié),不要怕麻煩。當(dāng)你開始畫圖,仔細(xì)閱讀

    2024年02月07日
    瀏覽(24)
  • 力扣 53. 最大子數(shù)組和(C語(yǔ)言+分治遞歸、動(dòng)態(tài)規(guī)劃)

    力扣 53. 最大子數(shù)組和(C語(yǔ)言+分治遞歸、動(dòng)態(tài)規(guī)劃)

    ????????給你一個(gè)整數(shù)數(shù)組? nums ?,請(qǐng)你找出一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 子數(shù)組? 是數(shù)組中的一個(gè)連續(xù)部分。 ????????示例 1: ????????示例 2: ????????示例 3: (1)分治遞歸 ????????分治法的核心部分。

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包