1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tìm cây phủ nhỏ nhất và ứng dụng

20 389 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 381 KB
File đính kèm Tìm Cây Phủ nhỏ Nhất Và Ứng dụng.rar (62 KB)

Nội dung

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 II.. Cây phủ thì có nhiều ứng dụng trong các bài toán điều k

Trang 2

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

II Cây và cây phủ 7

1 Cây 7

Chứng minh 8

2 Cây phủ 8

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

Lý thuyết đồ thị đang được ứng dụng rộng rãi trong các lĩnh vực khoa học, kỹ thuật, kinh tế, xã hội dựa vào sự phát triển ngày càng mạnh trong năng lực tính toán của máy tính đương đại Nó là công cụ để mô hình hóa và giải quyết các bài toán tìm kiếm tối ưu trong đó các trạng thái là các đỉnh rời rạc và các tác động chuyển trạng thái được đặc trưng bằng các cạnh nối các đỉnh đó

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- Minimum 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à có ứng dụng

Trang 3

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 được liên kết với một cặp đỉnh v, w (không kể thứ tự) như hình sau:

Đị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:

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

e v

w

v

e

w

Trang 4

Dâ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.

3 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ố

Trang 5

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 đó

4 Đồ thị con

Cho đồ thị G = (V, E) Đồ thị G’ = (V’, E’) gọi là đồ thị con của G nếu:

V’ ⊂ V và E’ ⊂ E

Nếu V’ = V, thì G’ gọi là đồ thị con phủ của G.

5 Biểu diễn đồ thị

Để lưu trữ đồ thị và thực hiện các thuật toán khác nhau với đồ thị trên máy tính cần phải tìm những cấu trúc dữ liệu thích hợp để mô tả đồ thị Việc chọn cấu trúc dữ liệu nào để biểu diễn đồ thị có tác động rất lớn đến hiệu quả của thuật toán

Vì vậy, việc chọn lựa cấu trúc dữ liệu để biểu diễn đồ thị phụ thuộc vào từng tình huống cụ thể (bài toán và thuật toán cụ thể)

Đố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

Ví dụ: cho đồ thị sau

có ma trận kề là:

a

b

f e

Trang 6

Ma 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) ∈E hoặc ∞ nếu (vi,vj) ∉E

Ma trận khoảng cách của đồ thị sau là:

b 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ị)

Ví dụ: Đồ thị sau

a

b

f e

a

b

2

6 1

f

3

6 3

Trang 7

có danh sách cạnh là: (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:

c Danh sách kề

Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ thị dưới dạng danh sách kề là cách biểu diễn thích hợp nhất được sử dụng

Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị chúng ta lưu trữ danh sách các đỉnh kề với nó, mà ta sẽ ký hiệu là :

Ke(v) = { u ∈ V | (v,u) ∈ E}

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>.

II Cây và cây phủ

1 Cây

Cây là đồ thị liên thông không chứa chu trình

v2 v3

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:

(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

Trang 8

(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à 1+ 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ỏ

Trang 9

đỉ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

3 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

h

g

Trang 10

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:

Khi đó 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ố: d(T) =

,

ij

i j E

c

∑ là nhỏ nhất

3 Định lý ( Điều kiện cần và đủ)

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

a

b

2

6 1

f

3

6 3

Trang 11

⊂ 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)

II 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.

Chứng minh

Cho cây phủ S bất kỳ của đồ thị G, ta phải chứng minh d(S) ≥ d(T)

Ký hiệu các đỉnh và các cạnh lần lượt được thêm vào T là v1, v2, ,vn và e1,

e2, ,en-1, trong đó ek =(vk,vk+1), k=1,2, ,n-1

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)

Ví dụ 1: Áp dụng thuật toán Prim tìm cây phủ nhỏ nhất của đồ thị sau

Ngày đăng: 09/03/2017, 10:30

TỪ KHÓA LIÊN QUAN

w