1. Trang chủ >
  2. Khoa học tự nhiên >
  3. Toán học >

1 Phát triển cây khung nhỏ nhất

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 (685.32 KB, 19 trang )


Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



Duy trì: Vòng lặp từ dòng 2 đến 4 duy trì tính chất của A bằng cách chỉ bổ sung các

cạnh an toàn vào tập A.

Kết thúc: Tất cả các cạnh bổ sung vào tập A là cây khung nhỏ nhất. Tập A được trả

về là một cây khung nhỏ nhất.

Tuy nhiên, việc xác định một cạnh an toàn ở dòng 3 là một vấn đề không đơn giản.

Sự tồn tại của một cạnh an toàn là chắc chắn bởi vì khi thực hiện dòng thứ 3 của thuật

toán, tính bất biến sẽ dẫn đến sự tồn tại một cây khung T sao cho A⊆ T. Trong vòng lặp

while, A phải là tập con thực sự của T vì vậy nếu cạnh (u,v)∈T mà (u,v)∉A thì (u,v) là

an toàn của A.

Trong phần còn lại của phần này, ta đưa ra một quy tắc (Định lý 23.1) để nhận biết

các cạnh an toàn. Phần tiếp theo mô tả hai thuật toán sử dụng nguyên tắc này để tìm ra

các cạnh an toàn một cách hiệu quả.

Đầu tiên ta cần định nghĩa một số khái niệm sau, một phép cắt (S,V-S) của đồ thị vô

hướng G=(V,E) là một phân chia của V. Hình 23.2 là ví dụ minh họa của phép cắt (S,VS). Ta nói một cạnh (u,v) ∈ E xuyên qua phép cắt (S,V-S) nếu có đỉnh cuối thuộc S và

đỉnh còn lại thuộc V-S. Một phép cắt bảo toàn tập các cạnh A nếu không có cạnh nào của

A xuyên qua phép cắt. Một cạnh là được gọi là cạnh nhẹ (light edge) xuyên qua phép cắt

nếu trọng số của nó là nhỏ nhất trong mọi trọng số của các cạnh xuyên qua phép cắt. Lưu

ý rằng có thể có nhiều hơn một cạnh nhẹ xuyên qua một phép cắt trong trường hợp liên

kết. Thông thường, một cạnh là một cạnh nhẹ thoả mãn một tính chất nào đó nếu trọng số

của cạnh đó là nhỏ nhất của tất cả các cạnh thoả mãn tính chất đó. Nguyên tắc để nhận

biết các cạnh an toàn cho bởi định lý sau:

Định lý 23.1

Cho G=(V,E) là một đồ thị liên thông, vô hướng với hàm trọng số w định nghĩa trên

E. Cho A là tập con của E gồm các cây khung nhỏ nhất của G, cho (S, V-S) là phép cắt

bất kỳ của đồ thị G và bảo toàn tập các cạnh A, đ ặt (u,v) là cạnh nhẹ (light edge) xuyên

qua (S,V-S). Vậy cạnh (u,v) là cạnh an toàn của A .

Chứng minh. Cho T là một cây khung nhỏ nhất chứa tập A, giả sử T không chứa cạnh

nhẹ (u,v) , bởi vì nếu T chứa cạnh nhẹ điều đó có nghĩa ta chứng minh xong. Ta sẽ xây

dựng cây khung nhỏ nhất khác T’ mà chứa AU{(u,v)} bằng cách sử dụng kỹ thuật cắt

dán, do đó ta có (u,v) là một cạnh an toàn của A.



Trang 3



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



7



8



(a)

4



a



d



9



2

11



S

V-S



c



b



4

7



8



14



e



i

6

10



h



g



1



f



2



h



(b)



8

7



a

11



i



4



1



6



b

8



g



2



d

7

9



c



14



e



10



2



4



f



S V-S

Hình 23.2 Hai hình vẽ trên là phép cắt (S,V-S) của đồ thị ở hình 23.1 (a) Các đỉnh thuộc tập

S được tô màu đen, và các đỉnh thuộc tập V-S là màu trắng. Các cạnh xuyên qua phép cắt là sự

