c7 bfs tree, mst

57
TÍNH TOÁN PHÂN TÁN Nguyễn Hữu Đức ([email protected]) Bộ môn HTTT, Viện CNTT & TT Xây dựng cây khung

Upload: phuc-thanh

Post on 13-Nov-2014

190 views

Category:

Education


0 download

DESCRIPTION

Copy!

TRANSCRIPT

Page 1: C7 bfs tree, mst

TÍNH TOÁN PHÂN TÁN

Nguyễn Hữu Đức ([email protected])Bộ môn HTTT, Viện CNTT & TT

Xây dựng cây khung

Page 2: C7 bfs tree, mst

Cây khung (spanning tree)

Đồ thị vô hướng G = {V,E} Cây khung G’ của đồ thị G

Đồ thị con G’ = {V, E’} Phủ tất cả các đỉnh của G Liên thông |E’| = |V| - 1

Page 3: C7 bfs tree, mst

Cây khung (spanning tree)

Ứng dụng Broadcast, convergecast, routing,…

Một số cây khung đặc biệt BFS DFS MST

Page 4: C7 bfs tree, mst

Xây dựng cây khung

Giải thuật phân tán Input: định danh của các nút/tiến trình láng giềng trong

đồ thị kết nối Output: định danh của nút cha

Page 5: C7 bfs tree, mst

Giải thuật Flooding

Giải thuật Flooding xây dựng cây khung Nút gốc phát tán thông tin (gửi thông điệp) tới các nút

còn lại Mỗi nút lần đầu tiên nhận được thông điệp sẽ xác định

nút cha là nút gửi thông điệp, sau đó lan truyền thông điệp nhận được tới các nút láng giềng còn lại

Sau lần nhận thông điệp đầu tiên, bỏ qua các thông điệp khác gửi đến

Page 6: C7 bfs tree, mst

Giải thuật Flooding

Nhận xét Xây dựng được cây khung với điều kiện mạng kết nối là

liên thông Điều kiện dừng

Về nguyên tắc, mỗi nút có thể dừng ngay sau khi nhận được thông điệp đầu tiên và lan truyền nó tới các nút láng giềng

Tuy nhiên, nếu tiến trình dừng theo cách này thì có thể xảy ra tình huống các tiến trình láng giềng khác gửi thông điệp tới mà không có tiến trình nhận, trạng thái dừng toàn cục không được xác định

Giải pháp 1. Bỏ qua lỗi gửi thông điệp khi không có tiến trình nhận (trạng thái dừng toàn cục cũng chưa được xác định)

Giải pháp 2. Xác định điều kiện dừng toàn cục và lan truyền điều kiện dừng tới các nút trong mạng.

Page 7: C7 bfs tree, mst

Giải thuật Flooding

Giải thuật sửa đổi Thiết kế theo cơ chế sự kiện

Trạng thái tiến trình status: {in, out} parent children N (số tiến trình đã trả lời)

Khởi tạo Nút gốc:

status = in, parent = pid, chidren = {}, n = 0 Gửi thông điệp CONNECT tới các tiến trình hàng xóm

Nút khác status = out, parent = nil, chidren = {}, n = 0

Page 8: C7 bfs tree, mst

Giải thuật Flooding

Giải thuật sửa đổi Thiết kế theo cơ chế sự kiện

Khi nhận được thông điệp CONNECT từ tiến trình p Nếu status = in, gửi thông điệp REJECT đến p Nếu status = out

status = in, parent = p Gửi thông điệp CONNECT đến các tiến trình hàng xóm (trừ tiến trình p) Nếu không có tiến trình hàng xóm nào khác, gửi thông điệp ACCEPT đến tiến

trình p

Page 9: C7 bfs tree, mst

Giải thuật Flooding

Giải thuật sửa đổi Thiết kế theo cơ chế sự kiện

Khi nhận được thông điệp ACCEPT/REJECT từ tiến trình p Nút gốc:

N = n + 1 Nếu n = số lượng hàng xóm, gửi thống điệp TERMINATE tới các children và

kết thúc Nút khác:

N = n + 1 Với thông điệp ACCEPT, thêm p vào children Nếu n = số lượng hàng xóm – 1, gửi thông điệp ACCEPT đến parent

Page 10: C7 bfs tree, mst

Giải thuật Flooding

Giải thuật sửa đổi Thiết kế theo cơ chế sự kiện

Khi nhận được thông điệp TERMINATE từ tiến trình p Gửi thông điệp TERMINATE tới các chidren và kết thúc

Page 11: C7 bfs tree, mst

Cây khung BFS

Là cây khung có một nút gốc xác định Các nút con của nút gốc là láng giềng của nút gốc Các nút cháu của nút gốc là láng giềng của láng

