动态规划演算法的优化技巧.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划演算法的优化技巧

福州第三中学 毛子青 第 PAGE 16页 / 共 NUMPAGES 16页 動態規劃演算法的優化技巧 福州第三中學 毛子青 [關鍵字] 動態規劃、 時間複雜度、優化、狀態 [摘要] 動態規劃是資訊學競賽中一種常用的程式設計方法,本文著重討論了運用動態規劃思想解題時時間效率的優化。全文分為四個部分,首先討論了動態規劃時間效率優化的可行性和必要性,接著給出了動態規劃時間複雜度的決定因素,然後分別闡述了對各個決定因素的優化方法,最後總結全文 [正文] 一、引言 動態規劃是一種重要的程式設計方法,在資訊學競賽中具有廣泛的應用。 使用動態規劃方法解題,對於不少問題具有空間耗費大、時間效率高的特點,因此人們在研究動態規劃解題時更多的注意空間複雜度的優化,運用各種技巧將空間需求控制在軟硬體可以承受的範圍之內。但是,也有一部分問題在使用動態規劃思想解題時,時間效率並不能滿足要求,而且演算法仍然存在優化的餘地,這時,就需要考慮時間效率的優化。 本文討論的是在確定使用動態規劃思想解題的情況下,對原有的動態規劃解法的優化,以求降低演算法的時間複雜度,使其能夠適用於更大的規模。 二、動態規劃時間複雜度的分析 使用動態規劃方法解題,對於不少問題之所以具有較高的時間效率,關鍵在於它減少了“冗餘”。所謂“冗餘”,就是指不必要的計算或重複計算部分,演算法的冗餘程度是決定演算法效率的關鍵。動態規劃在將問題規模不斷縮小的同時,記錄已經求解過的子問題的解,充分利用求解結果,避免了反復求解同一子問題的現象,從而減少了冗餘。 但是,動態規劃求解問題時,仍然存在冗餘。它主要包括:求解無用的子問題,對結果無意義的引用等等。 下面給出動態規劃時間複雜度的決定因素: 時間複雜度=狀態總數*每個狀態轉移的狀態數*每次狀態轉移的時間 HYPERLINK \l 附录 [1] 下文就將分別討論對這三個因素的優化。這裡需要指出的是:這三者之間不是相互獨立的,而是相互聯繫,矛盾而統一的。有時,實現了某個因素的優化???另外兩個因素也隨之得到了優化;有時,實現某個因素的優化卻要以增大另一因素為代價。因此,這就要求我們在優化時,堅持“全域觀”,實現三者的平衡。 三、動態規劃時間效率的優化 3.1 減少狀態總數 我們知道,動態規劃的求解過程實際上就是計算所有狀態值的過程,因此狀態的規模直接影響到演算法的時間效率。所以,減少狀態總數是動態規劃優化的重要部分,本節將討論減少狀態總數的一些方法。 1、改進狀態表示 狀態的規模與狀態表示的方法密切相關,通過改進狀態表示減小狀態總數是應用較為普遍的一種方法。 Raucous Rockers 演唱組(USACO`96) [問題描述] 現有n首由Raucous Rockers 演唱組錄製的珍貴的歌曲,計畫從中選擇一些歌曲來發行m張唱片,每張唱片至多包含t分鐘的音樂,唱片中的歌曲不能重疊。按下面的標準進行選擇: 這組唱片中的歌曲必須按照它們創作的順序排序; 包含歌曲的總數盡可能多。 輸入n,m,t,和n首歌曲的長度,它們按照創作順序排序,沒有一首歌超出一張唱片的長度,而且不可能將所有歌曲的放在唱片中。輸出所能包含的最多的歌曲數目。 (1≤n, m, t≤20) [演算法分析] 本題要求唱片中的歌曲必須按照它們創作順序排序,這就滿足了???態規劃的無後效性要求,啟發我們採用動態規劃進行解題。 分析可知,該問題具有最優子結構性質,即:設最優錄製方案中第i首歌錄製的位置是從第j張唱片的第k分鐘開始的,那麼前j-1張唱片和第j張唱片的前k-1分鐘是前1..i-1首歌的最優錄製方案,也就是說,問題的最優解包含了子問題的最優解。 設n首歌曲按照寫作順序排序後的長度為long[1..n],則動態規劃的狀態表示描述為: g[i, j, k],0≤i≤n,0≤j≤m,0≤kt,表示前i首歌曲,用j張唱片另加k分鐘來錄製,最多可以錄製的歌曲數目,則問題的最優解為g[n,m,0]。由於歌曲i有發行和不發行兩種情況,而且還要分另加的k分鐘是否能錄製歌曲i。這樣我們可以得到如下的狀態轉移方程和邊界條件: 當k≥long[i],i≥1時: g[i, j, k]=max{g[i-1,j,k-long[i]],g[i-1,j,k]} 當klong[i],i≥1時: g[i, j, k]=max{g[i-1,j-1,t-long[i]],g[i-1,j,k]} 規劃的邊界條件為: 當0≤kt時:g[0,0,k]=0; 我們來分析上述演算法的時間複雜度,上述演算法的狀態總數為O(n*m*t),每個狀態轉移的狀態數為O(1),每次狀態轉移的時間為

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档