kết nối giữa các đỉnh trắng và đỉnh đen. Cạnh (d,c) là cạnh nhẹ duy nhất đi qua phép cắt. Tập

con A bao gồm các cạnh được tô bóng lưu ý ở đây phép cắt (S,V-S) là phép cắt bảo toàn các

cạnh A bởi vì không có cạnh nào của A xuyên qua phép cắt. (b) đối với đồ thị ở hình (a) các

đỉnh trong tập S ở bên trái và các đỉnh trong tập V-S ở bên phải. Một cạnh xuyên qua phép cắt

nếu nó nối một đỉnh bên trái và một đỉnh bên phải.



Cạnh (u,v) biểu diễn một chu trình bao gồm các cạnh trên đường dẫn p từ u tới v

trong T, như minh họa ở hình 23.3. Bởi vì u và v là các đỉnh đối nhau của phép cắt

Trang 4



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



(S,V-S), do đó có ít nhất một cạnh trong T trên đường dẫn p cũng xuyên qua phép cắt.

Cho (x,y) là cạnh bất kỳ thoả mãn các tính chất trên. Cạnh (x,y) không thuộc A do phép

cắt bảo toàn các cạnh của tập A. Bởi vì (x,y) nằm trên đường dẫn duy nhất từ u đến v

trong T, xoá (x,y) tách T thành hai phần. Thêm (u,v) tạo thành một cây khung mới T’ =T{(x,y)}U {(u,v)}.

Ta tiếp tục biểu diễn T’ là cây khung nhỏ nhất. Bởi vì (u,v) là cạnh nhẹ xuyên qua

(S,V-S) và (x,y) cũng xuyên qua phép cắt do đó w(u,v)≤w(x,y) . Vì vậy:

w(T’) = w(T) - w(x,y) + w(u,v)

≤ w(T)

Do T là cây khung nhỏ nhất, vì vậy mà w(T)≤w(T’). Vì vậy T’ cũng là cây khung

nhỏ nhất.



x

p



u



y



v



Hình 23.3 Chứng minh định lý 23.1 Các đỉnh thuộc S là màu đen và các đỉnh thuộc V-S là

màu trắng. Ta biểu diễn các cạnh trong cây khung nhỏ nhất T nhưng không biểu diễn các cạnh

trong đồ thị G. Các cạnh trong A được tô bóng và (u,v) là cạnh nhẹ xuyên qua phép cắt (S,V-S).

Cạnh (x,y) là cạnh trên đường dẫn duy nhất p từ u đến v trên T. Cây khung nhỏ nhất T’ chứa

(u,v) và được thiết lập bằng cách xoá cạnh (x,y) từ T và thêm cạnh (u,v).



T’ vẫn duy trì được (u,v) là cạnh an toàn của tập A. Ta có A⊆T’ bởi vì A⊆ T và (x,y)

⊈ A ; vì vậy A⋃{(u,v)} ⊆ T'. Do đó T’ là cây khung nhỏ nhất, và (u,v) là cạnh an toàn

của A.

Định lý 23.1 giúp ta hiểu rõ cách thức thực hiện thuật toán GENERIC-MST trên đồ

thị liên thông G=(V,E). Khi thuật toán bắt đầu thực hiện, A là tập các cạnh không tạo

thành chu trình nếu không thì cây khung nhỏ nhất chứa A sẽ chứa một chu trình, điều

này dẫn đến mâu thuẫn. Ớ bất kỳ thời điểm nào khi thực hiện thuật toán, đồ thị

GA=(V,A) là rừng và mỗi thành phần liên thông của GA là một cây. (Một số cây có thể chỉ

Trang 5



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



chứa một đỉnh, ví dụ khi thuật toán bắt đầu thực hiện: A là tập rỗng và rừng chứa [V]

cây, mỗi cây cho mỗi đỉnh). Hơn thế nữa, bất kỳ cạnh an toàn (u,v) thuộc A nối với các

thành phần phân biệt của G A, bởi vì A⋃{(u,v)} phải là tập các cạnh không tạo thành chu

trình.

