- Thủ tục phát hiện kết thúc:
Quá trình UPDATE dọc theo mảnh MST cần đƣợc phát hiện kết thúc ở nút gốc. Cơ chế phát hiện kết thúc dùng trong giải thuật OMST đƣợc áp dụng từ cơ chế phát hiện kết thúc do Dijkstra và Scholten [16] đề xuất. Tƣ tƣởng của giải thuật này là: Khi một nút gửi thông điệp UPDATE cho các nút con, nó sẽ chờ
đợi tất cả các nút con gửi UPDATE_ACK, sau đó nó gửi UPDATE_ACK lên cho nút cha. Quá trình lặp lại và sự kết thúc đƣợc phát hiện tại nút gốc.
Thông điệp UPDATE_ACK đƣợc khởi phát từ nút lá, khi nút lá nhận đƣợc thông điệp UPDATE từ mảnh MST. Sau khi thực hiện LOCAL-UPDATE, nút lá sẽ đồng thời gửi UPDATE_ACK cho nút cha.
Nút cha nhận đƣợc UPDATE_ACK sẽ đánh dấu ACK cho nút lá đó. Nút cha đợi nhận đủ số thông điệp UPDATE_ACK từ tất cả các con, rồi gửi UPDATE_ACK lên cho nút cha.
Qui trình này đƣợc lặp lại cho tới khi nút gốc nhận đƣợc đủ số ACK từ tất cả các con của nút gốc. Thủ tục UPDATE kết thúc.
b) Thủ tục FIND
Thủ tục FIND đƣợc nút gốc gọi nhằm tìm kiếm liên kết ngoài tối thiểu trong mảnh. Mỗi nút sau khi nhận đƣợc yêu cầu tìm kiếm, nó sẽ gửi yêu cầu này cho các nút con và thực hiện việc tìm kiếm liên kết ngoài cục bộ của mình. Quá trình tìm kiếm sẽ sử dụng dữ liệu “rừng ảo”, vì vậy nút tìm kiếm không cần phải gửi thông báo cho các nút khác. Các liên kết ngoài tối thiểu tìm kiếm đƣợc sẽ đƣợc tập hợp từ dƣới lên trên theo cây khung. Một nút cha chỉ khi nhận đƣợc hết thông báo trả lời của các nút con mới lọc ra liên kết ngoài tốt nhất và gửi lên nút bên trên.
- Gửi yêu cầu tìm kiếm cho tất cả các nút con
- Thực hiện việc tìm kiếm liên kết ngoài tối thiểu cục bộ
- Đợi thông báo trả lời của các nút con
- Khi nhận đủ thông báo, lọc ra liên kết ngoài tối thiểu và gửi lại nút
cha
Bảng 3: Thủ tục FIND
Sau khi thực hiện xong thủ tục FIND và tìm đƣợc liên kết ngoài có trọng số tối thiểu, nút gốc sẽ tiến hành thủ tục CHANGE_ROOT để chuyển gốc về nút kề với liên kết này.
c) Thủ tục CHANGE_ROOT
- Khi nhận đƣợc yêu cầu chuyển gốc, tự đánh dấu mình là nút gốc
- Nếu là nút kề với liên kết ngoài tối thiểu, thủ tục dừng lại
- Tìm nút con trên đƣờng đến liên kết ngoài tối thiểu, gửi yêu cầu
chuyển gốc cho nút này
- Bỏ đánh đấu mình là gốc
Bảng 4: Thủ tục CHANGE_ROOT
d) Thủ tục MERGE
Thủ tục MERGE đƣợc sử dụng để kết hợp hai mảnh thông qua liên kết ngoài tối thiểu. Thủ tục đƣợc nút gốc của mảnh có ID nhỏ hơn thực hiện trƣớc. Nút gốc sẽ yêu cầu kết hợp mảnh qua thông báo Request, khi nhận đƣợc thông báo Accept từ mảnh bên kia, quá trình kết hợp mảnh sẽ đƣợc thực hiện.
- Nếu chƣa nhận đƣợc thông báo Request:
Gửi thông báo Request cho mảnh bên kia qua liên kết ngoài tối thiểu
Đợi thông báo Accept
Khi nhận đƣợc thông báo Alert (có thay đổi trong topo mạng), xét
các trƣờng hợp sau:
o Nếu đã nhận đƣợc Accept, bỏ qua Alert và kết hợp mảnh bình
thƣờng
o Chƣa nhận đƣợc Accept, gửi thông báo Cancel sang bên mảnh
kia, nếu nhận đƣợc Canceled thì hủy bỏ quá trình kết hợp mảnh
- Nếu đã nhận đƣợc thông báo Request từ mảnh bên kia qua cùng liên
kết ngoài tối thiểu:
Gửi thông báo Accept qua liên kết này
Khi nhận đƣợc thông báo Cancel:
o Chƣa gửi Accept, gửi lại thông báo Canceled và hủy bỏ quá
trình kết hợp mảnh.
o Nếu đã gửi Accpet, bỏ qua thông báo Cancel.
Bảng 5: Thủ tục MERGE
3.4.4Tính đúng đắn của giải thuật OMST
Để chứng minh tính đúng đắn của giải thuật OMST, chúng ta trƣớc hết xem xét một số định nghĩa sau:
Định nghĩa 3.2: Xét một mảnh MST tại một thực hiện nào đó
- Đặt Un là hợp của tất cả “cây ảo” của các nút ở trong mảnh MST này
- Đặt Um là hợp của các liên kết trong thông báo DIFF đang di chuyển trên
các liên kết trong mảnh.
Thì “tập cây ảo” của mảnh MST đó đƣợc định nghĩa là hợp của Un và Um
Định nghĩa 3.3: “Tập cây ảo” đƣợc gọi là có “tính bất biến không vòng
lặp” nếu với mọi mảnh trên cây MST thật, “tập cây ảo” của nó không chứa chu trình.
a) Định lý 3.5: Chừng nào thuật toán còn đảm bảo đƣợc “tính bất biến không vòng lặp”, thì các mảnh MST hiện thời sẽ không có chu trình
Chứng minh: Các liên kết trên các mảnh MST luôn luôn xuất hiện trên “cây ảo” của các nút kề với liên kết đó. Vì vậy, tập các liên kết trong mảnh MST sẽ là tập con của “tập cây ảo” của mảnh. Nếu “tập cây ảo” không có chu trình thì mảnh MST tƣơng ứng cũng không có chu trình. Định lý đƣợc chứng minh.
b) Định lý 3.6: Chừng nào thuật toán còn đảm bảo đƣợc “tính bất biến
không vòng lặp”, thì thủ tục FIND luôn kết thúc, và nút gốc sẽ biết sự kết thúc này.
Chứng minh. Với mọi nút u trong mảnh, nếu u không bị ngắt khỏi mảnh (do thay đổi topo mạng), thì sẽ đảm bảo những điều sau đây:
Nếu u không phải là gốc, sau khi u nhận đƣợc phản hồi của các nút con, u
sẽ gửi phản hồi của nó cho nút cha
Nếu u là gốc, sau khi u nhận đƣợc phản hồi của các nút con, thủ tục FIND
sẽ kết thúc tại u
Khi u nhận đƣợc tất cả các phản hồi của nút con, thì thủ tục FIND đã kết
thúc tại tất cả các nút con của nút u.
Các sự thay đổi trong mạng không ảnh hƣởng đến những chứng minh trên. Chúng ta xét 2 trƣờng hợp:
Một liên kết đƣợc phục hồi, thủ tục FIND không bị ảnh hƣởng vì liên kết
này không thuộc mảnh
Nếu liên kết giữa u và một nút con bị mất, u sẽ không đợi phản hồi từ nút
con này, vì vậy các chứng minh trên vẫn chính xác. Đồng thời, nút con của u sẽ trở thành gốc của một cây mới và tiến hành lại các thủ tục UPDATE và FIND.
c) Định lý 3.7: Thủ tục UPDATE không làm thay đổi “tính bất biến
không vòng lặp” trong “tập cây ảo”.
Chi tiết chứng minh định lí này đƣợc trình bày trong [12].
Các thủ tục khác trong thuật toán không làm thay đổi “cây ảo” tại các nút. Kết hợp với định lý trên, “tính bất biến không vòng lặp” luôn đƣợc đảm bảo
trong quá trình thực hiện giải thuật. Tính đúng đắn của giải thuật đƣợc chứng minh.
3.5 Kết luận
Chƣơng 3 đã đi sâu vào trình bày chi tiết 2 giải thuật hiệu quả nhất trong việc xây dựng cây khung trong mạng tĩnh và bảo trì cây khung trong mạng động. Các khái niệm, tƣ tƣởng và các định lí đƣợc chứng minh ở chƣơng này đóng vai trò quan trọng, là cơ sở để luận văn đƣa ra đề xuất đóng góp của riêng luận văn, cải tiến giải thuật để đơn giản quá trình thực thi, đồng thời đƣa ra giải pháp mới dựa trên giải thuật OMST để giải pháp mới có thể vận hành tối ƣu hơn trong mạng đa phát và mạng MANET.
CHƢƠNG 4 - CẢI TIẾN GIẢI THUẬT BẢO TRÌ TỐI ƢU CÂY KHUNG TRONG MẠNG ĐỘNG
4.1 Đặt vấn đề
Đóng góp lớn nhất của giải thuật OMST là tƣ tƣởng tối thiểu hóa chi phí điều khiển mỗi lần đáp ứng thay đổi về hình trạng mạng của cây khung, bằng cách lƣu trạng thái hiện thời của toàn mạng trong “cây ảo” và “rừng ảo”. Do đó với mỗi thay đổi của hình trạng mạng, các nút không tốn chi phí cập nhật lại toàn bộ hình trạng mới, mà dựa vào trạng thái cũ đƣợc lƣu trong cây ảo và rừng ảo để sửa lại trạng thái ứng với sự thay đổi đó. Sự sửa đổi này thực hiện ở bộ nhớ của mỗi nút, làm giảm đáng kể chi phí gửi qua mạng từ O(E) thành O(V).
Tuy nhiên việc tổ chức dữ liệu và lƣu trữ cục bộ của từng nút là không tối ƣu, dẫn tới kích thƣớc gói tin điều khiển gửi đi để cập nhật trạng thái của nút hiện tại cũng không tối ƣu, thể hiện rõ ở các điểm sau:
- Lƣu trữ danh sách cạnh thay vì danh sách nút: Mỗi cạnh có 2 nút, nên
không gian bộ nhớ để lƣu một cây khung nếu lƣu theo danh sách cạnh sẽ nhiều gấp đôi không gian nhớ của cây khung lƣu theo danh sách nút. Trong cây khung, “cây ảo” sẽ có số cạnh xấp xỉ bằng số nút (thực tế số cạnh của cây khung bằng số nút trừ đi 1, nhƣng đều có độ phức tạp là O(V)), nhƣng số cạnh của “rừng ảo” sẽ lớn hơn số cạnh của “cây ảo” rất nhiều, trong trƣờng hợp mạng liên kết dày đặc hoặc đầy đủ, số cạnh của “rừng ảo” sẽ đạt giá trị O(E), tất nhiên số nút vẫn luôn là O(V). Lúc đó chi phí lƣu trữ rừng ảo theo danh sách cạnh sẽ lớn hơn ít nhất là gấp đôi chi phí lƣu trữ danh sách nút của toàn bộ mạng.
- Ngoài ra, cũng với lí do trên, kích thƣớc của thông điệp DIFF chứa danh
sách các cạnh đƣợc bổ sung (danh sách ADD) hoặc các cạnh đƣợc xóa đi (danh sách DEL) khi gửi cho các nút liền kề cũng tăng tối thiểu gấp đôi. Xét về số gói tin có thể giảm đi từ O(E) xuống O(V), nhƣng kích thƣớc gói tăng tối thiểu gấp đôi, cũng chƣa phải là giải pháp tối ƣu.
- Việc lƣu trữ ảnh gƣơng của tất cả các nút trong mạng vừa làm tốn chi phí
lƣu trữ. Với V nút mạng, mỗi nút sẽ lƣu trữ V*E thông tin, trong đó có E thông tin về rừng ảo của nút hiện tại, và (V-1)*E thông tin của các nút còn lại, theo cái nhìn của nút hiện tại. Cách lƣu trữ này cũng làm cho quá trình
UPDATE trở nên phức tạp hơn, dấn đến sự hỗ trợ của khái niệm “phía của mảnh”.
Toàn bộ cách tổ chức cơ sở dữ liệu và truyền thông điệp nhƣ thuật toán OMST, để đảm bảo một tính chất duy nhất: Sau khi kết thúc thủ tục UPDATE, mỗi nút nhận đƣợc thông tin về toàn bộ mạng, chính xác là thông tin toàn bộ cây MST mà nút hiện tại thuộc về, do đó quá trình FIND sẽ lựa chọn đúng liên kết ngoài đảm bảo tính bất biến không vòng lặp. Thủ tục UPDATE kết thúc sẽ giúp cho thủ tục FIND đƣợc thực thi trong bộ nhớ cục bộ là đủ. Chi tiết về những tính chất này đã đƣợc trình bày ở chƣơng 3.
Từ các nhận xét trên, ta có thể đƣa ra giải pháp để đơn giản hóa quá trình tổ chức dữ liệu và thực thi các thủ tục của giải thuật OMST bằng cách lƣu trữ hình trạng mạng bằng danh sách nút thay cho danh sách cạnh. Chi tiết giải thuật đƣợc trình bày ở ngay phần tiếp theo.
4.2 Tƣ tƣởng giải thuật OMST cải tiến
Để mô tả giải thuật OMST cải tiến, ta định nghĩa lại cấu trúc dữ liệu đƣợc dùng trong quá trình thực thi các thủ tục.
Định nghĩa 4.1: “Cây ảo” tại nút v là một cấu trúc dữ liệu dạng danh sách
lƣu trữ thông tin về định danh các nút trong cây khung MST chứa v. Hình 17 mô tả danh sách cây ảo tại nút có định danh là 6.
6
7
1 2
6,1,2
Hình 17: Danh sách “cây ảo” tại nút 6
Danh sách “cây ảo” tại mỗi nút là một bản sao đơn giản hóa của toàn bộ cây khung MST chứa nút hiện tại, và các nút của cây khung này có danh sách
“cây ảo” giống hệt nhau, và giống hệt cây khung MST. Danh sách cây ảo này đƣợc lƣu trong biến Tree_List tại mỗi nút.
Các nút chỉ quan tâm đến “cây ảo” chứ không cần quan tâm đến “rừng ảo” chứa toàn bộ các nút của mạng. “Cây ảo” là cơ sở cho quá trình tìm kiếm liên kết ngoài tối thiểu theo cơ chế loại trừ: Những nút ứng viên để tìm liên kết ngoài tối thiếu là những nút không có mặt trong danh sách “cây ảo” hiện tại.
Định nghĩa 4.2: “Nhánh ảo” của nút k thuộc “cây ảo” gốc v là một tập con
của “cây ảo” đƣợc xây dựng bằng cách từ nút k duyệt theo tất cả các đƣờng dẫn của mảnh MST hiện tại, ngoại trừ đƣờng dẫn liên kết từ k đến nút gốc v.
Ví dụ trong hình 17, nếu nút 6 là gốc, nút 1 có liên kết đến nút 6 và nút 2, thì “nhánh ảo” ở nút 1 chỉ bao gồm nút 1 và nút 2.
“Nhánh ảo” là khái niệm giúp cho quá trình UDPATED và FOUND, đƣợc trình bày ở phần sau, đƣợc thực hiện một cách rõ ràng, thể hiện tính chất phân tán của giải thuật: Mỗi nút sẽ tập hợp kết quả từ các nút con trong “nhánh ảo” của mình, sau đó gửi kết quả “nhánh ảo” này lên nút cha, nút cha tổng hợp thành kết quả của “nhánh ảo” to hơn, đến nút gốc là tổng hợp kết quả của tất cả các “nhánh ảo”, tạo thành kết quả chung của toàn bộ mảnh MST hiện tại.
Để hỗ trợ UPDATE và FIND, mỗi nút v bổ sung thêm vào danh sách các nút hàng xóm thuộc tính kiểu liên kết từ nút v đến các nút hàng xóm đó. Cấu trúc dữ liệu về hàng xóm tại nút v đƣợc tổ chức nhƣ sau:
// Cấu trúc dữ liệu lưu thông tin về mỗi nút hàng xóm struct nb_link
{
// Định danh của nút hàng xóm Address nb_address;
// Kiểu liên kết từ nút hiện tại đến nút đó Link_Type nb_linkType;
// Trọng số của liên kết Double nb_Weight;
}
List<nb_link> Nb_List; // Danh sách các nút hàng xóm Trong đó Link_Type có 2 giá trị:
- Mesh_Link: Là liên kết ngoài, tức là nút hàng xóm không có liên kết trực
- Tree_Link: Là liên kết cây khung, tức là nút hàng xóm có liên kết trực tiếp đến nút hiện tại v trong cây khung MST chứa v.
Lƣu ý một nút hàng xóm k có thể có kiểu liên kết với v là Mesh_Link, nhƣng nút k có thể có mặt trong danh sách Tree_List, nhƣ minh họa ở hình 18:
6 7
1 2
6,1,2,7
Hình 18: Danh cách cây ảo tại nút 6
Trong hình 18, nút 6 có 2 hàng xóm là 1 và 7, trong đó liên kết 6-1 là Tree_Link, liên kết 6-7 là Mesh_Link. Nút 7 có kiểu liên kết với nút 6 là Mesh_Link nhƣng vẫn có mặt trong danh sách Tree_List lƣu tại nút 6.
Nhƣ vậy, mỗi nút v của cây MST không cần lƣu danh sách “rừng ảo” của toàn bộ mạng mà chỉ cần lƣu danh sách hàng xóm cùng kiểu liên kết đến các hàng xóm đó, cộng với danh sách Tree_List của toàn bộ các nút trong MST hiện tại là đủ. Lúc này một nút k là ứng viên tìm kiếm liên kết ngoài tối thiểu của nút v nếu nhƣ nó thỏa mãn cả 2 điều kiện sau:
- Liên kết từ v đến k là liên kết Mesh_Link
- Nút k không có mặt trong danh sách Tree_List lƣu tại v.
Kế thừa từ OMST, giải thuật OMST cải tiến cũng dựa trên 2 thủ tục quan trọng nhất là UPDATE và FIND:
- Thủ tục UPDATE có nhiệm vụ duyệt qua tất cả các nút trong cây khung
hiện tại để bổ sung vào danh sách Tree_List. Sau khi thủ tục UPDATE kết thúc, “cây ảo” sẽ giống hệt cây MST thật về danh sách định danh nút trong cây.
- Thủ tục FIND có nhiệm vụ tìm kiếm liên kết ngoài tối thiếu với danh sách loại trừ là danh sách Tree_List kết quả từ thủ tục UPDATE.
Ta sẽ chứng minh ở phần sau đƣợc rằng, thủ tục UPDATE và FIND có độ phức tạp thông báo là O(V) và sau các thủ tục này cũng đảm bảo tính đúng đắn của các định lý về bảo toàn tính bất biến không vòng lặp và không xuất hiện chu