Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ
NguyÔn Minh §øc - §HQG Hµ Néi
53Chương 5
CÂY VÀ CÂY KHUNG CỦA ĐỒ THN
5.1 Cây và các tính chất cơ bản của cây
Định nghĩa 1
Cây là đồ thị vô hướng, liên thông và không có chu trình đơn.
Đồ thị không liên thông được gọi là rừng (các thành phần liên thông của đồ thị là các cây của
rừng).
Ví dụ 1
Trong hình 5.1 dưới đây là một rừng gồm ba cây T1, T2 và T3
Định lý 1 (Các tính chất của cây)
Giả sử T = (V,E) là đồ thị vô hướng liên thông n đỉnh. Khi đó các mệnh đề sau đây là tương
đương.
1)
n đỉnh thì nó có n-1 cạnh.
Thật vậy, với n=1 là hoàn toàn đúng.
Giả sử điều khẳng định dúng với n=k, tức là cây T có k đỉnh thì có k-1 cạnh, ta đi chứng minh khẳng
định đúng với n=k+1.
Trước hết ta thấy rằng mọi cây T có k+1 đỉnh ta luôn tìm được ít nhất một đỉnh là đỉnh cheo (đỉnh
có bậc bằng 1). Gọi v1, v2, vj là đường đi dài nhất theo số cạnh trong T, khi đó rõ ràng v1 và vj là
các đỉnh treo, vì từ v1 (và vk) không có cạnh nối tới bất kì đỉnh nào khác do T không chứa chu trình
và đường đang xét là đường dài nhất. Loại dỉnh v1 và cạnh (v1, v2) khỏi T ta thu được cây T1 với k
đỉnh, theo giả thiết thì T1 có k-1 cạnh do đó T phải có k cạnh. Vậy khẳng định là đúng với mọi n.
T1 T2 T3
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ
NguyÔn Minh §øc - §HQG Hµ Néi
54
2)
⇒
3):
Ta chứng minh bằng phản chứng:
Giả sử T không liên thông, khi đó T có k>1 thành phần liên thông T1, T2, ,Tk. Do T không chứa
chu trình nên Ti cũng không chúa chu trình, vì thế mỗi Ti là một cây. Nếu ta gọi v(Ti) và e(Ti) lần
lượt là số đỉnh và cạnh của cây Ti ta sẽ có:
e(Ti) = v(Ti)-1
Suy ra n-1 = e(T) = e(T1)+e(T2)+ +e(Tk) = v(T1)+v(T2)+ +v(Tk)-k=n-k
Suy ra k=1, nghĩa là T phải liên thông.
3)
⇒
4):
Việc loại bỏ bất kì một cạnh nào của T đều cho ta một đồ thị n đỉnh n-2 cạnh, rõ ràng là đồ thị khi
đó sẽ không liên thông.
4)
Đị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 đồ thị G.
Ví dụ2
Cho đồ thị vô hướng G = (V,E) như hình vẽ sau (Hình 5.2)
Định lý 3
Đồ thị G = (V,E) có cây khung (cây bao trùm) khi và chỉ khi G là đồ thị liên thông
Chứng minh
Điều kiện cần:
Đồ thị G có cây bao trùm thì G là đồ thị liên thông.
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ
NguyÔn Minh §øc - §HQG Hµ Néi
55
Giả sử G có cây bao trùm là G’, ta chi ra G là liên thông. Thật vậy, nếu G không liên thông thì
tồn tại cặp đỉnh u, v mà giữa chúng không có đường nối nào, mà u, v cũng là đỉnh của G’, chứng tỏ
G’ không liên thông. điều này trái với giả thiết G’ là cây.
Điều kiện đủ:
Đồ thị G là liên thông thì G có cây bao trùm.
Giả sử G là liên thông
a)
N ếu trong G không có chu trình thì G là một cây, do đó cây bao trùm G’ của G chính là G.
b)
N ếu trong G có chu trình thì ta bỏ đi một cạnh trong chu trình đó thì ta được G’ liên thông và
không có chu trình, G’ là cây của G.
(Đpcm).
Φ≠
do
Begin
v
⇐
Q;
For u
∈Ke(v) do
If Chuaxet[u] Then
Begin
Q
⇐
u;
Chuaxet[u]:=False;
T:= T
∪
(v,u);
End;
End;
End;
Chương trình chính Giáo án môn: Lý Thuyết Đồ Thị
Nguyễn Minh Đức - ĐHQG Hà Nội
56
BEGIN
For v V do
di nh nht sao cho vic b xung cnh ú vo tp K m khụng to thnh chu trỡnh. Thut toỏn s
kt thỳc khi ta thu c tp K cú n-1 cnh, th tc trỡnh by thut toỏn nh sau:
Procedure Kruskal;
Begin
K:=
;
While |K|<(n-1) and E
do
Begin
Chon e l cnh cú di nh nht trong E;
E:=E\{e};
If K
{e} khụng cha chu trỡnh Then
K:=K
{e};
End;
If |K|<n-1 Then
th khụng cú cõy khung;
Else
T:=(V,K) l cõy khung nh nht;
End; Vớ d 4
Xột th cho bi hỡnh di õy (Hỡnh 5.
Thứ tự từ trái qua phải, từ trên xuống dưới của các hình dưới đây minh hoạ việc tìm cây khung
nhỏ nhất theo thuật toán Kruskal, trong đó các cạnh có nét đậm là cạnh được chọn vào cây khung,
các cạnh có nét đứt là các cạnh bị bỏ qua trong quá trình tìm cây khung của thuật toán.
Giả sử đồ thị cho bởi ma trận trọng số C={c[i,j];i,j=1,2, ,n}. Trong quá trình thực hiện thuật
toán, ở mỗi bước để nhanh chóng chọn được các đỉnh và cạnh cần bổ xung vào cây khung, mỗ đỉnh
v của đồ thị sẽ được gán một nhãn có dạng [min(v), near(v)], trong đó min(v) là độ dài của cạnh có
độ dài nhỏ nhất trong số các cạnh nối đỉnh v với các đỉnh của cây khung đang xây dựng, còn near(v)
là đỉnh của cây khung gần v nhất.
Thuật toán Prim được mô tả bằng thủ tục sau
Procedure Prim;
Begin
(* Bước khởi tạo *)
Chọn s là một đỉnh nào đó của đồ thị;
V
T
:= {s}; P:=
φ
; (* V
T
là tập đỉnh, P là tập cạnh của cây khung *)
min(s):=0; near(s):=s;
For v
∈
V\V
T
do
Begin
min(v):=c[s,v];
near(v):=s;
End;
(* Bước lặp *)
Stop:=false;
While not Stop do
min(v):=c[u,v];
near(v):=u;
End;
End;
End;
Ví dụ 5:
Xét đồ thị cho ở ví dụ 4
Ma trận trọng số của đồ thị có dạng
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ
NguyÔn Minh §øc - §HQG Hµ Néi
591 2 3 4 5 6 7 8 9
1
0 17
∞ ∞ ∞
2 4
∞ ∞
2
17 0 15
∞ ∞ ∞
9
∞ ∞
3
∞
15 0 18
∞
9
∞ ∞
21 16
∞ ∞ ∞ ∞
0
Bảng dưới đây cho ta hình ảnh về các bước lặp của thuật toán Prim, đỉnh có dấu * là đỉnh được chọn
để bổ xung vào cây khung và khi đó nhãn của nó không còn bị biến đổi ở các bước tiếp theo nên ta
dùng dấu x để ghi nhận điều đó.
Đỉnh
B.lặp
1 2 3 4 5 6 7 8 9 V
T
P
K.tạo [0,1] [17,1] [ ∞ ,1] [ ∞ ,1] [ ∞,1] [2,1]
*
[4,1] [ ∞ ,1] [ ∞,1] 1
φ
1 x [17,1]
[
∞
,1] [
∞
,1]
[8,6] x [4,1]
*