Thuật toán tìm kiếm ưu tiên chiều rộng

Một phần của tài liệu Cấu trúc cây trong đồ thị vô hướng (Trang 27 - 36)

4 Một số thuật toán xây dựng cây bao trùm của đồ thị vô

4.2Thuật toán tìm kiếm ưu tiên chiều rộng

Cho đồ thị G = (V, E) có chứa đỉnh s, thuật toán tìm kiếm ưu tiên theo chiều rộng (BFS) có thể tìm ra tất cả các đỉnh có thể đến được từ s. Nó tính toán được khoảng cách từ s đến mỗi đỉnh có thể tới được. Nó cũng đưa ra được một cây bao trùm của G với gốc s có chứa tất cả các đỉnh có thể tới được. Với mỗi đỉnh v có thể tới được từ s, đường đi trong cây bao trùm từ s đến v tương ứng với một "đường đi ngắn nhất" từ s đến v trong G, nghĩa là, một đường đi chứa số lượng nhỏ nhất các cạnh.

Thuật toán tìm kiếm ưu tiên theo chiều rộng tìm ra tất cả các đỉnh ở khoảng cách k từ s trước khi tìm ra bất kì đỉnh nào ở khoảng cách

k+ 1.

Trong thuật toán này, chúng ta sử dụng các màu trắng, xám hoặc đen để tô màu cho mỗi đỉnh. Tất cả các đỉnh ban đầu đều được tô màu trắng, sau đó có thể trở thành màu xám hoặc đen. Một đỉnh được tìm ra lần đầu, nó được viếng thăm trong quá trình tìm kiếm, khi đó nó sẽ không còn là màu trắng. Các đỉnh màu xám và đen là các đỉnh đã được tìm ra. Nếu (u, v) ∈ E và u là đỉnh màu đen thì v là một trong hai đỉnh màu xám hoặc đen, nghĩa là tất cả các đỉnh liền kề với đỉnh màu đen đều đã được tìm ra. Các đỉnh màu xám thì có thể liền kề với một số đỉnh màu trắng. Điều đó giúp phân biệt giữa các đỉnh đã được tìm ra và các đỉnh chưa được tìm ra.

Thuật toán tìm kiếm ưu tiên theo chiều rộng xây dựng một cây bao trùm, ban đầu chỉ có một đỉnh, đó là gốc s. Bất cứ khi nào một đỉnh màu trắng v được phát hiện trong quá trình quét các danh sách kề của một đỉnh đã được tìm ra u thì đỉnh v và cạnh (u, v) được thêm vào cây. Chúng ta nói rằng u là cha của v trong cây.

Trong thuật toán BFS dưới đây, đầu vào là đồ thị G = (V, E), màu của mỗi đỉnh u ∈ V được lưu trong biến color[u], cha của u được lưu trong biến π[u]. Nếu u không có cha (ví dụ, nếu u = s, hoặc u không được tìm ra), thì π[u] = NIL, khoảng cách từ gốc s đến đỉnhu tính bằng thuật toán được lưu trong d[u]. Thuật toán cũng sử dụng hàng Q để

quản lí tập hợp các đỉnh màu xám, Adj[u] là tập các đỉnh kề của u. Ta có thuật toán tìm kiếm ưu tiên chiều rộng như sau:

Thuật toán: Tìm kiếm ưu tiên chiều rộng procedure BFS (G, s) 1 for mỗi đỉnh u ∈ V − {s} 2 do color[u] ← TRẮNG 3 d[u] ← ∞ 4 π[u] ← NIL 5 color[s] ← XÁM 6 d[s] ←0 7 π[s] ← NIL 8 Q ← ∅ 9 Thêm s vào Q 10 while Q 6= ∅ 11 do Rút u khỏi (Q)

12 for mỗi v ∈ Adj[u]

13 do if color[v]= TRẮNG 14 then color[v] ← XÁM 15 d[v] ←d[u] + 1 16 π[v] ←u 17 Thêm v vào Q 18 color[u] ← ĐEN

Ví dụ 4.2. Dùng thuật toán ưu tiên chiều rộng, tìm cây bao trùm của đồ thị G trên hình 20.

Các bước thực hiện thuật toán BFS để tìm cây bao trùm của đồ thị trên hình 20 được mô tả trên hình 22 (gồm 11 bước) như sau:

Dựa vào các bước mô tả trên hình 22, chúng ta tìm được cây bao trùm của đồ thị G trên hình 20 như sau:

Như đã nói ở trên thuật toán tìm kiếm ưu tiên chiều rộng có thể tính được khoảng từ gốc s đến mỗi đỉnh trong đồ thị G = (V, E) có thể tới được từ s. Định nghĩa khoảng cách đường đi ngắn nhất δ(s, v) từ s

