Tải bản đầy đủ (.ppt) (29 trang)

chương 9 cây khung nhỏ nhất

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (129.21 KB, 29 trang )

Caây Khung Nhoû Nhaát
13.11.2004 Ch. 9: Cay khung nho
nhat
2
Cây khung nhỏ nhất
ª
Cho

một đồ thò liên thông, vô hướng G = (V, E )

một hàm trọng số

w : E → R
ª
Tìm một tập con không chứa chu trình T

E nối tất cả các đỉnh sao
cho tổng các trọng số

w(T) = ∑
(u, v) ∈ T

w(u, v)

là nhỏ nhất.

Tập T làø một cây, và được gọi là một cây khung nhỏ nhất.
ª
Bài toán tìm cây khung nhỏ nhất: bài toán tìm T.
13.11.2004 Ch. 9: Cay khung nho
nhat


3
Cây khung nhỏ nhất (tiếp)
ª
Giải bài toán tìm cây khung nhỏ nhất

Giải thuật của Kruskal

Giải thuật của Prim.
13.11.2004 Ch. 9: Cay khung nho
nhat
4
Cây khung nhỏ nhất: ví dụ
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
°
Tập các cạnh xám là một cây khung nhỏ nhất

°
Trọng số tổng cộng của cây là 37.
°
Cây là không duy nhất: nếu thay cạnh (b, c) bằng cạnh (a, h)
sẽ được một cây khung khác cũng có trọng số là 37.
13.11.2004 Ch. 9: Cay khung nho
nhat
5
Cạnh an toàn
ª
Cho một đồ thò liên thông, vô hướng G = (V, E ) và một hàm trọng số
w : E

R. Tìm một cây khung nhỏ nhất cho G!
ª
Giải bài toán bằng một chiến lược greedy: nuôi một cây khung lớn
dần bằng cách thêm vào cây từng cạnh một.
ª
Đònh nghóa cạnh an toàn
Nếu A là một tập con của một cây khung nhỏ nhất nào đó, nếu (u, v)
là một cạnh của G sao cho tập A

{(u, v)} vẫn còn là một tập con
của một cây khung nhỏ nhất nào đó, thì (u, v) là một cạnh an toàn
cho A.
13.11.2004 Ch. 9: Cay khung nho
nhat
6
Một giải thuật tổng quát (generic)
ª

Một giải thuật tổng quát (generic) để tìm một cây khung nhỏ nhất

Input: một đồ thò liên thông, vô hướng G

một hàm trọng số w trên các cạnh của G

Output: Một cây khung nhỏ nhất cho G.
GENERIC-MST(G, w)
1 A ← ∅
2 while A không là một cây khung nhỏ nhất
3 do tìm cạnh (u, v) an toàn cho A
4 A ← A ∪ {(u, v)}
5 return A
13.11.2004 Ch. 9: Cay khung nho
nhat
7
Phép cắt

Các khái niệm quan trọng
ª
Một phép cắt (S, V

S) của G = (V, E ) là một phân chia (partition)
của V.

Ví dụ: S = {a, b, d, e} trong đồ thò sau.
ª
Một cạnh (u, v)

E xuyên qua (cross) một phép cắt (S, V


S) nếu
một đỉnh của nó nằm trong S và đỉnh kia nằm trong V

S.

Ví dụ: cạnh (b, c).
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
S ↑
V

S ↓
13.11.2004 Ch. 9: Cay khung nho
nhat
8

Cạnh nhẹ (light edge)

Các khái niệm quan trọng (tiếp)
ª
Một phép cắt bảo toàn tập các cạnh A (respects A) nếu không có
cạnh nào của A xuyên qua phép cắt.
ª
Một cạnh là một cạnh nhẹ vượt qua phép cắt nếu trọng số của nó là
nhỏ nhất trong mọi trọng số của các cạnh xuyên qua phép cắt. Ví
dụ: cạnh (c, d).
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
S ↑
V

S ↓

