Giải thuật GHS-83

Một phần của tài liệu Nghiên cứu vấn đề truyền bá thông tin giữa các tác tử di động trong mạng động (Trang 38)

Giải thuật GHS-83 do các tác giả R. G. GALLAGER, P. A. HUMBLET, and P. M. SPIRA ñề xuất trong tài liệu [16]. Giải thuật này dựa trên tử tưởng của giải thuật PRIM - giải thuật xây dựng cây khung trọng số tối thiểu trên ñồ thị bằng cách lần lượt bổ xung các cạnh ngoài có trọng số nhỏ nhất vào trong cây khung. Trong mô hình phân tán, các nút không biết ñược topo mạng của toàn bộ hệ thống, ñồng thời mỗi nút sẽ xử lý cây khung một cách riêng rẽ không ñồng bộ. Vì vậy, cần phải tìm một phương pháp ñể kết hợp các cạnh có trọng số nhỏ nhất vào cây khung tối thiểu.

Ta mô tả lại bài toán xây dựng cây khung phân tán tối thiểu như sau:

Đồ th G = (V, E) mô hình mt h phân tán, vi V là tp gm n b x lý, E là tp gm m liên kết. Mi liên kết ca ñồ th có mt trng s phân bit w(e). Xây dng mt gii thut phân tán cho các b xñể xây dng mt cây khung T sao cho tng

