15 082 Spring 1998 Chương 4 Bài toán cây khung nhỏ nhất The Minimum Spanning Tree Problem 2 Nội dung 4 1 Cây và các tính chất cơ bản của cây4 1 Cây và các tính chất cơ bản của cây 4 2 Cây khung của đồ[.]
Trang 1Chương 4 Bài toán cây khung nhỏ nhất
The Minimum Spanning Tree Problem
Trang 2Nội dung
4.1 Cây và các tính chất cơ bản của cây
4.2 Cây khung của đồ thị
4.3 Xây dựng tập các chu trình cơ bản của đồ thị
4.4 Xây dựng cây theo chiều sâu và chiều rộng
4.5 Bài toán cây khung nhỏ nhất
Trang 3Cây và rừng (Tree and Forest)
Định nghĩa 1 Ta gọi cây là đồ thị vô hướng liên
thông không có chu trình Đồ thị không có chu
trình được gọi là rừng.
Như vậy, rừng là đồ thị mà mỗi thành phần liên
thông của nó là một cây
T1
T3
Rừng F gồm 3 cây T1, T2,, T3
T2
Trang 4VÍ DỤ
G1, G2 là cây
Trang 5Các tính chất cơ bản của cây
Định lý 1 Giả sử T=(V,E) là đồ thị vô hướng n đỉnh Khi
đó các mệnh đề sau đây là tương đương:
MĐ1: T là cây ( T liên thông và không chứa chu trình ).
MĐ2: T không chứa chu trình và có n-1 cạnh.
MĐ3: T liên thông và có n-1 cạnh.
MĐ4: T liên thông và mỗi cạnh của nó đều là cầu.
MĐ5: Hai đỉnh bất kỳcủa T được nối với nhau bởi đúng 1
đường đi đơn.
MĐ6: T không chứa chu trình nhưng hễcứthêm vào nó
một cạnh ta thu được đúng 1 chu trình.
Trang 6Nội dung
4.1 Cây và các tính chất cơ bản của cây
4.2 Cây khung của đồ thị
4.3 Xây dựng tập các chu trình cơ bản của đồ thị
4.4 Xây dựng cây theo chiều sâu và chiều rộng
4.5 Bài toán cây khung nhỏ nhất
Trang 7Cây khung của đồ thị
Định nghĩa 2 Giả sử G=(V,E) là đồ thị vô hướng liên
thông Cây T=(V,F) với F E được gọi là cây khung của
G
Đồ thị G và 2 cây khung T1 và T2 của nó
T 2
T1
Trang 8Số lượng cây khung của đồ thị
Định lý sau đây cho biết số lượng cây khung
Trang 9C
HH
H
HH
H
HC
C
HH
H
HC
H
HC
Trang 10Cây như là các mô hình
Khi n = 4, có đúng 2 cây không đẳng cấu, vậy có
đúng 2 đồng phân dạng C4H10
C C C C
H H
H
H H
C C
H
H H
Trang 11Ví dụ:
Các cây khung của đồ thị:
abc, bcd, cda, dab,
afc, dfb, aec, deb,
aed, afb, bec, cfd,
efc, efd, efa, efb
Số cây khung là: 4 2 = 16
11
Trang 12Nội dung
4.1 Cây và các tính chất cơ bản của cây
4.2 Cây khung của đồ thị
4.3 Xây dựng tập các chu trình cơ bản của đồ thị
4.4 Xây dựng cây theo chiều sâu và chiều rộng
4.5 Bài toán cây khung nhỏ nhất
Trang 13Tập các chu trình cơ bản
hướng liên thông, H=(V,T) là cây khung của G
các chu trình cơ bản của đồ thị G
Trang 14Tính chất:
Tập các chu trình cơ bản phụ thuộc vào cây khung của
đồ thị Hai cây khung khác nhau có thể cho hai tập chu
trình cơ sở khác nhau.
Nếu một đồ thị liên thông có n đỉnh, m cạnh Khi đó cây
khung có n-1 cạnh, còn lại m-n+1 cạnh ngoài Tương
ứng với mỗi cạnh ngoài, ta có một chu trình cơ bản Vì
vậy, số chu trình cơ bản của một đồ thị liên thông là
m-n+1.
Tập các chu trình cơ bản là một tập nhiều nhất các chu
trình thỏa mãn điều kiện: Mỗi chu trình có đúng một
cạnh riêng, cạnh đó không nằm trong các chu trình còn
lại và việc loại bỏ cạnh này không ảnh hưởng đến tính
liên thông của đồ thị và không ảnh hưởng đến các chu
trình còn lại Như vậy ta có thể bỏ tối đa m - n+1 cạnh
Trang 15 Tên gọi chu trình cơ bản gắn liền với sự kiện chỉ ra
trong định lý sau đây:
Định lý 3 Giả sử G=(V,E) là đồ thị vô hướng liên
thông, H=(V,T) là cây khung của nó Khi đó mọi chu trình của đồ thị G đều có thể biểu diễn như là hiệu đối xứng của một số các chu trình cơ bản.
Trang 16Ý nghĩa ứng dụng
Việc tìm tập các chu trình cơ bản giữ một vai trò
quan trọng trong vấn đề giải tích mạng điện:
Theo mỗi chu trình cơ bản của đồ thị tương
ứng với mạng điện cần phân tích ta sẽ thiết lập
được một phương trình tuyến tính theo định
luật Kirchoff: Tổng hiệu điện thế dọc theo một
mạch vòng là bằng không
Hệ thống phương trình tuyến tính thu được cho
phép tính toán hiệu điện thế trên mọi đoạn
đường dây của lưới điện
Trang 17Thuật toán xây dựng tập chu trình cơ bản
Đầu vào: Đồ thị G=(V,E) được mô tả bằng danh sách kề Ke(v), vV.
procedure Cycle(v);
(* Tập các chu trình cơ bản của thành phần liên thông chứa đỉnh v
Các biến d, num, STACK, Index là toàn cục *)
if (u STACK[d-1]) and (Index[v] > Index[u]) then
< Ghi nhận chu trình với các đỉnh:
STACK[d], STACK[d-1], , STACK[c], với STACK[c]=u >;
d := d-1; end;
Trang 18Thuật toán xây dựng tập chu trình cơ bản
Trang 19Ví dụ:
19
Trang 20Tập các chu trình cơ bản:
Trang 21Nội dung
4.1 Cây và các tính chất cơ bản của cây
4.2 Cây khung của đồ thị
4.3 Xây dựng tập các chu trình cơ bản của đồ thị
4.4 Xây dựng cây theo chiều sâu và chiều rộng
4.5 Bài toán cây khung nhỏ nhất
Trang 22Xây dựng cây khung
Xây dựng theo chiều sâu
Xây dựng theo chiều rộng
Trang 23Xây dựng theo chiều sâu
/* Khai báo các biến toàn cục ChuaXet, Ke, T */
};
}
23
Trang 24Xây dựng theo chiều sâu
Trang 25Ví dụ: Xây dựng cây theo chiều sâu
25
Trang 26Xây dựng cây theo chiều rộng
/* Khai báo các biến toàn cục ChuaXet, Ke, QUEUE */
Trang 27Xây dựng cây theo chiều rộng
main() /* Nhập đồthị, tạo biến Ke */{
for (v V) ∈ ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */
T = ; /* T là tập cạnh cây khung */ ∅ Tree_BFS(root); /* root là đỉnh nào đó của đồ thị */
}
27
Trang 28Ví dụ: Xây dựng cây theo chiều rộng
1->2->3->4->6->5->7->8->10->9
Cây khung của G là:
Trang 29Nội dung
4.1 Cây và các tính chất cơ bản của cây
4.2 Cây khung của đồ thị
4.3 Xây dựng tập các chu trình cơ bản của đồ thị
4.4 Bài toán cây khung nhỏ nhất
Trang 30BÀI TOÁN CÂY KHUNG NHỎ NHẤT
Minimum Spanning Tree (MST)
Trang 32Bài toán cây khung nhỏ nhất
Có thể phát biểu dưới dạng bài toán tối ưu tổ hợp:
Tìm cực tiểu
c(H) = c(e) min,
eT
với điều kiện H=(V,T) là cây khung của G.
Do số lượng cây khung của G là rất lớn (xem định lý
Cayley), nên không thể giải nhờ duyệt toàn bộ
Trang 33Ứng dụng thực tế: Mạng truyền thông
Công ty truyền thông AT&T cần xây dựng mạng
truyền thông kết nối n khách hàng Chi phí thực hiện kênh nối i và j là cij Hỏi chi phí nhỏ nhất để thực hiện việc kết nối tất cả các khách hàng là bao nhiêu?
10
Giả thiết là: Chỉ có cách kết nối duy nhất là đặt kênh nối trực tiếp giữa hai nút.
Trang 34Bài toán xây dựng hệ thống đựờng sắt
phố sao cho hành khách có thể đi lại giữa hai thành phố bất kỳ đồng thời tổng chi phí xây dựng phải là nhỏ nhất
tuyến đường sắt nối các thành phố tương ứng với phương án xây dựng tối ưu phải là cây
trên đồ thị đầy đủ n đỉnh, mỗi đỉnh tương ứng với một thành phố, với độ dài trên các cạnh chính là chi phí xây dựng đường ray nối hai thành phố tương ứng
Trang 35Sơ đồ chung của các giải thuật
Generic-MST(G, c)
A = { }
//Bất biến: A là tập con các cạnh của CKNN nào đó
while A chưa là cây khung do
tìm cạnh (u, v) là an toàn đối với A
Trang 36Lát cắt
Ta gọi lát cắt (S, V S) là một cách phân hoạch tập
đỉnh V ra thành hai tập S và V S Ta nói cạnh e là
cạnh vượt lát cắt (S, V S) nếu một đầu mút của nó
là thuộc S còn đầu mút còn lại thuộc V S
cắt (S,V S) được gọi là tương thích với A nếu như
không có cạnh nào thuộc A là cạnh vượt lát cắt
Trang 37Lát cắt
Lát cắt của G = (V, E) là phân hoạch V thành (S, V – S)
Ví dụ. S = {a, b, c, f}, V – S = {e, d, g}
Các cạnh (b, d), (a, d), (b, e), (c, e) là cạnh vượt lát cắt
Các cạnh còn lại không vượt lát cắt
f
d a
5
2
Trang 38Lát cắt tương thích với tập cạnh
f
d a
Trang 39Cạnh nhẹ
f
d a
Trang 40Cạnh nhẹ là cạnh an toàn!
Định lý Giả sử (S, V – S) là lát cắt của G=(V, E) tương thích với
tập con A của E, và A là tập con của tập cạnh của CKNN của G Gọi (u, v) là cạnh nhẹ vượt lát cắt (S, V – S) Khi đó (u, v) là an toàn đối với A; nghĩa là, A {(u, v)} cũng vẫn là tập con
của tập cạnh của CKNN
S
V – S
42
v
2
Trang 41A { (u, v) } T ', tức là, (u, v) là an toàn đối với A
Chứng minh. Giả sử T là CKNN (gồm các cạnh đỏ) chứa A.
Giả sử cạnh nhẹ (u, v) T Ta có
T { (u, v) } chứa chu trình
Tìm được cạnh (x, y) T vượt lát cắt (S, V – S)
Cây khung T ' = T – { (x, y) } { (u, v) } có độ dài
độ dài của cây khung T Suy ra T ' cũng là CKNN.
Trang 42
Hệ quả Giả sử A là tập con của E và cũng là tập con của tập cạnh
của CKNN nào đó của G, và C là một thành phần liên thông trong rừng F = (V, A) Nếu (u, v) là cạnh nhẹ nối C với một thành phần liên thông khác trong F, thì (u, v) là an toàn đối với A.
Cạnh (u, v) là cạnh nhẹ vượt lát cắt (C, V – C) tương thích với A
Theo định lý trên, cạnh (u, v) là an toàn đối với A.
8
Hệ quả
Trang 43Tìm cạnh an toàn?
Giả sử A là tập con của tập cạnh của một CKNN nào đó
A là rừng.
Cạnh an toàn được bổ sung vào A có trọng số nhỏ nhất
trong số các cạnh nối các cặp thành phần liên thông của nó
Thuật toán Kruskal
Thuật toán Prim
A là cây
Cạnh an toàn là cạnh nhẹ nối đỉnh trong A với một đỉnh
không ở trong A
Trang 44Thuật toán Kruskal:
xếp các cạnh của đồ thị G theo thứ tự không giảm
lượt duyệt trong danh sách cạnh đã sắp xếp, từ cạnh
có độ dài nhỏ đến cạnh có độ dài lớn hơn, để tìm ra
chu trình trong tập này Thuật toán sẽ kết thúc khi ta
Trang 45Cụ thể có thể mô tả như sau:
của trọng số
dần các cạnh của dãy đã được xếp vào T theo
nguyên tắc cạnh thêm vào không được tạo thành
chu trình trong T
bằng n−1, ta thu được cây khung nhỏ nhất cần tìm
45
Trang 46Thuật toán Kruskal
Thuật toán Kruskal
Generic-MST(G, c)
A = { }
//Bất biến: A là tập con các cạnh của CKNN nào đó
while A chưa là cây khung do
tìm cạnh (u, v) là an toàn đối với A
A = A {(u, v)}
// A vẫn là tập con các cạnh của CKNN nào đó
return A
Trang 48Ví dụ:
Tìm cây khung nhỏ nhất của đồ thị cho trong
hình dưới đây:
Trang 49 Bây giờ số cạnh của T đã là 2 vẫn còn nhỏ hơn 6, ta tiếp
tục thêm cạnh tiếp theo trong dãy đã sắp xếp vào T
49
Trang 50Cách giải
Sau khi thêm cạnh (v4, v5) vào T, nếu thêm cạnh
(v5, v6) thì nó sẽ tạo thành với 2 cạnh (v4, v5),
(v4, v6) đã có trong T một chu trình
Tình huống tương tự cũng xãy ra đối với cạnh
(v3, v4) là cạnh tiếp theo trong dãy
Tiếp theo ta bổ sung cạnh (v1, v3), (v2, v3) vào T
và thu dược tập E T gồm 5 cạnh:
{(v3, v5), (v4, v6), (v4, v5), (v1, v3), (v2, v3)}
Trang 51Bài tập
Tìm cây khung nhỏ nhất của đồ thị cho trong
hình dưới đây:
51
Trang 52Bài tập
f
d a
Trang 54Cách cài đặt hiệu quả
Vấn đề đặt ra là:
Khi cạnh ei=(j,k) được xét, ta cần biết có phải j và k
thuộc hai thành phần liên thông (tplt) khác nhau hay không Nếu đúng, thì cạnh này được bổ sung vào
cây khung và nó sẽ nối tplt chứa j và tplt chứa k.
Trang 55 Ký hiệu First(C) đỉnh đầu tiên trong tplt C
tiên trong C.
Chú ý: Thêm cạnh (i,j) vào rừng F tạo thành chu trình iff i và
j thuộc cùng một tplt, tức là First(i) = First(j)
Khi nối tplt C và D, sẽ nối tplt nhỏ hơn (ít đỉnh hơn) vào tplt
lớn hơn (nhiều đỉnh hơn):
Nếu |C| > |D|, thì First(CD) := First(C).
Cách cài đặt hiệu quả
Trang 56Phân tích thời gian tính
Thời gian xác định First(i) = First(j) đối với i, j: O(1) cho mỗi cạnh Tổng cộng là O(m).
Mỗi đỉnh i ở tplt nhỏ hơn nhiều nhất là log n lần (Bởi vì, số
đỉnh của tplt chứa i tăng lên gấp đôi sau mỗi lần nối.)
Tổng cộng thời gian nối là: O(n log n).
Trang 57Thuật toán Prim
A là cây (Bắt đầu từ cây chỉ có 1 đỉnh)
Cạnh an toàn là cạnh nhẹ nhất trong
số các cạnh nối đỉnh trong A với một
đỉnh không ở trong A.
Trang 58Thuật toán Prim
Thuật toán Kruskal làm việc kém hiệu quả đối với
những đồ thị dày (đồ thị có số cạnh m ≈n(n−1)/2)
Trong trường hợp đó, thuật toán Prim tỏ ra hiệu
quả hơn Thuật toán Prim còn được gọi là
phương pháp lân cận gần nhất
Trang 59Mô tả thuật toán Prim
Gọi (u, v) là cạnh nhẹ nhất với u V(T) và vV(G) – V(T)
E(T) E(T) { (u, v) }; V(T) V(T) { v }
end
end;
Tính đúng đắn suy từ hệ quả đã chứng minh:
Giả sử A là tập con của E và cũng là tập con của tập cạnh của CKNN của G, và
C là một thành phần liên thông trong rừng F = (V, A) Nếu (u, v) là cạnh nhẹ
nối C với một tplt khác trong F, thì (u, v) là an toàn đối với A.
Trang 60d a
Trang 61f
d a
Trang 62d a
Trang 63f
d a
Trang 64d a
Trang 65f
d a
Trang 66Thuật toán Prim
1 V T :={v*}, trong đó v*là đỉnh tuỳ ý của đồ thị G
E T := ∅
2 Với mỗi đỉnh v j ∉ V T , tìm đỉnh w j ∈ V T sao cho
m(w j ,v j ) = min m(x i , v j )=:β j x i ∈ V T và gán cho đỉnh v j nhãn
[w j , β j ] Nếu không tìm đuợc w j như vậy (tức là khi v j không
kề với bất cứ đỉnh nào trong V T ) thì gán cho v j nhãn [0, ∞]
3.Chọn đỉnh v j * sao cho β j *= min β j v j ∉ V T
V T := V T {vj*}, ∪
E := E {(w ∪ *, v *)}
Trang 67Thuật toán Prim
Nếu |V T | = n thì thuật toán dừng và (V T , E T ) là cây
khung nhỏ nhất
Nếu |V T | < n thì chuyển sang Bước 4
4 Đối với tất cả các đỉnh v j ∉ V T mà kề với v j *, ta
thay đổi nhãn của chúng như sau:
Nếu β j > m(v j *, v j ) thì đặt β j :=m(v j *, v j ) và nhãn của
v j là [v j *, β j ] Ngược lại, ta giữ nguyên nhãn của v j
Sau đó quay lại Bước 3.
67
Trang 70Cài đặt thuật toán Prim đối với đồ thị dày
Giả sử đồ thị cho bởi ma trận trọng số C={c[i,j], i, j = 1,
2, , n}
Ở mỗi bước để nhanh chóng chọn đỉnh và cạnh cần bổ sung vào cây khung, các đỉnh của đồ thị sẽ được gán cho các nhãn
Trang 72Thuật toán Prim – Ví dụ
Ví dụ: Tìm CKNN cho đồ thị cho bởi ma trận trọng số
Trang 74Thuật toán Prim: Ví dụ
Trang 76Thuật toán Prim: Ví dụ
Trang 78Thuật toán Prim: Ví dụ
Trang 80Bài tập
Tìm cây khung nhỏ nhất của đồ thị sau theo thuật
toán Kruskal và Prim
Trang 81CHƯƠNG V
CÂY
Trang 82 Cây cũng được dùng để tạo ra các mã có hiệu quả để lưu trữ và truyền dữ liệu
Dùng cây có thể mô hình các thủ tục mà để thi hành nó cần dùng một dãy các quyết định
Trang 83ĐỊNH NGHĨA VÀ CÁC TÍNH CHẤT CƠ BẢN
Định nghĩa: Cây là một đồ thị vô hướng liên thông, không chứa chu trình và có ít nhất hai đỉnh.
Một đồ thị vô hướng không chứa chu trình và có
ít nhất hai đỉnh gọi là một rừng.
Trong một rừng, mỗi thành phần liên thông là một cây.
Trang 84Ví dụ:
Rừng sau có 3 cây
Trang 85CÂY CÓ GỐC
Định nghĩa: Cây có hướng là đồ thị có hướng mà
đồ thị vô hướng nền của nó là một cây.
Cây có gốc là một cây có hướng, trong đó có một đỉnh đặc biệt, gọi là gốc, từ gốc có đường đi đến mọi đỉnh khác của cây.
Trang 86Ví dụ:
Cây sau có nút gốc là r
Trang 87Vẽ lại cây:
Trang 89Các khái niệm:
89
Trang 90Ví dụ:
Cha của c là b
Con của g là h, i, j
Các tiền bối của e là c, b, a
Các hậu duệ của b là c, d, e
Các đỉnh trong: a, b, c, g, h, j, k
Các lá : d, e, f, l, m, i, n, o
Trang 91 Cây có gốc thứ tự(Ordered rooted tree) nếu các con
của mỗi đỉnh trong được xếp thứ tự từ trái qua phải
91
Trang 92Các khái niệm:
Đặc biệt: Cây nhị phân có thứ tự:
Nếu một đỉnh trong có đủ 2 con thì
Con thứ nhất là con bên trái( left child)
Con thứ 2 là con bên phải ( right child)
Một m – cây với chiều cao h gọi là thăng bằng
nếu tất cả các lá đều ở mức h hay h-1.
Trang 93Ví dụ:
Mô hình gia phả một dòng họ
Mô hình biểu diễn của các tổ chức
Mô hình tổ chức Trường Đại Học
93
Trang 94Ví dụ:
Mô hình các tập tin trong máy tính
Các tập tin trong máy tính được tổ chức
thành các thư mục, các thư mục được tổ chức
dưới dạng cây, trong đó thư mục gốc là gốc
của cây.
Trang 95Cây tìm kiếm nhị phân:
Một cây tìm kiếm nhị phân là một cây nhị phân T
mà trong đó:
Mỗi đỉnh được gán cho một nhãn
Các nhãn có thểso sánh được với nhau đỉnh ∀
v T, các nhãn trong cây con bên trái của v ∈ đều nhỏ hơn nhãn của v và các nhãn trong cây con bên phải của v đều lớn hơn nhãn của v
95
Trang 96Ví dụ:
Cho dãy số: 30, 20, 10, 40, 32, 27, 17, 8, 42, 78, 35
Biểu diễn dãy số dưới dạng cây nhị phân tìm
kiếm.
Trang 97Cây quyết định:
Cây quyết địnhlà cây có gốc mà:
Mỗi đỉnh tương ứng với 1 quyết định
Mỗi cây con tại các đỉnh này ứng với mỗi kết
cục có thể của của quyết định
Một lời giải là một đường đi từ gốc đến lá
97