giềng của nút gốc V.v

Page 12: C7 bfs tree, mst

Cây khung BFS

Giải thuật Flooding chỉ có thể tạo ra được cây khung BFS trong trường hợp mạng đồng bộ (quá trình gửi/nhận của từng nút được thực hiện trong từng pha đồng bộ)

Trong trường hợp mạng không đồng bộ, tính chất BFS có thể bị phá vỡ do độ trễ của quá trình truyền thông/xử lý

Page 13: C7 bfs tree, mst

Cây khung BFS

Giải thuật BFS trên mạng không đồng bộ Ý tưởng: Việc xây dựng cây BFS có thể được thực hiện

theo nhiều bước. Bước thứ i kết nạp các nút có độ sâu i + 1 vào cây khung Dijkstra: kết nạp các nút “biên” Bellman-Ford: Cập nhật nút cha theo khoảng cách tối ưu

Page 14: C7 bfs tree, mst

Cây khung BFS

Giải thuật BFS trên mạng không đồng bộ Ý tưởng: Việc xây dựng cây BFS có thể được thực hiện theo nhiều bước. Bước thứ i kết

nạp các nút có độ sâu i + 1 vào cây khung. Gọi cây Tk là cây được sử dụng ở bước thứ k. T1 là cây chỉ có nút gốc

Giải thuật Dijkstra Nút gốc khởi tạo pha p bằng cách quảng bá thông điệp “start p” tới các nút trong cây Tp Lá của cây Tp (các nút được phát hiện trong pha trước) gửi “start p+1” đến các nút láng giềng

chưa từng giao tiếp Nút v lần đầu nhận được thông điệp “start p+1” sẽ trở thành lá của cây Tp+1 (đánh dấu nút

cha), gửi thông điệp trả lời “ack” cho nút cha. Nếu đã nhận được thông điệp “start p+1” thì trả lời “nack”

Lá của cây Tp thu thập tất cả các thông điệp trả lời và gửi về nút gốc (convergecast) để có thể bắt đầu bước tiếp theo

Giải thuật kết thúc khi không có nút mới được kết nạp

Page 15: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Thiết kế theo cơ chế sự kiện

Trạng thái tiến trình status: {inner, leaf, outer} parent children N (số tiến trình đã trả lời)

Khởi tạo Nút gốc:

status = leaf, parent = pid, chidren = {}, n = 0 Gửi thông điệp START tới các tiến trình láng giềng

Nút khác status = outter, parent = nil, chidren = {}, n = 0

Page 16: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Khi nhận được thông điệp START từ tiến trình p

Nếu status = inner m = 0 // Đếm số tiến trình trả lời trong CONVERGE nl = 0 // Đếm số nút lá mới kết nạp gửi thông điệp START đến các tiến trình trong children

Nếu status = leaf n = 0 // đếm số nút trả lời Gửi thông điệp CONNECT đến các tiến trình hàng xóm (trừ tiến trình p) Nếu không có tiến trình hàng xóm nào khác, gửi thông điệp CONVERGE 0 đến

tiến trình p

Page 17: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Khi nhận được thông điệp CONNECT từ tiến trình p

Nếu status = outer status = leaf, parent = p Trả về thông điệp ACCEPT cho tiến trình p

Nếu status <> outer Trả về thông điệp REJECT cho tiến trình p

Page 18: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Khi nhận được thông điệp ACCEPT/REJECT từ tiến trình p

Nếu status = leaf n = n + 1 Nếu thông điệp là ACCEPT, bổ sung p vào danh sách children Nếu n = số láng giềng – 1 // đã nhận đủ phản hồi từ các láng giềng

status = inner gửi thông điệp CONVERGE m tới p với m là số tiến trình trong children

Page 19: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Khi nhận được thông điệp CONVERGE k từ tiến trình p

m = m + 1 nl = nl + k Nếu m = số tiến trình con trong children

Nếu là tiến trình gốc (id = parent) và nl = 0 Gửi thông điệp TERMINATE tới các tiến trình con trong children Kết thúc

Nếu là tiến trình gốc và nl <> 0 m = 0, nl = 0 Gửi thông điệp START đến các tiến trình con trong children

Nếu không phải tiến trình gốc gửi thông điệp CONVERGE nl tới parent

Page 20: C7 bfs tree, mst

Giải thuật BFS

Giải thuật Dijkstra Khi nhận được thông điệp TERMINATE từ tiến trình p

Gửi thông điệp TERMINATE tới các tiến trình con trong children Kết thúc

Page 21: C7 bfs tree, mst

Cây khung BFS

Giải thuật BFS trên mạng không đồng bộ Giải thuật Dijkstra