Vòng lặp từ dòng 2 – 4 của GENERIC MST được thực hiện [V] –1 lần ứng với mỗi

[V]-1 cạnh của cây khung nhỏ nhất lần lượt được xác định thành công. Ban đầu khi

A=∅, có [V] cây trong GA, và số vòng lặp giảm xuống 1. Khi rừng chỉ chứa một cây duy

nhất thì thuật toán kết thúc. Hai thuật toán trong phần 23.2 sử dụng hệ quả của định lý

23.1.

Hệ quả 23.2

Cho G=(V,E) là một đồ thị liên thông, vô hướng với hàm trọng số w định nghĩa trên

E. Cho A là một tập con của E bao gồm một số cây khung nhỏ nhất cho đồ thị G, và cho

C=(VC,EC) là một thành phần liên thông (cây) trong rừng GA=(V,A). Nếu (u,v) là cạnh

nhẹ nối C với vài thành phần khác trong GA, thì (u,v) là cạnh an toàn của A.

Chứng minh Phép cắt (V C,V-VC) bảo toàn các cạnh của tập A, và (u,v) là một cạnh

nhẹ qua phép cắt này. Vì thế (u,v) là cạnh an toàn của A.



Bài tập

23-1-1

Đặt (u,v) là cạnh có trọng số nhỏ nhất của đồ thị G. Chứng tỏ rằng (u,v) thuộc vào một

cây khung nhỏ nhất nào đó của G.

23-1-2

Giáo sư Sabatier đưa ra định lý đảo của định lý 23.1 như sau: đặt G = (V, E) là một đồ

thị liên thông và vô hướng với một hàm trọng số giá trị thực w định nghĩa trên E. Đặt A

là một tập con của E thuộc vào một cây khung nhỏ nhất nào đó của G, đặt (S, V-S) là

phép cắt bất kỳ của G bảo toàn các cạnh của tập A, và đặt (u, v) là một cạnh an toàn của

A xuyên qua phép cắt (S, V-S). Do đó, (u,v ) là một cạnh nhẹ thuộc vào phép cắt. Chứng

minh rằng giả định của giáo sư Sabatier là không đúng bằng cách đưa ra một phản chứng.

23-1-3

Chứng minh rằng nếu một cạnh (u,v) thuộc vào một cây khung nhỏ nhất nào đó thì nó

là một cạnh nhẹ (light) xuyên qua phép cắt của đồ thị.

23-1-4



Trang 6



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



Cho một ví dụ đơn giản về một đồ thị liên thông sao cho với một tập cạnh (u,v): {Tồn

tại một phép cắt (S, V-S) sao cho (u, v) là một cạnh nhẹ xuyên qua (S, V-S)} không tạo

thành một cây khung nhỏ nhất.

23-1-5

Cho e là một cạnh trọng số nhỏ nhất trên một chu trình nào đó của đồ thị liên thông

G= (V,E). Chứng minh rằng có một cây khung nhỏ nhất của G’=(V, E-{e}) đồng thời là

cây khung nhỏ nhất của G. Tức là có một cây khung nhỏ nhất của G mà nó không chứa e.

23-1-6

Chứng minh rằng có một đồ thị có duy nhất một cây khung nhỏ nhất nếu với mỗi phép

cắt của đồ thị, có một cạnh nhẹ duy nhất đi qua phép cắt. Chứng tỏ rằng điều ngược lại

không đúng bằng cách đưa ra một phản chứng.

23-1-7

Giả sử rằng nếu mọi cạnh của một đồ thị đều có trọng số là số dương thì bất kì tập con

của tập cạnh nối tấ cả các đỉnh có tổng trọng số nhỏ nhất phải là một cây. Cho một ví dụ

để chứng tỏ rằng kết luận tương tự không đúng nếu chúng ta cho phép một vài trọng số

không phải là số dương.

23-1-8

Đặt T là một cây khung nhỏ nhất của đồ thị G và L là một danh sách sắp xếp các trọng số

cạnh của T. Chứng tỏ rằng với bất kì cây khung nhỏ nhất khác T’ của G thì danh sách L

