Một số giải thuật truyền tin

Một phần của tài liệu Mô phỏng giải thuật phân tán (Trang 25 - 32)

1.7.1. Giải thuật truyền tin

Bài toán truyền tin qua các nút của G là bài toán truyền thông đại chúng qua G thông tin được sở hữu ban đầu trong một tập con các nút của G. Bài toán này có hai biến thể: bài toán truyền tin (PI) và bài toán truyền tin có phản hồi (PIF). Trong bài toán PI mọi nút trong G nhận tin trong khi ở bài toán PIF mọi nút không chỉ nhận tin mà còn báo lại cho nút ban đầu rằng tất cả các nút khác đều đã nhận được tin.

Bài toán PI có nhiều cách tiếp cận giải quyết khác nhau. Cách đơn giản nhất là truyền thông đại chúng dưới dạng “lũ” (flooding) tràn qua toàn mạng.

Mọi nút mang thông điệp M bắt đầu gửi thông điệp tới mọi nút lân cận. Các nút khác mỗi khi nhận được thông điệp lần đầu lại gửi tiếp tới mọi nút lân cận

của nó bao gồm cả nút từ đó nó nhận thông điệp. Kết quả là một nút sẽ nhận thông điệp M từ tất cả các lân cận của nó. Với chiến lược này M được truyền từ các nút ban đầu như một làn sóng và nhanh chóng truyền đến mọi nút cho dù có thất bại tại một số cung.

Khác với bài toán PI bài toán PIF chỉ được phát biểu cho trường hợp một nút duy nhất sở hữu thông tin ban đầu. Lời giải dạng “lũ” cho bài toán này là một mở rộng từ giải thuật PI. Mỗi nút ni có thêm biến parenti trỏ tới một lân cận của ni. Khi ni nhận được M lần đầu parenti sẽ trỏ tới nút lân cận của ni mà từ đó M được gửi tới ni. Giải thuật được bắt đầu bởi n1 khi n1 gửi M tới mọi nút lân cận của nó. Mỗi nút ni khi nhận được M lần đầu sẽ thiết lập parenti và chuyển tiếp M tới mọi nút lân cận ngoại trừ parenti. Nếu nút không còn lân cận nào khác (nút lá) nó sẽ gửi thông điệp ACK tới nút cha. Khi nhận được thông điệp ACK từ mọi nút lân cận của nó ngoại trừ nút cha ni cũng gửi thông điệp ACK tới nút cha. Nút n1 sẽ biết mọi nút nhận được M khi nhận được thông điệp ACK từ mọi lân cận của nó.

Giải thuật Broadcast dưới đây mô tả những giải thích trên. Biến parenti

được khởi tạo bằng nil cho mọi ni. Biến counti được khởi tạo bằng 0 ghi lại số thông điệp nhận được. Biến reachedi cho biết ni đã nhận được thông điệp M chưa. Tập N0 chỉ gồm một thành phần N0 = {n1}. Giải thuật này đúng cho cả mô hình đồng bộ và không đồng bộ.

Giải thuật Broadcast: Biến:

gửi thông điệp M tới mọi nút n j thuộc tập Out i

Thông điệp nhận:

tin i = M hoặc tin i = ACK với nguồn(tini) = n j

Hành động:

count i = count i + 1 if not reached i then reached i = true parent i = n j

gửi thông điệp tin i tới mọi nút nk thuộc tập Out i với

nk ≠ parenti

if count i = |Out i| then

if parent i ≠ nil then gửi thông điệp ACK tới parent i

kết thúc

Bảng 1.4. Giải thuật Broadcast

Giải thuật này có độ phức tạp thông tin là O m( ) và độ phức tạp thời gian là O n( ).

1.7.2. Giải thuật t câìm y khung

Cây khung của một đồ thị đóngvai tr quan trò ọng trong giải thuật phân tán. Th ng thường khi đã ìm đượcô t cây khung các giải thuật khi thực hiện tr n ê cây khung sẽ có độ phức tạp thông tin ít hơn so với khi thực hiện trên toàn ộ b đồ thị. Bài toán truyền ôth ng đại chúng đã nói tr ên là một ví d iụ đ ển hình. Có hai cách x ác định cây khung: tìm kiếm theo chiều rộng và tìm ki ếm theo chiều sâ u.