Độ phức tạp thời gian: O(D2) do chi phí của convergecast là O(D) với D là đường kính của đồ thị, có tối đa D pha

Độ phức tạp thông điệp: O(m+nD) với m là số cung, n là số nút Chi phí gửi thông điệp của convergecast là O(n) Với mỗi cung có tối đa hai thông điệp “start” và 1 thông điệp “ack/nack”

Page 22: C7 bfs tree, mst

Cây khung BFS

Giải thuật BFS trên mạng không đồng bộ Giải thuật Bellman-Ford

Mỗi nút u lưu trữ một giá trị du là khoảng cách tới nút gốc. Ban đầu dr = 0 và du=∞ cho các nút còn lại

Gốc gửi thông điệp “1” tới các láng giềng Nếu một nút nhận được thông điệp “y” và y <du

du = y

Đổi nút cha Gửi “y+1” đến các láng giềng khác

Page 23: C7 bfs tree, mst

Cây khung BFS

Giải thuật BFS trên mạng không đồng bộ Giải thuật Bellman-Ford

Độ phức tạp thời gian: O(D) – Tốt hơn so với giải thuật Dijkstra Độ phức tạp thông điệp O(mn) – Kém hơn so với giải thuật Dijkstra

Page 24: C7 bfs tree, mst

Cây khung nhỏ nhất (MST)

Đồ thị có trọng số G = <V,E> trong đó mỗi cung e ϵ E có trọng số w(e)

1

92

14

8

6

310 115

7

164

15

13

12

