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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

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) . [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). đồ 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 đồ. 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

Ngày đăng: 24/07/2014, 12:21

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan