网站大量收购闲置独家精品文档,联系QQ:2885784924

Data Structure for Disjoint Sets.ppt

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

Disjoint Sets Data Structure for Disjoint Sets 11.1 Disjoint-set 指令 Disjoint set 資料結構: 一個維護所有 disjoint dynamic sets 組成的大集合 S={S1, S2, …, Sk} 的資料結構。 每個集合都被一個 representative 所代表,而 representative 是該集合中的某一個元素。 此資料結構支援以下的指令: Make-Set(x): 創造一個新的集合 {x} Union(x, y): 把兩個分別包含 x, y 的集合聯集起來 Find-Set(x): 傳回一個指標指向包含 x 的集合的 representative。 註:在某些應用中,使用那一個元素當作 representative 並不會有影響,只要在每次變動之間,代表一個集合的 representative 皆是同一個元素即可。而在其它的應用中,必需依照特定的規則來選擇 representative,例如在集合中,選數字最小者當作 representative。 符號: n: 所有 Make-Set 指令的總數。 m: 所有 Make-Set、Union 及 Find-Set 指令的總數。 註: m ? n 且所有 Union 指令的總數最多不會超過 n-1。 disjoint-set 資料結構例子 disjoint-set 資料結構例子 (續) CONNECTED-COMPONENTS(G) 1 for each vertex v ? V[G] 2 do MAKE-SET(v) 3 for each edge (u,v) ? E[G] 4 do if FIND-SET(u) ≠ FIND-SET(v) 5 then UNION(u,v) disjoint-set 資料結構例子 (續) SAME-COMPONENT(u,v) 1 if FIND-SET(u) = FIND-SET(v) 2 then return TRUE 3 else return FALSE 11.2 Linked-list 表示法 簡單的 Union(x, y) 作法 把第一個序列串接在第二個之後。 m = 2n-1 個指令耗時 O(n2) 每個指令的 amortized time 為 O(n)。 A weighted-union heuristic 每一個 representative 存放其代表的序列的長度。 把較短的序列附加在較長的序列之後。 Theorem 1: 使用 weighted-union heuristic 後,假設 Make-Set 指令總數為 n 個,則 m 個連續的 Make-Set, Union, 與 Find-Set 指令耗時 O(m+nlg n) 證明 Theorem 1 執行 Make-Set(x) 後,x 所在的序列中只包含 x 一個元素。 在 x 的 representative pointer 執行第一次更新之後,x 所在的序列中包含了至少兩個元素。 證明 Theorem 11.1 (續) 接下來我們可以觀察到在對 x 的 representative 執第 k 次更新後,包含 x 的序列至少有 2k 個元素。 由於 k=O(lg n),所有 Union 指令所耗的時間最多為 O(nlg n)。 每個 Make-Set 及 Find-Set 指令皆耗時 O(1)。因此證明成立。 11.3 Disjoint-set forests 一些增進執行速度的技巧 Union by rank: 由較小的 tree 的 root 指向較大的 tree 的 root (依照 tree 的高度區分)。 rank[x]: x 的高度(由 x 到一 descendant leaf 的最長路徑的邊的數量) Path compression: 在執行 Find-Set(x) 對過程中,把所有find path 上的點指向 root。(不改變任何 rank 的值) 範例: Find-Set(a) with Path Compression Pseudo-code for disjoint-set forests MAKE-SET(x) 1 p[x] ? x 2 rank[x] ? 0 UNION(x,y) 1 LINK(FIND-SET(x), FIND-SET(y)) LINK(x,y) 1 if rank[x] rank[y] 2 then p[y] ? x 3 else p[x] ? y 4 if rank[x]

文档评论(0)

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

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

1亿VIP精品文档

相关文档