- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主题: Dynamic Programming (III)
主題: Dynamic Programming (III) DP 的進階概念 DP 與 multi-stage graph 的關係 DAG shortest path problem multi-dimensional DP multi-recurrence DP 例題講解: A.10604, H.91.6 歷年題目 DAG shortest path problem 給定一個 directed acyclic graph (DAG),每條 edge 都有 weight (可能為負數),求從起點 s 到其他 vertex 的 shortest path 解題方法: DP 首先對給定的 DAG 進行 topological sort 使原圖得成為一個 multi-stage graph vertices 按照 stage 由小到大排好 edges 全部由小的 stage 指向大的 stage 解題方法 (cont.) 若 vertex u 有 edge 指向 vertex v,則 u 為 v 的 predecessor 從 s 出發到任一個 vertex v 的可能走法,必然會經過某個 v 的 predecessor v 的 distance 需要其 predecessors 的 distance 解題方法 (cont.) 要算出 v 的 distance,就要先算出每一個 predecessor u 的 distance,再加上 u 到 v 的 edge weight,然後從每個 predecessor 算出的總合距離中找出最小值 dist[v] = min {dist[u] + weight(u, v), ?} Boundary condition: dist[s] = 0 Example (bottom-up computation) DP 與 multi-stage graph 的關係 DP 的特徵在於先把子問題的解算出來,再集合起來算出原問題的解,這種關係可以被表示成一個 multi-stage graph (不見得只能用格子之間的關係來敘述) 把每一個子問題變成一個 vertex 當子問題 A 需要用到子問題 B 的解,則 vertex A 有 edge 指向 vertex B (edge 可加上適當的 weight) recurrence 描述每一個 vertex 和其 predecessors 的關係 (top-down) 計算時,由小到大一個一個 stage 完成 (bottom-up computation) Critical path problem 給定一個 DAG,每條 edge 都有 weight,在 graph 中找出一條最長的 path 沒有規定此 path 的起點 vertex Solution 將每一個 vertex 都設為起點 (distance 為 0),然後每一個 vertex 去計算可以往前連的多遠,recurrence 如下:dist[v] = max {dist[u] + weight(u, v), 0} Critical path 也是一個 DP problem,其最佳解的長度即為所有 vertex 中,可以往前連到的最遠距離: max{dist(v)} for all v Example: LCS Longest increasing sequence 之前教的做法是用原來的 sequence 和 sorted sequence 做 LCS 現在可以把每一個數字當成一個 vertex,若第 i 個數字 ? 第 j 個數字 (i j),則 i 到 j 有 edge 且 weight = 1,如此會直接形成一個 multi-stage graph,其最佳解可經由 critical path 得到 Recurrence: LIS length[i] = max {length[k]} + 1 雖然此 recurrence 一樣是 O(n2) 的時間,但 max 的部分還可以做的更快 從第一個 vertex (數字) 開始依序往後計算 用陣列 last 輔助算出每個 vertex i 的 length(i) 修正陣列 last 的內容 Last 陣列 Last[j]: 存放現在已知所有 length = j 的 paths 中,終點 vertices 中值最小的數字 計算 length(i) 要算 vertex i 的 length,可以用 i 的數字 ai 在 last 中進行 binary search (last 中的數字一定會呈現遞增順序) 當 binary search 使得 last[j] ? ai la
文档评论(0)