13.11.2004 Ch. 9: Cay khung nho
nhat
9
Nhận ra một cạnh an toàn

Đònh lý 24.1

Cho
°
G = (V, E) là một đồ thò liên thông, vô hướng
°
w là một hàm trọng số trên E
°
A là một tập con của một cây khung nhỏ nhất cho G
°
(S, V − S) là một phép cắt bất kỳ của G bảo toàn A
°
(u, v) là một cạnh nhẹ vượt qua (S, V − S)

cạnh (u, v) là an toàn cho A.

Chứng minh
13.11.2004 Ch. 9: Cay khung nho
nhat
10
Nhận ra một cạnh an toàn

(tiếp)
°
S: tập các đỉnh đen, V − S: tập các đỉnh trắng

°
Các cạnh của một cây khung nhỏ nhất T được vẽ ra trong hình,
còn các cạnh của G thì không
°
A: tập các cạnh xám
°
Cạnh (u, v) là cạnh nhẹ xuyên qua phép cắt (S, V − S).
°
p là đường đi duy nhất từ u đến v trong T.
x
u
y
v
p
13.11.2004 Ch. 9: Cay khung nho
nhat
11
Nhận ra một cạnh an toàn

(tiếp)
°
Đònh nghóa cây khung T’ = T − (x, y) ∪ (u, v)

T’ là cây khung nhỏ nhất vì

w(T’) = w(T) − w(x, y) + w(u, v)

≤ w(T), vì w(u, v) ≤ w(x, y)
°
(u, v) là an toàn cho A vì A ∪ (u, v) ⊆ T’ .

x
u
y
v
p
13.11.2004 Ch. 9: Cay khung nho
nhat
12
Nhận ra một cạnh an toàn (tiếp)

Hệ luận 24.2

Cho
°
G = (V, E ) là một đồ thò liên thông, vô hướng với một hàm trọng số
w trên E
°
A là một tập con của E sao cho A nằm trong một cây khung nhỏ
nhất cho G
°
C = (V
C
, E
C
) là một thành phần liên thông (cây) trong rừng G
A
=
(V, A).
Thì,


nếu (u, v) là một cạnh nhẹ nối C với một thành phần khác trong G
A


(u, v) là an toàn cho A.
Chứng minh

Phép cắt (V
C
, V

V
C
) bảo toàn A, do đó (u, v) là một cạnh nhẹ đối với
phép cắt này.
13.11.2004 Ch. 9: Cay khung nho
nhat
13
Giải thuật của Kruskal
ª
Giải thuật của Kruskal

dựa trên giải thuật GENERIC-MST, mà A ban đầu là một rừng mà
mỗi cây chỉ chứa một đỉnh của G.
ª
mỗi tập rời nhau chứa các đỉnh của một cây trong rừng hiện thời.
MST-KRUSKAL(G, w)
1 A ← ∅
2 for mỗi đỉnh v ∈ V[G]
3 do MAKE-SET(v)

4 xếp các cạnh ∈ E theo thứ tự trọng số w không giảm
5 for mỗi cạnh (u, v) ∈ E, theo thứ tự trọng số không giảm
6 do if FIND-SET(u) ≠ FIND-SET(v)
7 then A ← A ∪ {(u, v)}
8 UNION(u, v)
9 return A
13.11.2004 Ch. 9: Cay khung nho
nhat
14
Thực thi giải thuật của Kruskal
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g

ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(a) (b)
1 2 2 4 4 6 7 7 8 8 9 10 11 14
Các cạnh được xếp theo thứ tự trọng số không giảm:
13.11.2004 Ch. 9: Cay khung nho
nhat
15
Thửùc thi giaỷi thuaọt cuỷa Kruskal (tieỏp)
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14

2
4
7 6
11
8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(d)(c)
1 2 2 4 4 6 7 7 8 8 9 10 11 14
13.11.2004 Ch. 9: Cay khung nho
nhat
16
Thửùc thi giaỷi thuaọt cuỷa Kruskal (tieỏp)
b
f
c d

