Tải bản đầy đủ (.pdf) (7 trang)

Bài giảng lý thuyết đồ thị - Chương 5 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (338.42 KB, 7 trang )

Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ

NguyÔn Minh §øc - §HQG Hµ Néi
53


Chươ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)


T là cây
2)
T không chứa chu trình và có n-1 cạnh
3)
T liên thông và có n-1 cạnh
4)
T liên thông và nếu bỏ đi một cạnh tuỳ ý thì đồ thị nhận được sẽ không liên thông
5)
Hai đỉnh bất kỳ của T được nối với nhau bởi đúng một đường đi đơn
6)
T không chứa chu trình nhưng nếu thêm vào một cạnh nối hai đỉnh không kề nhau thì xuất
hiện duy nhất một chu trình.

Chứng minh
Ta sẽ chứng minh định lý theo sơ đồ vòng tròn như sau:
1)

2)

3)

4)

5)

6)

1)
1)⇒ 2):
Theo định nghĩa, vì T là cây nên nó không chứa chu trình. Ta đi chứng minh bằng quy nạp nếu T có

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)


5):
Ta chứng minh bằng phản chứng: Giả sử tồn tại hai đỉnh trong T được nối với nhau bởi hai
đường đi đươn khác nhau, khi đó ta hoàn toàn có thể bỏ đi một cạnh ở một trong hai đường đi đó mà
đồ thị nhận được vẫn liên thông, điều này là trái với giả thiết.
5) ⇒ 6):
Rõ ràng T không chứa chu trình, vì nếu có thì ta sẽ tìm được một cặp đỉnh được nối với nhau bởi hai
đường đi đơn, trái với giả thiết. Bây giờ nếu ta thêm vào T một cạnh e nối hai đỉnh u và v của T. Khi
đó cạnh này cùng với đường đi đơn nối u và v sẽ tạo thành một chu trình. Chu trình thu được này là
duy nhất vì nếu không thì trước đó phải có chu trình, điều này lại trái với giả thiết.
6) ⇒ 1):
Giả sử T không liên thông, khi đó T có ít nhất là hai thành phần liên thông, khi đo nếu thêm một
cạnh nối hai đỉnh ở hai thành phần liên thông khác nhau ta không thu được thêm một chu trình nào
cả, điều này trái với giả thiết.
Định lý được chứng minh.
Định lý 2
Trong một cây số đỉnh treo là lơn hơn hoặc bằng 2.
Chứng minh
Ta chứng minh bằng phản chứng:
Giả sử số đỉnh treo trong cây là nhỏ hơn 2, khi đó có hai trường hợp xãy ra:
a)
Số đỉnh treo băng 0
Nếu không có đỉnh treo thì xuất phát từ một đỉnh ta luôn tìm đường quay về đỉnh đó, nghĩa là
luôn tìm được một chu trình, mâu thuẫn với giả thiết
b)
Số đỉnh treo là 1, Ta xuất phát từ đỉnh treo này, vì mỗi đỉnh khác đỉnh treo đường đi se đi
vào từ một cạnh rồi đi ra bằng một cạnh khác quá trình này sẽ vô hạnh vì nếu hữu hạn sẽ
xuất hiện đỉnh treo. điều này mâu thuNn với tính hữu hạn của đồ thị.
(Định lý được chứng minh)
5.2 Cây khung của đồ thị (Cây bao trùm)

Đị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).

Để tìm khung của đồ thị ta có thể áp dụng một trong hai thuật toán tìm kiếm theo chiều sâu và thuật
toán tìm kiếm theo chiều rộng trên đồ thị. Trong cả hai trường hợp mỗi khi ta đến được đỉnh u (tức
là biến Chuaxet[u]=true) từ đỉnh v thì cạnh (u,v) sẽ được nạp vào cây khung. Hai thuật toán được áp
dụng như sau:
Tìm kiếm theo chiều sâu:
Procedure DFS_TREE(r)
(* Tìm cây khung T của đồ thị vô hướng liên thông G cho bởi danh sách kề *)
Begin
Chuaxet[r]:=false;
For v
∈Ke(r) do
If Chuaxet[v] Then
Begin
T:=T
∪ (r,v);
DFS_TREE(v);
End;
End;

Tìm kiếm theo chiều rộng
Procedure BFS_TREE(r)
Begin
Q:=
Φ
;
Q

r;
Chuaxet[r]:=False;
While Q

Φ≠
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

Chuaxet[v]:=True;
T:=

;
DFS_TREE(root); (* Hoc BFS_TREE(root); *)
END.

Vớ d 3

