MỤC LỤC Trang Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có đường đi có hướng nối chúng với nhau...4 a b...7 II.. Đồ thị có cây phủ là đồ thị khi ta chọn một
Trang 1Stt Họ và Tên Công việc Chữ
Trang 2MỤC LỤC
Trang
Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có đường đi có
hướng nối chúng với nhau 4
a b 7
II Cây và cây phủ 8
1 Cây 8
Chứng minh 8
2 Cây phủ 9
MỞ ĐẦU
Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh đó Đây là công cụ hữu hiệu để mô hình hoá và giải quyết các bài toán trong nhiều lĩnh vực khoa học, kỹ thuật, kinh tế, xã hội
Khi nghiên cứu bộ môn lý thuyết đồ thị, chúng ta được tiếp cận với nhiều khái niệm, tri thức mới Trong đó, một khái niệm mà chúng ta không thể không nhắc tới đó là khái niệm về CÂY Cây là một cấu trúc dữ liệu được sử dụng rộng rãi gồm một tập hợp các đỉnh (nút) Một trong số những bài toán liên quan đến
cây mà chúng ta được tìm hiểu đó là bài toán tìm cây phủ (cây bao trùm) Đồ thị
có cây phủ là đồ thị khi ta chọn một đỉnh làm đỉnh gốc thì qua đỉnh đó luôn có một đường đi đi qua tất cả các đỉnh còn lại của đồ thị Cây phủ thì có nhiều ứng dụng trong các bài toán điều khiển giao thông, nối các mạng điện…Ngoài ra, chúng ta còn sử dụng khái niệm cây phủ để kiểm tra tính liên thông của một đồ thị
Trong thực tế có một vấn đề đặt ra là: Khi ta xây dựng các con đường thông thương giữa các thành phố, làm thế nào để chi phí bỏ ra là thấp nhất nếu ta biết trước được chi phí của con đường giữa 2 thành phố bất kỳ Từ yêu cầu thực tế
này dẫn đến bài toán “Tìm cây phủ nhỏ nhất”.
Bài toán tìm cây phủ nhỏ nhất (hay cây khung tối tiểu- Minimmum Spanning Tree - MST) của một đồ thị vô hướng là một bài toán rất nổi tiếng và
Trang 3có ứng dụng rất lớn Hiện nay đã có rất nhiều thuật toán giải quyết bài toán MST trong các trường hợp cụ thể để giải quyết các bài toán thực tế Tuy nhiên hai giải thuật kinh điển để tìm cây phủ nhỏ nhất là thuật toán Prim và thuật toán Kruskal.
CHƯƠNG I ĐẠI CƯƠNG VỀ ĐỒ THỊ
I Một số khái niệm
1 Đồ thị có hướng và đồ thị vô hướng
Định nghĩa 1.1: Đồ thị vô hướng G = (V, E) gồm một tập V các đỉnh và
tập E các cạnh Mỗi cạnh e ∈ E đựoc liên kết với một cặp đỉnh v, w (không kể thứ tự) như hình sau:
v e w
Định nghĩa 1.2: Đồ thị có hướng G = (V, E) gồm một tập V các đỉnh và
tập E các cạnh có hướng gọi là cung
Mỗi cung e ∈ E được liên kết với một cặp đỉnh (v, w) có thứ tự như hình sau:
v e w
Cho đồ thị (có hướng hoặc vô hướng) G = (V, E)
Nếu cạnh e liên kết đỉnh v, w thì ta nói cạnh e liên thuộc đỉnh v, w, các đỉnh v, w liên thuộc cạnh e, các đỉnh v, w là các đỉnh biên của cạnh e và đỉnh v
kề đỉnh w.
Nếu chỉ có duy nhất một cạnh e liên kết với cặp đỉnh v, w, ta viết e=(v,w) Nếu
e là cung thì v gọi là đỉnh đầu và w gọi là đỉnh cuối của cung e
2 Đường đi, chu trình, tính liên thông
Cho đồ thị G=(V, E)
Dây µ từ đỉnh v đến đỉnh w là tập hợp các đỉnh và cạnh nối tiếp nhau bắt đầu từ đỉnh v và kết thúc tại đỉnh w Số cạnh trên dây µ goi là độ dài của dây µ.
Trang 4Dây µ từ đỉnh v đến đỉnh w độ dài k được biểu diễn như sau:
µ=(v, e1, v1, e2, v2, , vk-1, ek, w).
Trong đó vi (i = 1, , k - 1) là các đỉnh trên dây ei (i = 1, , k – 1) là các cạnh trên dây liên thuộc đỉnh kề trước và sau nó Các đỉnh và cạnh trên dây có thể lặp lại
a Đường đi
Đường đi từ đỉnh v đến đỉnh w là dây từ đỉnh v đến đỉnh w, trong đó các
cạnh không lặp lại
Đường đi sơ cấp là đường đi không đi qua một đỉnh quá một lần.
Đường đi có hướng trong đồ thị có hướng là dây có hướng, trong đó các
cung không lặp lại
Đường đi có hướng sơ cấp là đường đi có hướng không đi qua một đỉnh
quá một lần
Dây có hướng trong đồ thị có hướng là dãy các đỉnh và cung nối tiếp nhau
(e1, e2, …, ek) thoả mãn đỉnh cuối của cung ei là đỉnh đầu của cung ei+1, i=1, k-1
Vòng là dây có đỉnh đầu và đỉnh cuối trùng nhau.
Vòng có hướng là dây có hướng có đỉnh đầu và đỉnh cuối trùng nhau.
b Chu trình
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình có hướng là đường đi có hướng có đỉnh đầu và đỉnh cuối trùng
nhau
Chu trình sơ cấp là chu trình không đi qua một đỉnh quá 1 lần.
Chu trình có hướng sơ cấp là chu trình có hướng không đi qua một đỉnh
quá một lần
c Tính liên thông
Đồ thị vô hướng gọi là liên thông, nếu mọi cặp đỉnh của nó đều có đường
đi nối chúng với nhau
Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có
đường đi có hướng nối chúng với nhau
Đồ thị có hướng gọi là liên thông yếu, nếu đồ thị lót (vô hướng) của nó
liên thông
Đồ thị có hướng gọi là bán liên thông, nếu với mọi cặp đỉnh (u,v) bao giờ
cũng tồn tại đường đi có hướng từ u đến v hoặc từ v đến u
Đồ thị liên thông mạnh => Đồ thị bán liên thông => Đồ thị liên thông yếu.
Trang 53 Trọng đồ
Định nghĩa: Trọng đồ (có hướng) là đồ thị (có hướng) mà mỗi cạnh
(cung) của nó được gán một số
Trọng đồ được biểu diễn bởi G = (V, E, w), trong đó V là tập các đỉnh, E là tập các cạnh (cung) và w: E -> R là hàm số trên E w(e) là trọng số của cạnh (cung) e với mọi e ∈ E.
Trong trọng đồ độ dài trọng số của đường đi µ là tổng các trọng số trên đường đi đó
Đối với bài toán “Cây phủ nhỏ nhất” thì bài toán biểu diễn đồ thị dưới dạng:
Ma trận kề, ma trận trọng số, danh sách cạnh(cung) và danh sách kề
a Ma trận kề, ma trận trọng số của đồ thị vô hướng
Ma trận kề :
Cho đồ thị G=(V,E) có n đỉnh theo thứ tự là v1, v2, …vn Ma trân kề của đồ thị G
là ma trận vuông A=(aij)nxm trong đó aij là số cạnh (khuyên) nối vi với vj Lưu ý khi tính bậc của đỉnh mỗi khuyên được tính hai bậc
Ma trận kề của đồ thị vô hướng luôn đối xứng nhau qua đường chéo chính
Trang 6Ma trận trọng số
Cho đồ thị vô hướng G = (V,E) có n đỉnh theo thứ tự là v 1, v 2, …v n Ma trận
khoảng cách của G là ma trận D = (d ij) xác định như sau
dij = 0 nếu i=j
hoặc w(vi,vj) nếu (vi,vj) ∈Ehoặc ∞ nếu (vi,vj) ∉E
Ma trận khoảng cách của đồ thị sau là: (các ô trống là ∞)
Trang 7b Danh sách cạnh (cung)
Trong trường hợp đồ thị thưa (đồ thị có số cạnh m thoả mãn bất đẳng thức m
< 6n) người ta thường dùng cách biểu diễn đồ thị dưới dạng danh sách cạnh
Trong cách biểu diễn đồ thị bởi danh sách cạnh (cung) chúng ta sẽ lưu trữ danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có hướng) Một cạnh (cung) e=(x,y) của đồ thị sẽ tương ứng với hai biến Dau[e], Cuoi[e] Như vậy , để lưu trữ đồ thị ta cần sử dụng 2m đơn vị bộ nhớ Nhược điểm của cách biểu diễn này là để xác định những đỉnh nào của đồ thị là kề với một đỉnh cho trước chúng
ta phải làm cỡ m phép so sánh (khi duyệt qua danh sách tất cả các cạnh của đồ thị)
(a,b),(a,c),(a,e),(b,d),(c,d),(c,e),(c,f),(d,f),(f,e) được lưu trữ bởi các mảng
Đầu[e], Cuối[e], e=1, 9 như sau:
Khi đó vòng lặp thực hiện với mỗi một phần tử trong danh sách này theo thứ
tự các phần tử được sắp xếp trong nó sẽ được viết như sau:
Với mọi u ∈ Ke(v) do <công việc>.
Trang 8II Cây và cây phủ
Gốc của cây là một đỉnh đặc biệt, thông thường là đỉnh trên cùng
Mức của đỉnh là độ dài đường đi từ gốc đến đỉnh đó
Độ cao của cây là mức lớn nhất của cây (tức mức của đỉnh cách xa cây nhất)
Trong ví dụ trên nếu ta chọn v1 là gốc thì v2, v3 là những đỉnh mức 1, các đỉnh v4, v5, v6, v7 có mức 2, và độ cao của cây là 2
Định lý
Cho T là đồ thị n đỉnh Các mệnh đề sau tương đương
(i) T là cây
(ii) T không chứa chu trình và có n-1 cạnh
(iii) T liên thông và có n-1 cạnh
(iv) T liên thông và mỗi cạnh là cầu
(v) Hai đỉnh bất kỳ được nối với nhau bởi một đường đi duy nhất
(vi) T không chứa chu trình và nếu thêm một cạnh nối hai đỉnh thì ta thu được
đúng 1 chu trình
(vii) T liên thông và nếu thêm một cạnh nối hai đỉnh thì ta thu được đúng 1 chu
trình
Chứng minh
Các mệnh đề trên hiển nhiên tương đương với n=1
(i)⇒(ii): Quy nạp theo số đỉnh n Giả sử đúng với mọi n ≤ k Cho n=k+1 Giả sử e là cạnh của T Loại e khỏi T ta có đồ thị T’ gồm 2 thành phần liên thông T1 và T2 Gọi ni , mi là số đỉnh và số cạnh tương ứng với Ti, i=1,2 Theo giả thiết quy nạp mi = ni – 1 , i =1,2
Vậy số cạnh của T là
Trang 91+ m1 + m2 = n1 + n2 – 1 = n – 1
(ii)⇒(iii): Bằng phản chứng Giả sử T không liên thông và có k thành phần liên thông (k ≥ 2) T1, T2, , Tk Vì T không chứa chu trình nên các thành phần liên thông cũng không chứa chu trình Theo định nghĩa T1, T2, , Tk cũng
là cây Gọi ni , mi là số đỉnh và số cạnh tương ứng với Ti , i=1, ,k Theo (ii) ta có:
mi = ni – 1, i =1, ,k
Suy ra số cạnh m của T là :
m = ∑ mi = ∑ (ni – 1) = n - k
mâu thuẫn với (ii) (m=n-1)
(iii)⇒(iv): Việc loại bỏ cạnh bất kỳ của T dẫn đến một đồ thị n đỉnh và
n-2 cạnh Đồ thị này không thể liên thông được Vậy mỗi cạnh của T là cầu
(iv)⇒(v): Do T liên thông nên hai đỉnh bất kỳ của nó được nối với nhau bằng một dây đường đi Nếu có cặp đỉnh được nối với nhau bằng 2 đường đi thì suy ra đồ thị chứa chu trình và các cạnh trên chu trình đó không thể là cầu được, mâu thuẫn
(v)⇒(vi): Hiển nhiên T không chứa chu trình Bây giờ ta thêm cạnh e=(u,v) Khi đó cạnh e cùng đường đi nối u và v tạo nên chu trình duy nhất của T
(vi)⇒(vii): Hiển nhiên
(vii)⇒(i): T liên thông Nếu T có chu trình thì khi thêm cạnh nối hai đỉnh trên chu trình ta sẽ nhận được 2 chu trình, vậy T là cây
2 Cây phủ
Định nghĩa: Cho đồ thị G=(V,E) Cây T gọi là cây phủ hay cây bao trùm
của G, nếu T là đồ thị con phủ của G
Định lý : Đồ thị G = (V, E) có cây phủ khi và chỉ khi G liên thông.
Chứng minh
(=>): Nếu G có cây phủ thì hiển nhiên G liên thông
(<=): Giả sử G là đồ thị liên thông Nếu G không có chu trình thì theo định nghĩa
G là cây phủ của chính nó Nếu G có chu trình thì ta bỏ bớt 1 cạnh (không bỏ đỉnh) trên chu trình đó Đồ thị con thu được vẫn liên thông Nếu vẫn còn chu trình ta lại bỏ bớt 1 cạnh, cứ tiếp tục quá trình trên cho đến khi không còn chu trình thì ta thu được cây phủ của đồ thị G
Ví dụ : Các cây T1 và T2 là cây phủ của đồ thị G
Trang 103 Khái niệm cây phủ nhỏ nhất
Cho G=(V,E, (cij)) là trọng đồ liên thông có trọng số (cij) Cây phủ T của
G được gọi là cây phủ nhỏ nhất của G nếu trong số tất cả các cây phủ của G, tổng trọng số của cây T là nhỏ nhất
CHƯƠNG II CÂY PHỦ NHỎ NHẤT
I Bài toán cây phủ nhỏ nhất
1 Bài toán thực tế
Giả sử ta muốn xây dựng một hệ thống đường sắt nối n thành phố sao cho giữa hai thành phố bất kỳ đều có thể thông thương với nhau Nếu biết trước chi phí xây dựng các tuyến đường thì bài toán đặt ra là phải xây dựng những tuyến đường nào để tổng chi phí xây dựng là ít nhất
Nếu ta coi các thành phố là đỉnh và các tuyến đường nối các thành phố là cạnh kèm theo chi phí xây dựng thì ta có trọng đồ, ví dụ như trọng đồ ở hình sau:
4
Trang 11Khi đó bài toán quy về tìm cây phủ bé nhất của đồ thị.
2 Bài toán tổng quát
Cho G(V, E, (ci j)) là trọng đồ liên thông có trọng số (ci j) Tìm cây phủ T của G có trọng số:
a Phát biểu: Cho G=(V,E, (c ij )) là đồ thị liên thông có trọng số (c ij) Khi
đó T là cây phủ nhỏ nhất của G khi và chỉ khi mỗi cạnh e ∉ T có
trọng số lớn nhất trên chu trình tạo bởi e và các cạnh của T
b Chứng minh: Điều kiện cần là hiển nhiên Ta chứng minh điều kiện đủ.
Giả sử S là cây bất kỳ có k cạnh không thuộc T Ta chứng minh
d(S) ≥ d(T)qui nạp theo k
Gọi e1, e2, ,en-1 là các cạnh của T sắp theo thứ tự trọng số tăng dần
c(e1) ≤ c(e2) ≤ ≤ c(en-1)
+ Bước cơ sở: k=0 Hiển nhiên là d(S) = d(T) vì S=T
+ Bước qui nạp: Giả sử mọi cây với số cạnh không thuộc T ít hơn k đều có trọng
số không nhỏ hơn d(T)
Gọi ei là cạnh đầu tiên trong dãy các cạnh của T không thuộc S Cạnh ei
và các cạnh của S tạo thành chu trình duy nhất CS Chu trình CS bắt buộc phải chứa cạnh e ∈ S \ T
Cạnh e cùng với các cạnh của T tạo thành chu trình duy nhất CT Vì S chứa các cạnh e1, ,ei-1 và e, nên CT phải có cạnh ej với j ≥ i và ej ∉S (nếu không, CT⊂ S, vô lý) Thay cạnh e bằng cạnh ei, ta thu được cây phủ S’ có d(S’)
≤ d(S), vì c(e) ≥ c(ej) ≥ c(ei) Do S’ chỉ có k-1 cạnh không thuộc T nên theo giả thiết qui nạp
d(S) ≥ d(S’) ≥ d(T)
Trang 12II Các thuật toán tìm cây phủ nhỏ nhất
1 Thuật toán Prim
a Thuật toán
+ Đầu vào: Đồ thị G=(V,E) có trọng số
Các đỉnh kí hiệu là 1,2,…,n
Trọng số của cạnh (i, j), (i ,j) ∈ E, kí hiệu cij
+ Đầu ra: Cây phủ nhỏ nhất T hoặc kết luận đồ thị không liên thông
+ Các bước:
(1) Khởi tạo: T là đồ thị gồm một đỉnh 1 và không có cạnh
(2) Kiểm tra điều kiện kết thúc :
Nếu T có n - 1 cạnh , kết thúc Kết luận T là cây phủ nhỏ nhất
Ngược lại sang bước 3
(3) Thêm cạnh :
Kí hiệu M là tập : M = { (i, j) ∈ E i ∈ T & j ∉ T }
Tìm cạnh (k,h) ∈ M sao cho : ckh = min { cij (i, j) ∈ M }
Nếu ckh < ∞ , thêm cạnh (k, h) và đỉnh h vào T, sang bước 2
Ngược lại, tức M = ∅, kết thúc Kết luận đồ thị G không liên thông
b Định lý Thuật toán Prim là đúng.
Nếu các cạnh của T cũng là cạnh của S thì hiển nhiên d(S) = d(T)
Ngược lại gọi em là cạnh đầu tiên trong dãy các cạnh của T xây dựng theo thuật toán không thuộc S Cạnh em và các cạnh của S tạo thành chu trình duy nhất C
Chu trình C chứa đỉnh vm∈Tm , trong đó Tm = {v1, ,vm} là số đỉnh có được
ở bước thêm cạnh em Chu trình C bắt buộc phải chứa cạnh e nối đỉnh của Tm với đỉnh không thuộc Tm (nếu không C⊂T) Theo thuật toán thì cạnh e có trọng số không nhỏ hơn trọng số của em Vì vậy thay cạnh e bằng cạnh em, ta thu được cây phủ S’ có d(S’) ≤ d(S) Lặp lại quá trình trên ta biến đổi cây S thành cây phủ T
và suy ra
d(S) ≥ d(S’) ≥ ≥ d(T)
Trang 13Ví dụ 1 Áp dụng thuật toán Prim tìm cây phủ nhỏ nhất của đồ thị sau
(1) Khởi tạo: T chỉ có 1 đỉnh a, không có cạnh
T = ( {a},∅ ), d(T) :=0
(2) Kiểm tra : Số cạnh của T là 0, sang bước 3
(3) Thêm cạnh : Tập M là : M = { (a,b) , (a,c) , (a,e) }
Ta có : cac = 2 = min { cij (i,j) ∈ M }
Thêm đỉnh c và cạnh (a,c) vào T
T := ( {a,c}, {(a,c)})d(T) := d(T) + cac = 2(2) Kiểm tra : Số cạnh của T là 1, sang bước (3)
(3) Thêm cạnh :
Tập M là : M = { (a,b) , (a,e) , (c,d) , (c,e) , (c,f) , (d,b) , (d,f) }
Ta có cae = cef = 3 = min { cij (i,j) ∈ M }
Thêm đỉnh e và cạnh (a,e) vào T
T := ( {a,c,d,e}, {(a,c) , (c,d) , (a,e) })d(T) := d(T) + cae = 3 + 3 = 6(2) Kiểm tra : Số cạnh của T là 3, sang bước 3
(3) Thêm cạnh : Tập M là : M = { (a,b) , (c,f) , (d,b) , (d,f) , (e,f)}
Ta có : cef = 2 = min { cij (i,j) ∈ M }
Thêm đỉnh f và cạnh (e,f) vào T
Trang 14T := ( {a,c,d,e,f}, {(a,c) , (c,d) , (a,e) , (e,f) })
d(T) := d(T) + aef = 6 + 2 =8(2) Kiểm tra : Số cạnh của T là 4, sang bước 3
(3) Thêm cạnh : Tập M là : M = { (a,b) , (d,b) }
Ta có : cab = 4 = min { cij (i,j) ∈ M }
Thêm đỉnh b và cạnh (a,b) vào T
T := ( {a,c,d,e,f,b}, {(a,c) , (c,d) , (a,e) , (e,f) , (a,b) })
d(T) := d(T) + cab = 8 + 4 = 12(2) Kiểm tra : Số cạnh của T là 5, kết thúc
Bảng dưới đây ghi nhãn của các đỉnh trong bước lặp của thuật toán đỉnh
đánh dấu * là đỉnh được bổ sung vào cây phủ T (khi đó nhãn của chúng không bị biến dạng trong các bước lặp tiếp theo, vì vây ta đánh dấu – để ghi nhận điều đó)
Khởi tạo cây phủ T chỉ có đỉnh a, không có cạnh