đến v là số lượng nhỏ nhất của các cạnh trong bất kì con đường đi nào từ s đến v; nếu không có đường đi từ s đến v thì δ(s, v) = ∞. Một con đường có độ dài δ(s, v) được gọi là đường đi ngắn nhất từ s đến v. Chúng ta có một số tính chất quan trọng về khoảng cách đường đi ngắn nhất như sau:

Bổ đề 4.1. Cho đồ thị G = (V, E), s là một đỉnh tùy ý. Thì ,với bất kì cạnh (u, v) ∈ E ta có: δ(s, v) = δ(s, u) + 1.

Chứng minh:Nếuucó thể đến được từs, sau đó làv thì trong trường hợp này đường đi ngắn nhất từ s tới v không thể dài hơn đường đi ngắn nhất từ s tới u tiếp theo là cạnh (u, v), nghĩa là δ(s, v) = δ(s, u) + 1.

Nếu u không thể đến được từ s thì v cũng không thể đến được từ s

nên δ(s, u) = ∞, δ(s, v) =∞. Vậy ta có điều phải chứng minh.

Bổ đề 4.2. Cho đồ thị G = (V, E), giả sử BFS chạy trên G từ gốc

s ∈ V cho trước thì khi thuật toán kết thúc, với mỗi đỉnh v ∈ V, giá trị

d[v] được tính bởi BFS thỏa mãn: d[v]>δ(s, v).

trên số các phép toán "thêm vào" hàng Q.

Phương pháp quy nạp bắt đầu ngay sau khi s được thêm vào hàng Q

tại dòng 9 của BFS. Kết luận của bổ đề đúng với trường hợp này, bởi vì, d[s] = 0 = δ(s, s) và d[v] = ∞>δ(s, v) với mọi v ∈ V − {s}.

Xét một đỉnh màu trắng v được phát hiện trong quá trình tìm kiếm từ một đỉnh u. Ta có giả thiết quy nạp là: d[u]>δ(s, u).

Từ dòng 15 và bổ đề 4.1, ta có:

d[v] = d[u] + 1

>δ(s, u) + 1

>δ(s, v)

Đỉnh v được thêm vào Q sau đó và nó không bao giờ được thêm vào (adsbygoogle = window.adsbygoogle || []).push({});

Q lần nữa bởi vì nó đã được tô màu xám và câu lệnh Then của các dòng từ 14-17 chỉ thực hiện với các đỉnh màu trắng. Do đó giá trị d[v]

không bao giờ thay đổi.

Vậy bổ đề được chứng minh.

Bổ đề 4.3. Giả sử rằng trong quá trình thực hiện của BFS trên đồ thị G = (V, E), hàng Q chứa các đỉnh {v1, v2, ..., vr}, với v1 đứng đầu hàng Q, vr đứng cuối hàng Q. Thì, d[vr]6d[v1] + 1 và d[vi]6d[vi+1], với

i = 1,2, ..., r−1.

Chứng minh: Chúng ta chứng minh bằng phương pháp quy nạp với số các phép toán "thêm vào" và "rút ra" trên hàng Q.

Hiển nhiên khi hàng Q chỉ chứa đỉnh s thì bổ đề luôn đúng.

Chúng ta phải chứng minh rằng bổ đề đúng sau cả hai phép toán "thêm vào" và "rút ra" một đỉnh.

Nếu v1 đứng đầu hàng Q được rút ra thì hàng Q sẽ trở thành hàng

Q0 gồm các đỉnh {v2, v3, ..., vr}, nghĩa là v2 ở vị trí đứng đầu (nếu Q

trở thành rỗng thì bổ đề hiển nhiên đúng). Ta có d[v1]6d[v2]. Do đó:

d[vr]6d[v1] + 16d[v2] + 1 . Vậy bổ đề đúng với v2 ở vị trí đứng đầu. Khi chúng ta thêm vào một đỉnh v tại dòng 17 của BFS, thì nó trở thành vr+1. Khi đó chúng ta đã loại bỏ đỉnh u từ hàng Q và quét danh sách kề của u. v1 ở vị trí đứng đầu. Ta có d[u]6d[v1]. Do đó: d[vr+1] =

nên d[vr]6d[u] + 1 = d[v] = d[vr+1]. Do đó bổ đề đúng khi v được thêm vào.

Hệ quả 4.1. Giả sử vi và vj được thêm vào hàng Q trong quá trình thực hiện BFS, và vi được thêm vào trước vj. Thì, d[vi]6d[vj], tại thời điểm đó vj được thêm vào.

Chứng minh: Ta suy ra ngay từ bổ đề 4.3.

Định lí 4.1.: Cho đồ thị G = (V, E), giả sử rằng BFS chạy trên G từ một gốc s ∈ V đã cho. Thì, trong quá trình thực hiện, BFS tìm ra tất cả các đỉnh v ∈ V có thể đến được từ gốc s, và khi kết thúc, d[v] = δ(s, v)