5.3 Bi toỏn tỡm cõy khung nh nht (ln nht ca th)
Bi toỏn:
Cho G=(V,E) l th vụ hng liờn thụng vi |V|=n v |E|=m. Mi cnh e ca th c gỏn
mt s c(e) gi l di ca cnh. Gi s H = (V,T) l cõy khung ca th G. Ta goi c(H) ca
cõy khung H l tng di cỏc cnh ca cõy:
c(H)=

Te
ec )(

Bi toỏn t ra l trong s tt c cỏc cõy khung H ca th G hóy tỡm cõy khung cú c(H) nh nht.
Cõy khung nh vy c gi l cõy khung nh nht ca th.

gii quyờt bi toỏn ny ta hon ton cú th lit kờ tt c cỏc cay khung ca th sau ú chn ly
cõy khung cú di nh nht, xong cỏch ny khụng c tt trong trng hp th cú nhiu cõy
khung. Do vy ta phi cú mt cỏc no ú xõy dng c mt cõy khung ca th sao cho di
ca cõy l nh nht. Di õy ta s nghiờn cu hai thut toỏn ỏp ng c yờu cu trờn.
5.3.1 Thut toỏn Kruskal
Thut toỏn Kruskal s xõy dng tp cnh T ca cõy khung T=(V,K) theo tng bc nh sau:
Trc ht sp xp cỏc cnh ca th G theo th t khụng gim ca di cnh. Ban u tõp K:=
, mi bc ta s ln lt duyt trong danh sỏch cỏc cnh ó sp xp tỡm ra mt cnh cú

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.

Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ

NguyÔn Minh §øc - §HQG Hµ Néi
57
2
17
1
16
23
4
5
15
7
6
8
9
3
12
18
21
1
2
3
4
5
6
7
9
8
















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¸o ¸n m«n: Lý ThuyÕt §å ThÞ

NguyÔn Minh §øc - §HQG Hµ Néi
58
5.3.2 Thuật toán Prim
Thuật toán Prim sẽ xây dựng cây khung T=(V,P) theo cách sau:
Bắt đầu từ từ một đỉnh s tuỳ ý của đồ thị, đầu tiên ta nối s với đỉnh lân cậnh gần nhất của nó, chẳng
hạn là đỉnh u (đỉnh u là lân cận gần nhất của s nếu như (u,s) là cạnh kề có độ dài nhỏ nhất của đỉnh
s). Tiếp theo, trong số các trong số các cạnh kề với hai đỉnh s, u ta tìm cạnh có độ dài nhỏ nhất, cạnh
này dẫn đến đỉnh thư ba, chẳng hạn là đỉnh v, và ta thu được cây bộ phận gồm 3 đỉnh 2 cạnh. Quá
trình này sẽ tiếp tục cho đến khi thu được cây gồm n đỉnh và n-1 cạnh, cây này sẽ là cây khung nhỏ
nhất cần tìm.

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

Begin
Tìm u

V\V
T
có min(u) nhỏ nhất;
V
T
:=V
T

{u}; P:=P

{ (u,near(u))};
If |V
T
| = n then
Begin
T = (V
T
,P) là cây khung nhỏ nhất;
Stop:=true;
End
Else
For v
∈V\V
T
do
If min(v)>c[u,v] then
Begin

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
59


1 2 3 4 5 6 7 8 9
1
0 17
∞ ∞ ∞
2 4
∞ ∞
2
17 0 15
∞ ∞ ∞
9
∞ ∞
3

15 0 18

∞ ∞
7

21
4
∞ ∞
18 0 12

1 23
5





12 0 8 6 3

6
2
∞ ∞ ∞
8 0 5
∞ ∞
7
4 9 7 1 6 5 0
∞ ∞
8
∞ ∞ ∞
23 3
∞ ∞
0


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]
*

[

,1] [

,1]
1,6 (6,1)
2 x [9,7] [7,7] [1,7]
*
[6,7] x x [ ∞ ,1] [ ∞ ,1] 1,6,7 (6,1)(7,1)
3 x [9,7] [7,7] x [6,7]
*
x x [23,4] [16,4] 1,6,7,4 (6,1)(7,1)(4,7)
4 x [9,7] [7,7] x x x x [3,5]
*
[16,4] 1,6,7,4,5 (6,1)(7,1)(4,7)(5,7)
5 x [9,7] [7,7] x x x x x [16,4] 1,6,7,4,5,8 (6,1)(7,1)(4,7)(5,7)(8,5)
6 x [9,7]
*
x x x x x x [16,4] 1,6,7,4,5,8,3 (6,1)(7,1)(4,7)(5,7)(8,5)(3,7)
7 x x x x x x x x [16,4]
*
1,6,7,4,5,8,3,2 (6,1)(7,1)(4,7)(5,7)(8,5)(3,7)(2,7)
8 x x x x x x x x X 1,6,7,4,5,8,3,1,9 (6,1)(7,1)(4,7)(5,7)(8,5)(3,7)(2,7)(9,4)




















×