h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b

f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11

8
(e) (f)
(h)(g)
13.11.2004 Ch. 9: Cay khung nho
nhat
17
Thửùc thi giaỷi thuaọt cuỷa Kruskal (tieỏp)
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g
ia e
8 7
9

10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g
ia e

8 7
9
10
1 2
4
14
2
4
7 6
11
8
(i) (j)
(l)(k)
13.11.2004 Ch. 9: Cay khung nho
nhat
18
Thửùc thi giaỷi thuaọt cuỷa Kruskal (tieỏp)
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4

7 6
11
8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(n)(m)
1 2 2 4 4 6 7 7 8 8 9 10 11 14
13.11.2004 Ch. 9: Cay khung nho
nhat
19
Phân tích giải thuật của Kruskal
ª
Dùng cấu trúc dữ liệu các tập rời nhau (disjoint sets), chương 22, với
các heuristics

Hợp theo thứ hạng (union-by-rank)


Nén đường dẫn (path-compression).
ª
Nhận xét (cần đến khi đánh giá thời gian chạy)

Giải thuật gọi V lần MAKE-SET và gọi tổng cộng O(E) lần các
thao tác MAKE-SET, UNION, FIND-SET.

Vì G liên thông nên |E| ≥ |V| − 1.
13.11.2004 Ch. 9: Cay khung nho
nhat
20
Phân tích giải thuật của Kruskal (tiếp)
ª
Thời gian chạy của MST-KRUSKAL gồm

Khởi động: O(V)

Sắp xếp ở dòng 4: O(E lg E)

Dòng 5-8: O(E α(E, V)) (xem nhận xét),

= O(E lg E) vì α(E, V) = O(lg E).

Vậy thời gian chạy của MST-KRUSKAL là O(E lg E).
13.11.2004 Ch. 9: Cay khung nho
nhat
21
Giải thuật của Prim
ª

Giải thuật của Prim

dựa trên giải thuật GENERIC-MST, ở đây A là một cây duy nhất
°
trong khi thực thi giải thuật

A = {(v, π[v]) : v ∈ V − {r} − Q}
°
khi giải thuật xong, Q = ∅, nên

A = {(v, π[v]) : v ∈ V − {r}}
13.11.2004 Ch. 9: Cay khung nho
nhat
22
Giải thuật của Prim (tiếp)
ª
Tập V

Q chứa các đỉnh của cây đang được nuôi lớn.
MST-PRIM(G, w, r)
1 Q ← V[G]
2 for mỗi đỉnh u ∈ Q
3 do key[u] ← ∞
4 key[r] ← 0
5 π[r] ← NIL
6 while Q ≠ ∅
7 do u ← EXTRACT-MIN(Q)
8 for mỗi đỉnh v ∈ Adj[u]
9 do if v ∈ Q và w(u, v) < key[v]
10 then π[v] ← u

11 key[v] ← w(u, v)

r : gốc của cây khung nhỏ

nhất sẽ trả về

Q : priority queue mà khóa

là trường key

π[v] : đỉnh cha mẹ của v.
13.11.2004 Ch. 9: Cay khung nho
nhat
23
Thực thi giải thuật của Prim
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11

8
∞∞






0
Sau khi khởi động:
(các số bên mỗi đỉnh là trò của key của đỉnh)
13.11.2004 Ch. 9: Cay khung nho
nhat
24
Thực thi giải thuật của Prim (tiếp)
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11

8
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(a)
(b)
∞4
8


8
8









Sau lần lặp 1:
Sau lần lặp 2:
Các đỉnh còn trong Q màu trắng, các đỉnh đã được đưa ra khỏi Q màu đen
13.11.2004 Ch. 9: Cay khung nho
nhat
25
Thực thi giải thuật của Prim (tiếp)
b
f
c d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
b
f
c d
h g

ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(c)
(d)
2
7

4∞
8
7 6
7

4
Sau lần lặp 3:
Sau lần lặp 4:

×