Gi thuải ật tràn ũ đã l nói êở tr n c thể biến đổi để tìm cây khung theo ó chiều rộng như sau. Ban đầu n1 g ửi M tới ọi út n cận. Khi n m n lâ i nhận được M lần đầu nó nh n t M ận út ừ đó được ửi đến n g j là n út cha và g ôửi th ng đ ệpi

parent t ới nj. Nếu ni nhận được M đồng thời ừ ơn một út th t h n ì n út cha sẽ được chọn tuỳ tiện gi c n nữa ác út ày. Sau đó nếu ni nhận được M nó s g ẽ ửi th ng ô điệp already ới n g t út ửi cho biết ni là mđã ột nút trong cây khung. Sau khi đã g ửi M tới mọi n út xung quanh trừ n út cha ni s ẽ đợi trả ời ừ ác út l t c n này. Nút trả ời ới th ng đ ệp parent s l v ô i ẽ được đánh ấu d là n út con của ni. Sau khi đã nhận được ả l t mtr ời ừ ọi nút xung quanh ni s k ẽ ết thúc.

Dưới đây l giảà mã c ủa giải thuật. Giải thuật được thực hiện cho mô hình đồng ộ, với b mô hình kh ng đồng ộ ô b cây khung tìm được kh ng đảm ô b là câảo y khung tìm kiếm theo chiều rộng. Bi parentến i t n trỏ ới út cha của ni, biến childreni chứa ập ác út con của n t c n i, biến otheri chứa ập ác út xung t c n quanh kh ng phô ải nút con của ni. Tập N0 chỉ gồm một thành phần N0 = {n1}.

Giải thuật BFS: Biến:

parent i = ; childrennil i = ; othernil i = nil Thông điệp nhận: tin i = nil

Hành động nếu n i thuộc N 0: parent i = n i

gửi thông điệp M tới mọi nút n j thuộc tập Out i

Thông điệp nhận: tin i = M với nguồn(tin i) = n j

Hành động:

if parent i = nil then parent i = n j

Hành động:

đưa n j vào children i

childrenif i và other i chứa mọi lân cận của n i ngoại trừ

parent i thenkết thúc

Thông điệp nhận: tin i = already với nguồn(tin i) = n j

Hành động:

đưa n j vào other i

childrenif i và other i chứa mọi lân cận của n i ngoại trừ

parent i thenkết thúc

Bảng 1.5. Giải thuật BFS

Giải thuật này có độ phức tạp thông tin là O m( ) và độ phức tạp thời gian là O n( ).

Gi thuải ật tìm cây khung theo chiều sâu xây dựng cây khung bằng ách c l lần ượt đưa các út ào n v cây khung khác v ới giải thuật t ìm kiếm theo chiều rộng ở tr n khi nhiều út đồng thời được đưa vào ê n cây khung.

Giả mã của giải thuật được cho dưới đây. Đây là giảithuật cho mô hình kh ng ô đồng bộ. Giống như trong giải thuật BFS parentitrỏ ới út cha của n t n i, biến childrenichứa ập ác út con của n t c n i. Biến m ới unexploredichứa ập ác t c n lâút n cận chưa được thăm dò c ủa ni. Tập N0 chỉ gồm một thành phần N0={n1}.

Giải thuật DFS: Biến:

parent i = nil; children i = nil; unexplored i = mọi lân cận của ni

Thông điệp nhận: tin i = nil Hành động nếu n i thuộc N 0: parent i = n i

thăm dò

Thông điệp nhận: tin i = M với nguồn(tin i) = n j

Hành động:

if parent i = nil then parent i = n j

loại n j khỏi unexploredi

thăm dò else

gửi thông điệp already tới nút n j

loại n j khỏi unexploredi

Thông điệp nhận: tin i = parent với nguồn(tin i) = n j

Hành động:

đưa n j vào children i

thăm dò

Thông điệp nhận: tin i = already với nguồn(tin i) = n j

Hành động:

thăm dò

Thủ tục thăm dò:

unexploredif i ≠ nil then

chọn ngẫu nhiên n k từ unexplored i

loại n k khỏi unexploredi

gửi thông điệp M tới nút n k

else

Giải thuật này có độ phức tạp thông tin là O m( ) và độ phức tạp thời gian là O m( ).

Chương 2:

Một phần của tài liệu Mô phỏng giải thuật phân tán (Trang 25 - 32)

Tải bản đầy đủ (PDF)

(85 trang)