cũng là danh sách sắp xếp các trọng số của các cạnh của T’.

23-1-9

Đặt T là một cây khung nhỏ nhất của đồ thị G = (V, E), và đặt V’ là một tập con của V.

Đặt T’ là đồ thị con của T tạo thành từ V’, và đặt G’ là đồ thị con của G tạo thành từ V’.

Chứng tỏ rằng nếu T’ là liên thông thì T’ là một cây khung nhỏ nhất của G’.

23-1-10

Cho một đồ thị G và một cây khung nhỏ nhất T, giả sử rằng ta giảm trọng số của một

trong các cạnh của T. Chứng tỏ rằng T vẫn là cây khung nhỏ nhất của G. Tổng quát hơn,

đặt T là một cây khung nhỏ nhất của G với các trọng số cạnh được cho bởi hàm trọng số

w. Chọn một cạnh (x, y) ∈ T và một số dương k, và định nghĩa hàm trọng số w’ bằng:

w’(u,v) =

Chứng minh rằng T là một cây khung nhỏ nhất của G với các trọng số cạnh cho bởi w’.

23-1-11

Cho một đồ thị G và một cây khung nhỏ nhất T, giả sử rằng chúng ta giảm trọng số của

một trong các cạnh không thuộc T. Cho một thuật toán để tìm ra cây khung nhỏ nhất

trong đồ thị bị thay đổi.

Trang 7



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



23.2 Thuật toán Kruskal và Prim

Hai thuật toán cây khung nhỏ nhất được mô tả trong phần này là sự mở rộng của thuật

toán tổng quát. Mỗi thuật toán sử dụng những quy tắc riêng để xác định một cạnh an toàn

ở dòng thứ 3 của thủ tục GENERIC-MST. Trong thuật toán Kruskal thì A tạo nên một

rừng. Một cạnh an toàn được bổ sung vào tập A thì cạnh đó luôn là cạnh có trọng số nhỏ

nhất trong đồ thị nối hai thành phần phân biệt. Trong thuật toán Prim, A tạo nên một cây

duy nhất trong suốt quá trình thực hiện thuật toán. Cạnh an toàn được bổ sung vào A

luôn là cạnh có trọng số nhỏ nhất nối cây với một đỉnh không thuộc cây.



Trang 8



Cây khung nhỏ nhất- Nhóm thực hiện: Nhóm 6



Hình 23.4: Thực hiện thuật toán Kruskal đối với đồ thị được mô tả ở hình 23.1. Những cạnh

được tô đậm thuộc rừng A đang được trồng. Thuật toán Kruskal quan tâm đến những cạnh được

sắp xếp theo thứ tự của trọng số. Một mũi tên chỉ đến một cạnh là một bước của thuật toán. Nếu

một cạnh nối hai cây phân biệt trong rừng thì cạnh đó được bổ sung vào rừng, sau đó hợp hai

cây đó thành một cây.



Thuật toán Kruskal

Thuật toán Kruskal dựa trên thuật toán cây khung nhỏ nhất tổng quát được đưa ra ở

phần 23.1. Thuật toán này tìm một cạnh an toàn để phát triển rừng bằng cách tìm trong

tất cả các cạnh (u,v) cạnh nào có trọng số nhỏ nhất nối hai cây bất kỳ trong rừng. Ví dụ

C1 và C2 là hai cây được nối với nhau bởi cạnh (u,v). Bởi vì cạnh (u,v) phải là cạnh nhỏ

nhất nối C1 với cây nào đó, thì theo hệ quả 23.2 thì (u,v) là một cạnh an toàn cho C1.

Thuật toán Kruskal là một thuật toán tham lam với vì ở mỗi bước của thuật toán bổ sung

vào rừng một cạnh có trọng số nhỏ nhất.

Cách thực hiện thuật toán Kruskal được xem như là thuật toán dùng để tính toán các

thành phần liên thông ở phần 21.1. Thuật toán này sử dụng cấu trúc dữ liệu rời nhau để

Trang 9



Xem Thêm
Tải bản đầy đủ (.doc) (19 trang)

×