2.2 Bài toán tìm cây khung ngắn nhất 2.3 Thuật toán Kruskal 2.4 Thuật toán Prim GIỚI THIỆU VỀ CÂY VÀ CÂY KHUNG... Cây khung đồ thịCách tạo cây khung của đồ thị: - Thực hiện loại bỏ một
Trang 1BÀI TOÁN CÂY KHUNG NHỎ NHẤT
Danh sách nhóm: -Hà Xuân Tùng
-Lê Thị Quỳnh Nga -Vi Đình Diệm
-Hà Thị Thu Trang
ĐỀ TÀI NHÓM 7
Trang 22.2 Bài toán tìm cây khung ngắn nhất
2.3 Thuật toán Kruskal
2.4 Thuật toán Prim
GIỚI THIỆU VỀ CÂY VÀ CÂY KHUNG
Trang 3- Cây là một dạng của đồ thị được nhà toán học Anh, Arthur Cayley, phát biểu và sử dụng từ năm 1857 cho việc xác định những cấu trúc hợp chất hóa học.
1 Cây và các tính chất cơ bản
Arthur Cayley
(1821-1895)
isobutan
Trang 41 Cây và các tính chất cơ bản
Định nghĩa Cây:
Cho G=(V,E) là đồ thị vô hướng G được gọi là một Cây (tree)
nếu và nếu G liên thông và không có chu trình đơn
Trang 62- T không có chu trình đơn và có n-1 cạnh
3- Giữa hai đỉnh bất kỳ có đúng một đường đi đơn.
4- T liên thông và mỗi cạnh là một cầu.
Trang 72 Cây khung đồ thị
Cách tạo cây khung của đồ thị:
- Thực hiện loại bỏ một cạnh nằm trên một chu trình nào
đó sẽ tạo ra đồ thị G' vẫn có tính liên thông
- Thực hiện tiếp việc loại bỏ các cạnh ở các chu trình khác cho đến khi đồ thị T không còn chu trình nhưng vẫn liên thông
=> Chúng ta thu được một cây nối tất cả các đỉnh của G - gọi là cây khung của đồ thị
Định nghĩa: Cho G là đồ thị vô hướng liên thông Ta gọi đồ thị con T của G là một cây khung nếu T thỏa mãn hai điều kiện:
-T là một cây;
- Tập đỉnh của T bằng tập đỉnh của
Trang 8F A
C
H
B
G D
E
F A
C
H
Trang 9Bài toán tìm cây khung nhỏ nhất:
Cho G=(V,E) là đồ thị vô hướng, liên thông có trọng số
Giả sử H=(V,T) là một cây khung của đồ thị G
Độ dài c(H) của cây khung H là tổng trọng số các cạnh của cây:
Bài toán:
Trong số tất cả các cây khung của đồ thị G, hãy tìm ra cây khung
có độ dài nhỏ nhất
Trang 10Các bài toán thực tế:
1- Bài toán nối mạng máy tính:
Với mạng máy tính gồm n máy Biết chi phí nối máy i với máy j là m(i,j) (chi phí phụ thuộc vào độ dài cáp nối cần sử dụng) Hãy tìm cách nối mạng sao cho tổng chi phí là nhỏ nhất
2- Bài toán xây dựng hệ thống đường sắt:
Chúng ta muốn xây dựng một hệ thống đường sắt nối n
thành phố để hành khách từ một thành phố có thể đi đến bất
kỳ các thành phố còn lại Yêu cầu thiết kế để chi phí xây
dựng hệ thống đường đi là nhỏ nhất
Trang 111 Thuật toán Kruskal (năm 1956)
- Đồ thị G=(V,E), liên thông, có trọng số
- Cây khung H=(V,T), với T E
Thuật toán Kruscal tìm cây khung ngắn nhất
B0: T = ø;
B1: Sắp xếp các cạnh của G theo thứ tự tăng dần của trọng số
B2: Xuất phát từ tập cạnh T = ø;
Lần lượt duyệt trong danh sách các cạnh đã được sắp xếp từ nhỏ đến lớn
để tìm ra cạnh bổ sung nó vào T mà không tạo thành chu trình
Until |T|=n-1 thì kết thúc
Trang 12Giả mã thuật toán Kruskal
Void Kruskal ( void )
if (|T| < n-1)
Đồ thị không liên thông;
}
Trang 132.4 Thuật toán Kruskal
Trang 14Thêm vào cạnh (v3, v5) vào T; |T|=1
Xét lực lượng của T, |T|<5, nên tiếp tục quá trình xét nạp:
- nạp cạnh (v4, v6) vào T; |T|=2
- nạp cạnh (v4, v5) vào T; |T|=3
- không nạp cạnh (v5, v6) vào T vì tạo chu trình.
- không nạp cạnh (v3, v4) vào T vì tạo chu trình.
- nạp cạnh (v1, v3) vào T; |T|=4
- nạp cạnh (v2, v3) vào T; |T|=5
Kết thúc vì |T|=5
Trang 15Thuật toán Kruskal
Ví dụ:
Tìm cây khung ng n nh t c a đ th G trong hình dắn nhất của đồ thị G trong hình dưới ất của đồ thị G trong hình dưới ủa đồ thị G trong hình dưới ồ thị G trong hình dưới ị G trong hình dưới ướii
Trang 16-Dùng để tìm cây bao trùm nhỏ nhất của đồ thị vô hướng có trọng số liên thông.
-Được tìm ra bởi Vojtěch Jarník (Cộng hòa Séc) vào năm
1930, sau đó được phát triển bởi Robert.C.Prim vào năm 1957.
-Còn được gọi là thuật toán DJP, thuật toán Jarník, hay thuật toán Prim–Jarník.
Thuật toán Prim (năm 1957)
Trang 17Ý tưởng thuật toán:
Bắt đầu tại một đỉnh tùy ý s của đồ thị, nối s với đỉnh y sao cho trọng số cạnh
Trang 18Giải mã thuật toán Prim
void Prim()
{ Chọn s là một đỉnh nào đó của đồ thị;
VH = [s]; T = 0; D[s] = 0; near[s] = s; for (v thuộc V\VH )
Trang 19while (not stop)
{ tìm u thuộc V\VH thỏa mãn: d[u] = min {d[v]: u thuộc V\VH};
VH = VH hợp [u];
T = T hợp {(u, near[u])};
if (|VH| = n) { H = (VH, T) là cây khung nhỏ nhất của đồ thị;
Stop = true;}
else for (v thuộc V\VH )
Trang 208
8
Trang 21 Lấy D,C,A là đỉnh xét tiếp theo
Xét [D,B] = 8 ,[C,B] = 7, [A,B] = 9 => chọn đỉnh B (nạp [C,B] = 5)
Số cạnh lúc này là 3 = 4-1 Kết thúc thuật toán
Trang 22Ví dụ 2:
Tìm cây khung ngắn nhất của đồ thị G trong hình dưới thị G trong hình dướii.
Trang 23Lời giải:
8
7
64
Trang 24Lấy đỉnh a làm đỉnh xuất phát.