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ạn
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
Trang 4VÍ DỤ
G1, G2 là cây
G3, G4 không 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
Trang 8Số lượng cây khung của đồ thị
Định lý sau đây cho biết số lượng cây khung
Trang 9HH
H
HH
Trang 10Ví 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
Trang 11Nộ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 12Tậ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 13Tí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 đồ
Trang 14 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 15Ý 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 16Thuậ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
>;
Trang 17Thuật toán xây dựng tập chu trình cơ bản
Trang 18Ví dụ:
Trang 19Tập các chu trình cơ bản:
Trang 20Nộ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 21Xâ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 22Xây dựng theo chiều sâu
/* Khai báo các biến toàn cục ChuaXet, Ke, T */
Trang 23Xây dựng theo chiều sâu
Trang 24Ví dụ: Xây dựng cây theo chiều sâu
Trang 25Xâ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 26Xây dựng cây theo chiều rộng
main() /* Nhập đồthị, tạo biến Ke */{
Trang 27Ví 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 28Nộ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 29BÀI TOÁN CÂY KHUNG NHỎ NHẤT
Minimum Spanning Tree (MST)
Trang 30Bài toán CKNN
Bài toán: Cho đồ thị vô hướng liên thông G=(V,E) với trọng số
c(e), e E Độ dài của cây khung là tổng trọng số trên các cạnh
của nó Cần tìm cây khung có độ dài nhỏ nhất
1
f
d a
5
2
Độ dài của cây khung là Tổng độ dài các cạnh: 14
Trang 31Bà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,
e T
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 32Ứ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?
Trang 33Bà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 ánxâ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ànhphố, với độ dài trên các cạnh chính là chi phí xây dựng đườngray nối hai thành phố tương ứng
Trang 34Sơ đồ 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 35Lá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.
Giả sử A là một tập con các cạnh của đồ thị Lát
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 365
2
Trang 37Lát cắt tương thích với tập cạnh
f
d a
44
Trang 38Cạnh nhẹ
f
d a
Trang 39Cạ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
Trang 40Tại sao cạnh nhẹ là an toàn ?
S
V – S
4
26
A { (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 41Hệ 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 42Tì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 43Thuật toán Kruskal:
nhỏ nhất T=(VT, ET) theo từng bước Trước hết sắp
xếp các cạnh của đồ thị G theo thứ tự không giảm
của trọng số Bắt đầu từET=∅, ởmỗi bước ta sẽ lần
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
cạnh mà việc bổ sung nó vào tập ETkhông tạo thành
chu trình trong tập này Thuật toán sẽ kết thúc khi ta
thu được tập ETgồm n−1 cạnh
Trang 44Cụ thể có thể mô tả như sau:
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 them 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
Trang 45Thuậ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 46Mô tả thuật toán Kruskal
Trang 47Ví dụ:
Tìm cây khung nhỏ nhất của đồ thị cho trong
hình dưới đây:
Trang 48 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
Trang 49Cá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 ET gồm 5 cạnh:
{(v3, v5), (v4, v6), (v4, v5), (v1, v3), (v2, v3)}
Trang 50Bài tập
Tìm cây khung nhỏ nhất của đồ thị cho trong
hình dưới đây:
Trang 51Bài tập
f
d a
Trang 53Cá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.
Thực hiện điều này như thế nào cho đạt hiệu quả?
Trang 54 Mỗi tplt C của rừng F được cất giữ như một tập.
tiên trong C.
thuộc cùng một tplt, tức là First(i) = First(j).
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 55Phân tích thời gian tính
cạnh Tổng cộng là O(m).
Thời gian nối 2 tplt S và Q, giả thiết |S| |Q|.
O(1) với mỗi đỉnh của Q (là tplt nhỏ hơn)
đỉnh của tplt chứa i tăng lên gấp đôi sau mỗi lần nối.)
Trang 56Thuậ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 57Thuậ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 58Mô 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 59d a
Trang 60d a
Trang 61d a
4
5
2
Trang 62d a
Trang 63d a
4
5
2
Trang 64d a
Trang 65Thuật toán Prim
1 VT:={v*}, trong đó v*là đỉnh tuỳ ý của đồ thị G
ET:= ∅
2 Với mỗi đỉnh v j ∉VT, tìm đỉnh w j ∈VT sao cho
m(w j ,v j ) = min m(x i , v j )=:β j x i ∈VT 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 VT) thì
gán cho v j nhãn [0, ∞].
3.Chọn đỉnh v j * sao cho β j *= min β j v j ∉VT
Trang 66Thuật toán Prim
Nếu |VT| = n thì thuật toán dừng và (VT, ET) là
cây khung nhỏ nhất
Nếu |VT| < n thì chuyển sang Bước 4
4 Đối với tất cả các đỉnh v j ∉VT 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.
Trang 69Cài đặt thuật toán Prim đối với đồ thị dày
2, , n}
sung vào cây khung, các đỉnh của đồ thị sẽ được gán cho các nhãn
Trang 70H = ( S , T ) là cây khung nhỏ nhất của đồ thị ;
Thời gian tính: O(|V|
Trang 71Thuật toán Prim – Ví dụ
Ví dụ: Tìm CKNN cho đồ thị cho bởi ma trận trọng số
Trang 72Thuật toán Prim: Ví dụ
Trang 73Thuật toán Prim: Ví dụ
Trang 74Thuật toán Prim: Ví dụ
Trang 75Thuật toán Prim: Ví dụ
Trang 76Thuật toán Prim: Ví dụ
Trang 77Thuật toán Prim: Ví dụ
Trang 78Thuật toán Prim: Ví dụ
Trang 79Người đề xuất bài toán MST
Otakar Borůvka
Nhà khoa học Séc (Czech)
Người đề xuất bài toán
Đề xuất thuật toán thời gian O(m log n)
Bài báo được xuất bản ở Séc từ năm
1926
Ứng dụng vào việc phát triển hệ thống
mạng điện ở Bohemia
Trang 80Tăng tốc
O(m log n) Borůvka, Prim, Dijkstra, Kruskal,…
O(m log log n) Yao (1975), Cheriton-Tarjan (1976)
O(m log (m, n)) Gabow-Galil-Spencer-Tarjan (1986)
Optimal Pettie-Ramachandran (JACM 2002)
Trang 81Bài tập
Tìm cây khung nhỏ nhất của đồ thị sau theo thuật
toán Kruskal và Prim
Trang 82CHƯƠNG V
CÂY
Trang 83 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 84ĐỊ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 85Ví dụ:
Rừng sau có 3 cây
Trang 86CÂ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 87Ví dụ:
Cây sau có nút gốc là r
Trang 88Vẽ lại cây:
Trang 89 Nếu x là tiền bối của y thì y là hậu duệ của x
Nếu y, z là con của x thì y và z là anh em
Trang 90Các khái niệm:
Nếu x không có con thì x là lá (leaf)
Nếu x không là lá thì x là đỉnh trong
Mức(level) của đỉnh x là chiều dài (số cành) của
đường đơn từ gốc v 0 tới x level(v 0 ) = 0
Chiều cao(height) của một cây là mức lớn nhất
trong cây
Cây con(subtree) của T gốc tại x là đồ thị con của
T mà:
Tập đỉnh gồm x và tất cả các hậu duệ của x
Tập các cành gồm mọi cành nối tới các hậu
duệ của x
Trang 91Ví 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 92 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
Trang 93Cá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 94Ví 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
Trang 95Ví 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 96Câ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
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
Trang 97Ví 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 98Câ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á