′ ∈E e ) e ( w nhnht.

Chúng ta sử dụng một số thuật ngữ sau ñây trong việc mô tả giải thuật:

• Mảnh MST: là một cây con thuộc cây MST hoàn chỉnh. Ban ñầu, mỗi mảnh MST chỉ bao gồm 1 nút. Chúng ta sẽ kết hợp các mảnh này lại theo một số quy tắc ñể tạo thành cây khung tối thiểu

• Liên kết ngoài: liên kết ngoài của một mảnh MST là liên kết có một nút bên trong mảnh, nút còn lại nằm bên ngoài.

• Gốc ca mnh: là một nút trong mảnh ñược quy ước và lấy ñịnh danh làm ñịnh danh của mảnh.

Tư tưởng của giải thuật dựa trên việc kết hợp dần các mảnh MST lại, cuối cùng

ñược cây MST hoàn chỉnh trong hệ thống. Do hệ thống là phân tán, một nút trên mạng không biết ñược cấu trúc toàn cục của hệ thống. Vì vậy, ñể việc kết hợp các mảnh riêng rẽ

lại sao cho vẫn thỏa mãn yêu cầu của bài toán, chúng ta dựa vào các ñịnh lý sau ñây:

Định lý 3.1. Cho mt mnh MST A, gi e là mt liên kết ngoài có trng s ti thiu trong mnh A. Thì e là mt cnh trong cây MST hoàn chnh.

Chng minh:

Giả sử e nối mảnh MST A với một mảnh MST B và e không nằm trong cây MST, như vậy phải tồn tại liên kết ngoài e’ của mảnh A nằm trên ñường ñi giữa mảnh A và mảnh B, và là một cạnh trong cây MST (nếu không mảnh A sẽ không liên thông với mảnh B). Theo giải thiết, w(e) < w(e’). Kết nạp e vào cây MST và bỏ cạnh e’, ta nhận ñược cây khung T’ có tổng trọng số của tất cả các cạch bé hơn cây khung MST ban ñầu, vô lý.

Định lý 3.2: Nếu tt c các cnh ca mt ñồ th liên thông có các trng s phân bit, thì cây MST là duy nht.

Chng minh:

Giả sử tồn tại hai cây khung tối thiểu phân biệt. Ký hiệu cây A và cây B. Gọi e là

cạnh có trọng số nhỏ nhất nằm ở một trong hai cây, nhưng không nằm trong cả hai. Không mất tính tổng quát, giả sử e thuộc cây A. gọi T là tập các cạnh của cây A và T’ là

tập các cạnh của cây B. Tập cạnh {e} T ′ phải chứa một chu trình (tính chất của cây khung), và ít nhất một cạnh trong chu trình, gọi là e′, không nằm trong T (bi vì T không

chứa chu trình). Vì các trọng số là phân biệt và e′ nằm trong T′ nhưng không nằm trong T

w(e) < w(e′). Vì vậy {e} T - {e′} là tập các cạnh của một cây khung có trọng số

nhỏ hơn T′, vô lý. e’ e e 5 4 8 3 1 7 2 6 4 5 8 3 1 7 2 6 e’ Hình 13: Minh họa chứng minh ñịnh lý 1

T e Hình 14: Minh họa chứng minh ñịnh lý 2 4 8 3 1 7 2 6 5 T’ 4 8 3 1 7 2 6 5 e’ 3.2.2. Gii thut chi tiết Giải thuật bắt ñầu với các mảnh là một nút trong mạng. Áp dụng ñịnh lý 1 ñể mở

rộng các mảnh theo các liên kết ngoài trọng số tối thiểu. Định lý thứ 2 ñảm bảo việc mở

rộng một cách ñộc lập giữa các mảnh không bị xung ñột lẫn nhau.

Ở trạng thái khởi tạo ban ñầu, một mảnh MST chỉ bao gồm duy nhất một nút. Nút này cũng chính là gốc của mảnh. Quá trình mở rộng mảnh bao gồm các bước sau

•Tìm liên kết ngoài có trọng số tối thiểu: gốc của mỗi mảnh sẽ gửi thông báo yêu cầu các nút tìm liên kết ngoài cục bộ có trọng số tối thiểu. Khi tìm thấy, mỗi nút sẽ

gửi liên kết ngoài này ñến cho gốc của mảnh. Gốc của mảnh sẽ tập hợp kết quả và chọn ra liên kết ngoài tối thiểu của mảnh

•Kết hợp mảnh: khi tìm thấy liên kết ngoài tối thiểu, mảnh này sẽ cố gắng kết hợp với mảnh mà liên kết này dẫn ñến. Để thuật toán không có khóa chết, chúng ta sử

dụng một khái niệm là mức của mảnh. Ban ñầu, mỗi mảnh có mức là 0. Giả sử rằng mảnh F ở mức L có cạnh liên kết ngoài tối thiểu dẫn tới và mảnh F′ có mức L′. Mảnh F và F′ kết hợp với nhau chỉ khi thỏa mãn một trong hai ñiều kiện sau:

Nếu L < L′, thì mảnh F bị hấp thu bởi F′, mảnh mở rộng có mức là L′. (adsbygoogle = window.adsbygoogle || []).push({});

Nếu L = L′ và các mảnh F và F′ có cùng một cạnh ngoài trọng số tối thiểu, thì hai mảnh F và F′ kết hợp thành một mảnh mới có mức là L + 1.

Trong tất cả các trường hợp khác, mảnh F ñơn giản ñợi mảnh F ñạt ñến mức ñủ

lớn ñể kết hợp với F theo các luật ở trên.

Sử dụng khái niệm mức của mảnh, thuật toán sẽ tránh ñược các trạng thái khóa chết trong mô hình phân tán không ñồng bộ. Trong giải thuật, các nút và liên kết sẽ có một số

các trạng thái khác nhau. Mỗi nút có 3 trạng thái:

• sleeping: trạng thái khởi tạo ban ñầu của nút (khi chưa thực hiện thuật toán)

• find: trạng thái khi một nút ñang tiến hành tìm liên kết ngoài tối thiểu cục bộ

trong mảnh

• found: trạng thái khi nút ñã tim thấy liên kết ngoài tối thiểu cục bộ

•Mỗi liên kết cũng ñược phân biệt theo 3 trạng thái sau ñây:

• basic: trạng thái ban ñầu của mỗi liên kết

• branch: nếu liên kết ñược công nhận là một cạnh trong cây MST.

• rejected: liên kết không thuộc cây MST, nhưng nối 2 nút thuộc cùng một mảnh MST (hay thường gọi là liên kết trong)

Giải thuật GHS-83 chi tiết ñược mô tả như sau:

Khi to: Tất cả các nút có trạng thái khởi tạo là sleeping. Tất cả các cạnh ở trạng thái basic. Ban ñầu mỗi mảnh là một nút và ở mức 0, nút này cũng chính là gốc của mảnh, ñịnh danh của gốc là ñịnh danh của mảnh. Thc hin:

Tại trạng thái khởi tạo, một số nút gốc sẽ tự thức dậy từ trạng thái sleeping, và tiến hành thực hiện thuật toán.

MST duy nhất (chính là cây MST)

• Tìm liên kết ngoài ti thiu: Gốc của một mảnh thay ñổi trạng thái của nó

thành find (nút gốc có thể tự thức dậy hoặc ñược ñánh thức bởi một thông báo từ nút khác) và gửi một thông báo khởi tạo initiate chứa ñịnh danh mảnh, số hiệu mức và trạng thái find tới tất cả các nút trong mảnh.

Khi nút i nhn thông báo initiate, nó cập nhật ñịnh danh mảnh và số

hiệu mức của nó. Nút i sau ñó thay ñổi trạng thái của nó thành find và

tìm liên kết ngoài có trọng số tối thiểu cục bộ. Mỗi nút i sắp xếp cạnh liên thuộc nó có trạng thái basic theo trọng số của chúng với thứ tự tăng dần trong danh sách unusedi. Nút i tìm cạnh liên kết ngoài trọng số tối thiểu cục bộ như sau:

Nút i chọn cạnh tiếp theo (i,j) t unusedi và gửi một thông báo test với

ñịnh danh mảnh và số hiệu mức qua cạnh này.

Nút j nhận ñược một thông báo test t i, nó hoạt ñộng như sau:

•Nếu ñịnh danh mảnh của j giống với ñịnh danh mảnh của i, thì i và j thuộc cùng một mảnh và bởi vậy, j xóa cnh (i, j) t danh sách unusedj, thay ñổi trạng thái cạnh này thành rejected và j trả lời i bng thông báo reject. Khi nút i nhn thông báo reject t j, nó xóa cnh (i, j) t danh sách unusedi, thay

ñổi trạng thái cạnh này thành rejected và tiếp tục bằng cách gửi thông báo

test qua cạnh tiếp theo trong danh sách của nó.

•Nếu các ñịnh danh mảnh của i và j là khác nhau:

Nếu Lj Li, nút j gửi một thông báo accept ti i. nút i nhận ñược thông (adsbygoogle = window.adsbygoogle || []).push({});

báo accept sẽ lưu cạnh tốt nhất cục bộ của nó là (i,j), kết thúc quá trình tìm kiếm cạnh cục bộ tốt nhất tại nút i.

Ngược lại, j làm trễ sự trả lời cho ñến khi Lj Li. /* Bởi khi hai mảnh sát nhập vào nhau, các nút trong các mảnh này (khác các gốc) không

ñược thông báo ngay tức thì ñịnh danh và mức của mảnh mới */ Khi một nút i ñã xác ñịnh cạnh tốt nhất cục bộ của nó là e:

Nếu i là nút lá, nó gửi một thông báo report với cạnh e ñến cha của nó và chuyển sang trạng thái found.

Ngược lại, i là nút trong, i ñợi cho ñến khi nó tìm ra cạnh tốt nhất cục bộ và nhận các thông báo report từ tất cả các con của nó. Sau ñó i

của nó và chuyển sang trạng thái found.

Nút gốc sau khi ñã tìm ra cạnh tốt nhất cục bộ của nó và nhận các thông báo từ tất cả các con của nó, nút gốc chọn cạnh có trọng số tối thiểu emin trong số các cạnh này.

Nếu chọn ñược emin, ñây chính là cạnh tốt nhất của mảnh, nó gửi

thông báo change-root, tới nút trong mảnh có emin là cạnh liên thuộc. Nút này trở thành gốc mới của mảnh, thay ñổi trạng thái của emin

branch, và gửi một thông báo connect với số hiệu mức của nó qua

emin.

Ngược lại, không có cạnh ngoài nào ñược tìm thấy, kết thúc giải thuật, mảnh hiện thời chính là cây MST cần tìm.

• Kết hp các mnh vi nhau: Cho nút j trong mảnh G ở mức lj, nhận một

thông báo connect t nút i trong mnh F ở mức li. Ta xét các trường hợp sau:

lj < li: Trước khi gửi một thông báo connect ti j, i sẽ phải gửi một

thông báo test ti j ñể xác ñịnh xem liệu rằng (i, j) có phải là một cạnh

ngoài. Vì j có số hiệu mức nhỏ hơn, nó sẽ làm trễ sự trả lời thông báo

test cho ñến khi số hiệu mức của nó trở thành ít nhất là li.

lj = li: Trong trường hợp này, nút j trì hoãn trả lời thông báo connect

cho ñến khi số hiệu mức của nó trở nên lớn hơn li (trong trường hợp này, nó hoạt ñộng như trong trường hợp 3) hoặc nhận ñược thông báo

change-root từ gốc của G, tc (i, j) là cạnh tốt nhất của G. Nếu (i,j) là

cạnh tốt nhất của G thì F và G ñược trộn vào nhau. Nếu j > i thì j tr

thành gốc của mảnh kết hợp. Nó tăng số hiệu mức của nó lên 1 và bắt

ñầu lần lặp mới bằng cách gửi một thông báo initiate tới các hàng xóm của nó. Ngược lại j gửi một thông báo connect ti i và i trở thành gốc mới của mảnh kết hợp, i tăng số hiệu mức của nó lên 1 và gửi thông báo

initiate cho các hàng xóm của nó ñể khởi tạo lần lặp mới cho mảnh kết hợp.

lj > li:

Nếu nút j ñã nhận ñược một thông báo initiate và chưa gửi thông

báo report, thì nó gửi một thông báo initiate với ñịnh danh của mảnh

G, số hiệu mức lj và trạng thái find ti i và ñợi một thông báo report

thái của cạnh (j,i) thành branch. Vì vy, F ñược hấp thu vào G như là một phần của lần lặp hiện thời của G. (adsbygoogle = window.adsbygoogle || []).push({});

Nếu j ñã gửi thông báo report: Trong trường hợp này, nút j gửi

thông báo initiate với ñịnh danh của mảnh G, số hiệu mức lj và trạng

thái found ti i, ñồng thời j thay ñổi trạng thái của cạnh (j,i) thành

branch. Một nút nhận ñược một thông báo initiate với trạng thái

found thay ñổi trạng thái của nó thành found, cập nhật số hiệu mức và

ñịnh danh mảnh của nó và truyền thông báo tới các con của nó.

/* Khi j ñã gửi thông báo report, cạnh tốt nhất cục bộ của nó phải có trọng số nhỏ hơn trọng số của (i,j) (thật vậy, cạnh (i,j) không

thể là cạnh tốt nhất cục bộ của j bi vì i sẽ không trả lời một thông

báo test t j vì i ở trong mảnh có mức thấp hơn, dẫn ñến j không

thể gửi thông báo report). Do ñó cạnh tốt nhất cục bộ của j có

trọng số nhỏ hơn cạnh ngoài có trọng số tối thiểu của F. Bởi vậy, sự tham gia của F trong việc tìm kiếm cạnh tốt nhất của G là

không cần thiết. */

Hình 15: Giải thuật GHS-83 [1]

Chng minh tính ñúng ñắn:

Ta thấy giải thuật chỉ tìm cạnh ngoài có trọng số tối thiểu từ các mảnh, thông báo

connect chỉ ñược gửi trên cạnh ngoài tối thiểu, giải thuật thỏa mãn các thuộc tính 1 và 2, do ñó chúng ta nhận ñược cây MST.

Để chỉ ra rằng khóa chết không tồn tại, ta xét tập các mảnh tồn tại trong bất kỳ thời

ñiểm nào. Ngoại trừ các mảnh có mức 0 bao gồm các nút trong trạng thái ngủ. Giả thiết rằng giải thuật ñã ñược bắt ñầu nhưng không kết thúc, tập các mảnh ở trên không rỗng và mỗi mảnh có một cạnh ngoài trọng số tối thiểu. Xét mảnh từ tập các mảnh có mức thấp nhất trong tập hợp với cạnh ngoài có trọng số nhỏ nhất trong tập ñó. Mọi thông báo kiểm thử test từ mảnh ñó hoặc sẽñánh thức mảnh ở trạng thái ngủ sleeping có mức không hoặc sẽ ñược phản hồi mà không cần ñợi. Tương tự, một thông báo connect từ mảnh ñó sẽ ñánh thức mảnh ở trạng thái ngủ có mức 0 hoặc sẽ chuyển ñến mảnh có mức cao hơn, hoặc sẽ chuyển ñến mảnh ñồng mức và có chung cạnh ngoài với trọng số tối thiểu, tất cả ñều dẫn ñến mảnh mới có mức cao hơn. Như vậy không có mảnh nào tồn tại vĩnh viễn ⇒ không tồn tại khóa chết.

Độ phc tp thông báo:

Định lý 3.3. Độ phc tp thông báo ca giao thc là O(E + N log N).

Chng minh:

Bởi vì số hiệu mức của một mảnh có thể nhiều nhất là log N và số hiệu mức tăng sau mỗi lần lặp, một nút có thể tham gia không quá log N lần lặp. Trong một lần lặp, mỗi nút trong một mảnh có thể nhận không quá một thông báo initiate và mt thông báo accept.

Nó có thể chuyển nhiều nhất một thông báo report và mt thông báo change-root hoặc

thông báo connect. Vì vậy, nếu chúng ta không quan tâm ñến các thông báo test và reject,

thì một nút có thể chỉ gửi O(N) thông báo trong mỗi lần lặp, do ñó sau log N lần lặp, số

thông báo sử dụng là O(N log N). Có nhiều nhất hai thông báo reject ñược gửi qua mỗi cạnh. Các thông báo này sẽ ñóng góp thành tổng O(E). Mi thông báo test ñược trả lời bởi một thông báo reject và mt thông báo accept. Bởi vì có nhiều nhất O(E) thông báo

reject và nhiều nhất O(N log N) thông báo accept, có thể có nhiều nhất O(E + N log N) thông báo test. Như vậy, ñộ phức tạp thông báo của giao thức là O(E + N log N).

Độ phc tp thi gian:

Định lý 3.4. Độ phc tp thi gian ca gii thut GHS-83 là O(N log N).

Chng minh: (adsbygoogle = window.adsbygoogle || []).push({});

Chúng ta sẽ chứng minh bằng qui nạp rằng mỗi nút cần 5lN – 3N ñơn vị thời gian ñể

Một phần của tài liệu Nghiên cứu vấn đề truyền bá thông tin giữa các tác tử di động trong mạng động (Trang 38)