主题DynamicProgramming(II).pptVIP

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主题DynamicProgramming(II)

主題: Dynamic Programming (II) 經典問題 Longest Common Subsequence Longest Increasing Subsequence Matrix-chain Multiplication Optimal Polygon Triangulation 例題講解: H.89.4 歷年題目 Longest Common Subsequence Subsequence: 對字串 T 而言,T 的 subsequence 為從 T 中消掉某些字元可以得到的新字串 對數列也有類似的定義 Longest Common Subsequence 對兩個字串 X = x1x2…xn 和 Y = y1y2…ym求兩字串中相同且最長的 subsequence LCS: Optimal Substructure 若 xn = ym,則在 LCS 中有包含這兩個的解,至少跟沒有同時包含這兩個的任何解一樣好 LCS: Optimal Substructure (cont.) 所以若 xn = ym,就取這兩個為 LCS 的一部分,然後求 X[1…n-1] 和 Y[1…m-1] 的 LCS 來和這兩個合併 若 xn ? ym,則 LCS 就會是下面兩種其中之一的解 X[1…n] 和 Y[1…m-1] 的 LCS X[1…n-1] 和 Y[1…m] 的 LCS LCS: Recurrence 定義 L[i, j] 為 X[1…i] 和 Y[1…j] 之間的 LCS 長度 LCS: Build Table LCS: 節省空間 雖然 LCS 是二維 m?n 的 recurrence,但在 row-major (column-major) 順序下,每一個 row (column) 都只需要看前一個 row (column) 就可以算出 LCS 的長度,更前面的部分就用不到 若不需要 backtracking,則只需要兩個 row (column) 就足夠算出長度的最佳解 Longest Increasing Subsequence 給一串數列 a1, a2, …, an,從數列中找出最長且數字依序單調遞增的subsequence LIS: 直覺解法 依照定義,LIS 是原數列的 subsequence 若將 a1, a2, …, an 照大小重排會變成一個遞增數列 B = b1, b2, …, bn,由於 LIS 也是遞增數列,LIS 為 B 的 subsequence LIS 為原數列 A 和新數列 B (對 A 做 sort 所得) 兩者的 LCS LIS: Example Matrix Multiplication 一個大小為 a ? b 的矩陣與大小為 b ? c 的矩陣相乘,需要做 (a ? c) ? b 次乘法和加法,然後得到一個 a ? c 的矩陣 Matrix-chain Multiplication 給定 n 個需要連續相乘且大小不等的矩陣 A1 ? A2 ? … ? An,其中第 i 個矩陣 Ai 的大小為 pi-1 ? pi,為了使運算量最少,請求出最好的運算順序(用括號表示) Ex: (p0, p1, p2, p3) = (50, 5, 100, 10) MCM: Optimal Substructure 假設要先把 A1 ? … ? Ai 和 Ai+1 ? … ? An 兩個部分做完,然後這兩個部分再來對乘,則在此情形下最好的解必定是 先做 A1 ? … ? Ai 的 MCM, 再做 Ai+1 ? … ? An 的 MCM, 最後再把兩個完成的矩陣相乘 A1A2A3A4A5A6A7 MCM: Recurrence 令 m[i, j] 為做 Ai ? … ? Aj 的 MCM 所需的最少運算量 m[i, j] = min {m[i, k] + m[k+1, j] + pi-1pkpj} m[i, i] = 0 for all i MCM: Build Table MCM: Backtracking 在計算 m[i, j] 時所取的 k 表示從 Ai 到 Aj 之間最好的計算順序是先算 Ai 到 Ak,再算 Ak+1 到 Aj,最後兩邊相乘 ? (Ai ? … ? Ak)(Ak+1 ? … ? Aj) 用一個額外的陣列 c[i, j] 來幫每個 m[i, j] 記住其最好的 k Polygon Triangulation 給定一個 n 邊的凸多邊形,只要加入 n – 3 條互不相交的對角線,就可以把此多邊形切成 n – 2 個三角形 Triangulation 的 cost 按照不同題目的定義,可以給每一個 ?abc 一個 cost w(?abc ) 每種 tr

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档