6)( ew

17

18

Page 25: C7 bfs tree, mst

Cây khung nhỏ nhất (MST)

Cây khung nhỏ nhất là cây khung có tổng trọng số của các cung là nhỏ nhất

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 26: C7 bfs tree, mst

Cây khung nhỏ nhất (MST)

Mảnh (fragment) của cây khung là một cây con (liên thông) của cây khung

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 27: C7 bfs tree, mst

Cây khung nhỏ nhất (MST)

Cung ra nhỏ nhất (minimum weight outgoing edge – MWOE) của một mảnh là cung kề với mảnh, không tạo thành chu trình và có trọng số nhỏ nhất

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 28: C7 bfs tree, mst

Cây khung nhỏ nhất (MST)

Tính chất 1. Thêm một MWOE vào một mảnh của cây khung MST sẽ thu được một

mảnh của cây MST (có thể khác) Tính chất 2.

Nếu trọng số của các cung đều khác nhau thì chỉ có duy nhất 1 MST

Page 29: C7 bfs tree, mst

Giải thuật PRIM (tuần tự)

Bắt đầu xây dựng cây khung với một mảnh là 1 nút nào đó Kết nạp dần các MWOE vào mảnh cho tới khi không thêm được nữa

Page 30: C7 bfs tree, mst

Giải thuật PRIM (tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 31: C7 bfs tree, mst

Giải thuật PRIM (tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 32: C7 bfs tree, mst

Giải thuật PRIM (tuần tự)

1

92

14

8

6

310 115

4

15

13

12

18

7

16

Page 33: C7 bfs tree, mst

Giải thuật PRIM (tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 34: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Bắt đầu với một mảnh là một nút gốc r Lần lượt kết nạp các MWOE

Nút gốc khởi động quá trình tìm kiếm MWOE Broadcast tới các nút lá Các nút lá tìm MWOE cục bộ trong các láng giềng Các nút lá convergecast về nút gốc để lựa chọn MWOE

Nút gốc thông báo việc bổ sung thêm MWOE vào mảnh

Page 35: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Trạng thái status : {in, out} parent children mwoe : thông tin về mwoe cục bộ

next: nút kế tiếp dẫn đến mwoe cục bộ ưeight: trọng số của mwoe

Khởi tạo Nút gốc

status = in parent = root, children = {} mwoe.next = nil Nút gốc gửi thông điệp SEARCH đến chính nó

Nút khác status = out parent = nil, children = {}

Page 36: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Nhận thông điệp SEARCH từ nút p Nếu status = in // Các nút trong mảnh

n = 0, mwoe .next = nil, mwoe.weight = INFINITY Gửi thông điệp SEARCH tới các nút hàng xóm (trừ nút cha) Nếu không có nút hàng xóm nào,

Nếu là nút gốc, kết thúc với một nút trong cây khung Nếu không phải là gốc, gửi thông điệp MWOE(INFINITY) tới nút cha

Nếu status = out // Nút ngoài mảnh Gửi thông điệp MWOE(w(p,id)) đến p

Page 37: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Nhận thông điệp MWOE(w) từ nút p n = n +1 mwoe = min(mwoe, (p,w))

min(mwoe,(_,INFINITY)) = mwoe min((_,INFINITY),mwoe) = mwoe min((n1,w1),(n2,w2)) = (n1,w1) nếu w1 < w2 min((n1,w1),(n2,w2)) = (n2,w2) nếu w1 >= w2

Nếu n = số hàng xóm -1 Nếu là nút gốc và mwoe.next = nil

Gửi thông điệp TERMINATE tới các nút con trong children

Nếu là nút gốc và mwoe.next <> nil Gửi thông điệp CONNECT tới mwoe.next

Nếu không phải là gốc Gửi thông điệp MWOE (mwoe.weight) tới nút cha

Page 38: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Nhận thông điệp CONNECT từ nút p Nếu status = out // Nút mới kết nạp

status = in, parent = p, children = {} Gửi thông điệp CONNECT ED tới p

Nếu status = in Gửi thông điệp CONNECT đến mwoe.next

Page 39: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Nhận thông điệp CONNECTED từ nút p Thêm p vào danh sánh children (nếu chưa có) Nếu là nút gốc

Gửi thông điệp SEARCH đến chính nó

Nếu không phải nút gốc Gửi thông điệp CONNECTED đến nút cha

Page 40: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Nhận thông điệp TERMINATE từ nút p Gửi thông điệp TERMINATE đến các nút con trong children Dừng tiến trình

Page 41: C7 bfs tree, mst

Giải thuật PRIM (phân tán)

Độ phức tạp tính toán của giải thuật O(N2)

Page 42: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

Ban đầu mỗi nút là một mảnh Hợp nhất các mảnh

Tìm MWOE nhỏ nhất của các mảnh Hợp nhất hai mảnh kề với MWOE

Page 43: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 44: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 45: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 46: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 47: C7 bfs tree, mst

Giải thuật Kruskal (Tuần tự)

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 48: C7 bfs tree, mst

Giải thuật GHS(Gallagher, Humblet, Spira)

Ban đầu mỗi nút là một mảnh Hợp nhất các mảnh theo các bước đồng bộ

Mỗi mảnh tìm MWOE của mình (đồng bộ bởi gốc của từng mảnh) Các mảnh kề với MWOE được hợp nhất lại

Page 49: C7 bfs tree, mst

Giải thuật GHS

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Pha 0: Khởi tạo – Mỗi nút là một mảnh

Page 50: C7 bfs tree, mst

Giải thuật GHS

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Pha 1. Tìm kiếm MWOE cho mỗi mảnh

Page 51: C7 bfs tree, mst

Giải thuật GHS

1

92

14

8

6

310 115

4

15

13

12

17

18

Root

RootRoot

Root

Asymmetric MWOE

Symmetric MWOE

Pha 1. Hợp nhất các mảnh kề với MWOE và chọn gốc mới

Page 52: C7 bfs tree, mst

Giải thuật GHS

Pha 2. Tìm kiếm MWOE Cho mỗi mảnh

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 53: C7 bfs tree, mst

Giải thuật GHS

Pha 2. Hợp nhất các mảnh kề với MWOE và chọn gốc mới

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16Root

Root

Page 54: C7 bfs tree, mst

Giải thuật GHS

Pha 3. Tìm kiếm MWOE Cho mỗi mảnh

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 55: C7 bfs tree, mst

Giải thuật GHS

Pha 3. Hợp nhất các mảnh kề với MWOE và chọn gốc mới

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Root

Page 56: C7 bfs tree, mst

Giải thuật GHS

CÂY MST thu được

1

92

14

8

6

310 115

4

15

13

12

17

18

7

16

Page 57: C7 bfs tree, mst

Giải thuật GHS(Gallagher, Humblet, Spira)

Nguyên lý hợp nhất các mảnh Các mảnh kề với MWOE được hợp nhất với nhau Một trong hai nút đầu của MWOE đối xứng sẽ được lựa chọn làm gốc của

mảnh mới

Cách thức thực hiện Mỗi mảnh có định danh là (core, level)

core định danh của nút gốc (khởi tạo là pid) level thể hiện mức ưu tiên của mảnh

Khi mảnh F1 phát hiện một cung MWOE đi tới mảnh F2 Nếu F1.level < F2.level, mảnh F1 sẽ hợp nhất với F2 (core và level của F1 sẽ thay bằng core và

level của F2) Nếu F1.level = F2.level, hai mảnh F1 và F2 sẽ hợp nhất với nhau để thành một mảnh mới với core

là định danh lớn nhất trong hai đầu mút của cung MWOE và level = F1.level + 1 Nếu F1.level > F2.level, F1 sẽ chờ đến khi một trong hai điều kiện trên thỏa mãn