với mọi v ∈ V. BFS tạo ra một cây có bao trùm có gốc là s, và với mỗi đỉnh v, đường đi duy nhất từ s đến v trong cây này là một đường đi ngắn nhất từ s đến v trong đồ thị G.

Chứng minh: Chúng ta sử dụng phương pháp phản chứng để chứng minh.

Giả sử tồn tại một đỉnh v ∈ V sao cho d[v] 6= δ(s, v). Ta chọn đỉnh v

với giá trị δ(s, v) nhỏ nhất mà d[v] =6 δ(s, v), hiển nhiên v 6= s. Theo bổ đề 4.2 thì d[v]>δ(s, v), và do đó d[v] > δ(s, v). Đỉnh v phải tới được từ

s, vì nếu không δ(s, v) =∞>d[v].

Cho u là đỉnh đứng ngay trước v trên một đường đi ngắn nhất từ s

đến v, ta có: δ(s, v) =δ(s, u) + 1.

Vì δ(s, u) < δ(s, v), d[u] = δ(s, u) nên:

d[v]> δ(s, v) = δ(s, u) + 1 = d[u] + 1 (4.1) Bây giờ ta xét thời điểm khi BFS chọn rút u ra khỏi Q tại dòng 11. Khi đó, đỉnh v là một trong các màu trắng, xám hoặc đen. Chúng ta sẽ chỉ ra trong mỗi trường hợp này chúng ta có được mâu thuẫn với bất đẳng thức (4.1).

Nếu đỉnh v màu trắng thì tại dòng 15 ta có d[v] = d[u] + 1 (mâu thuẫn với (4.1)).

Nếu đỉnh v màu đen thì nó đã được rút ra khỏi Q. Từ hệ quả 4.1 ta có: d[v]6d[u] (mâu thuẫn với (4.1)).

Nếu đỉnh v màu xám thì nó được tô màu xám sau khi rút đỉnh w nào đó khỏi Q nên ta có: d[v] = d[w] + 1, w cũng được rút khỏi Q trước u,

từ hệ quả 4.1 ta có: d[w]6d[u] suy ra d[v]6d[u] + 1. (mâu thuẫn với (4.1)).

Do đó chúng ta kết luận rằng d[v] = δ(s, v) với mọi v ∈ V. Tất cả các đỉnh có thể đến được từ s phải được tìm ra, nếu không chúng sẽ có giá trị d vô hạn. Để kết luận chứng minh của định lí, quan sát rằng nếu (adsbygoogle = window.adsbygoogle || []).push({});

π[v] = u thì d[v] = d[u] + 1. Do đó, chúng ta có thể có được một con đường ngắn nhất từ s đến v bằng cách lấy một con đường ngắn nhất từ

s đến π[v] và sau đó qua cạnh (π[v], v).

Kết luận: Trong chương 4 luận văn đã trình bày hai thuật toán để tìm cây bao trùm của một đồ thị vô hướng, liên thông: thuật toán tìm kiếm ưu tiên chiều sâu, thuật toán tìm kiếm ưu tiên chiều rộng và cũng đưa ra được một số tính chất về thuật toán tìm kiếm ưu tiên chiều rộng. Chúng ta thấy rằng khi sử dụng hai thuật toán đó để tìm cây bao trùm của cùng một đồ thị thì cho ra hai cây bao trùm khác nhau.

Kết luận

Luận văn đã đề cập đến các vấn đề sau: • Một số khái niệm cơ bản của đồ thị.

• Một số tính chất của cây.

• Cây bao trùm của đồ thị và công thức tính số cây bao trùm của đồ thị đầy đủ Kn.

• Sự tương ứng giữa tập số cây bao trùm của đồ thị đầy đủ n đỉnh được đánh nhãn và tập các dãy số Pr¨ufer có độ đài n−2.

• Một số thuật toán tìm cây bao trùm của đồ thị liên thông, vô hướng. Mặc dù đã có sự cố gắng và nỗ lực song chắc hẳn đề tài không tránh khỏi những hạn chế, thiếu sót. Tác giả rất mong nhận được ý kiến đóng góp của các thầy cô giáo và các bạn để luận văn hoàn thiện hơn.

Tài liệu tham khảo

[1] Bang Ye Wu, Kun-Mao Chao, Spanning Trees and Optimization Problems, (2004), Chapman & Hall/CRC Press, USA. .

[2] Cormen, Thomas H., Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 2nd ed. Cambridge, MA: MIT Press. ISBN: 0262032937.

[3] Kenneth H. Rosen, Discrete mathematics and its applications, Fifth edition, dịch bởi Phạm Văn Thiều và Đặng Hữu Thịnh "Toán học rời rạc ứng dụng trong Tin học", NXB Giáo dục, 1997

Một phần của tài liệu Cấu trúc cây trong đồ thị vô hướng (Trang 27 - 36)