4 .2Tƣ tƣởng giải thuật OMST cải tiến
4.3 Chi tiết giải thuật OMST cải tiến
Cũng giống nhƣ giải thuật OMST gốc, các mảnh MST trong thời gian thực thi giải thuật cũng liên tục tìm kiếm liên kết ngoài có trọng số tối thiểu qua thủ tục FIND, sau đó tiến hành thủ tục ghép mảnh qua liên kết ngoài này. Quá trình này đƣợc lặp lại cho đến khi toàn bộ mạng chỉ còn một mảnh MST duy nhất, đó chính là cây khung của mạng.
Để quá trình FIND thực thi đúng đắn, đảm bảo tính bất biến không vòng lặp, không xuất hiện chu trình, giải thuật OMST cải tiến thực thi quá trình UPDATE để cập nhật lại danh sách các nút Tree_List của cây khung MST hiện tại, trên cơ sở danh sách này, thủ FIND sẽ tìm kiếm chính xác theo cơ chế loại trừ: Nút nào đã có mặt trong sách Tree_List sẽ không đƣợc lựa chọn là ứng viên để tìm kiếm liên kết ngoài tối thiểu qua nút đó. Điều quan trọng là, thủ tục UPDATE luôn đƣợc thực thi trƣớc thủ tục FIND để đảm bảo quá trình tìm kiếm luôn chính xác.
4.3.1 Thủ tục chính của giải thuật OMST cải tiến
Khi liên kết Tree_Link trong cây khung bị mất
o Hai đầu liên kết loại bỏ liên kết Tree_Link này
Khi hai mảnh kết hợp hoặc hình trạng mạng thay đổi
o Gọi thủ tục UPDATE để cập nhật, sau đó gọi thủ tục FIND
Khi hai mảnh chọn chung một liên kết ngoài:
o Kết hợp hai mảnh qua liên kết ngoài này.
Thủ tục này kế thừa từ giải thuật OMST gốc, với một số cải tiến sau:
- Khi liên kết Tree_Link trong cây khung bị mất: Do cấu trúc dữ liệu lƣu
kiểu liên kết Link_Type và không lƣu “cây ảo” theo danh sách cạnh, nên khi liên kết Tree_Link bị mất, chỉ cần đơn giản xóa nút ở đầu kia liên kết ra khỏi danh sách hàng xóm.
- Khi hình trạng mạng thay đổi: Bổ sung nút hàng xóm vào danh sách hàng
xóm Nb_List, với kiểu liên kết đến nút hàng xóm đó là Mesh_Link.
Các thủ tục điều khiển UPDATE, FIND, ALERT chỉ gửi qua các Tree_Link của cây khung MST, các thủ tục MERGE, ACCEPT và CANCEL chỉ gửi qua liên kết Mesh_Link của liên kết ngoài tối thiểu đƣợc chọn.
Khi kết hợp mảnh, liên kết đƣợc chọn chung sẽ đƣợc chuyển thành kiểu Tree_Link ở 2 đầu liên kết. Các thủ tục UPDATE, FIND và ALERT sẽ gửi qua các liên kết Tree_Link mới này.
4.3.2 Thủ tục UPDATE
- Thủ tục UPDATE để cập nhật Tree_List tại tất cả các nút của cây khung
MST hiện tại. Thủ tục này đƣợc khởi phát từ nút gốc, gửi qua các nút hàng xóm qua các liên kết Tree_Link
- Mỗi nút hàng xóm nhận đƣợc sẽ đánh dấu nút vừa gửi là nút cha, đồng
thời forward cho các nút hàng xóm khác không phải là nút cha.
Nút gốc sẽ phởi phát
oGửi thông điệp UPDATE cho tất cả các hàng xóm có liên kết
Tree_link
Khi nhận đƣợc UPDATE
oĐánh dấu nút gửi là nút cha
oChuyển tiếp thông điệp UPDATE cho các nút hàng xóm (khác nút
cha) có liên kết Tree_link
Khi Nút lá nhận đƣợc UPDATE
oThực thi quá trình báo cáo ngƣợc bằng cách gửi UPDATED cho nút
cha vừa đánh dấu
- Nút lá nhận đƣợc UPDATE sẽ thực thi quá trình phát hiện kết thúc bằng cách gửi báo cáo UPDATED lên nút cha.
4.3.3 Thủ tục UPDATED
Thông điệp UPDATED tƣơng tự nhƣ thông điệp DIFF của thuật toán OMST gốc, chứa một trƣờng dữ liệu đặc biệt, là danh sách Tree_List các nút của cây khung hiện tại. Danh sách đƣợc mỗi nút nhận đƣợc bổ sung định danh của chính nó vào danh sách trƣớc khi gửi về gốc.
Nút cha đợi đủ tất cả mọi nút con gửi UPDATED thì gửi lên cho nút cha của nó, cứ nhƣ vậy cho đến nút gốc. Nút gốc nhận biết đƣợc quá trình UPDATED kết thúc.
Tại mỗi thời điểm một nút gửi thông điệp UPDATED, trƣờng Tree_List chứa danh sách “nhánh ảo” của cây MST hiện tại, với nút hiện tại là gốc của nhánh. Kết hợp các “nhánh ảo” này tại nút gốc sẽ tạo thành “cây ảo” của cây MST hiện tại. Điều này có giá trị tƣơng đƣơng nhƣ danh sách “rừng ảo” và “cây ảo” của giải thuật OMST gốc. Khi có một liên kết bị đứt gãy, thông điệp UPDATE và UPDATED không thể đƣợc gửi qua liên kết này, do đó danh sách “cây ảo” cuối cùng nhận đƣợc sẽ giống hệt với danh sách cây khung MST thật.
Nút lá sẽ phởi phát thủ tục
oBổ sung định danh của chính mình vào Tree_List của thông điệp
UPDATED, rồi gửi lên cho nút cha.
Khi nhận đƣợc UPDATED
oLƣu Tree_List trong thông điệp UPDATED lại
oChờ UPDATED từ các nút con khác, mỗi lần nhận UPDATED từ
con thì thực hiện phép hợp các Tree_List từ các thông điệp UPDATED với nhau.
oSau khi nhận đủ từ tất cả các nút con, nút bổ sung định danh chính
mình vào danh sách Tree_List của thông điệp UPDATED, rồi gửi cho cha
Khi nút gốc nhận đƣợc đủ số thông điệp UPDATED từ tất cả các con
oTổng hợp danh sách Tree_List, danh sách này là “cây ảo” của mạng
hiện tại
Thủ tục UPDATED là mở rộng của thủ tục UPDATE-ACK của giải thuật OMST gốc, đều kế thừa từ giải thuật phát hiện kết thúc từ gốc của Dijkstra và Scholten [16].
4.3.4 Thủ tục FIND
Thông điệp FIND chứa danh sách Tree_List là kết quả của thủ tục UPDATE đƣợc gửi cho toàn bộ mạng thông qua liên kết Tree_Link. Đƣờng đi của thông điệp UPDATE giống hệt đƣờng đi của thông điệp FIND trên mạng.
Thủ tục FIND để gửi “cây ảo” mới nhất của cây MST hiện tại cho các nút con, đồng thời yêu cầu nút con thực hiện tìm kiếm liên kết ngoài dựa vào cấu hình “cây ảo” nhận đƣợc. Thủ tục này đƣợc khởi phát từ nút gốc, gửi qua các nút hàng xóm qua các liên kết Tree_Link
Mỗi nút hàng xóm nhận đƣợc sẽ đánh dấu nút vừa gửi là nút cha, cập nhật cấu hình “cây ảo” vào bộ nhớ thông qua thủ tục LOCAL_UPDATE, đồng thời chuyển tiếp cho các nút hàng xóm khác không phải là nút cha. Nút này đồng thời cũng thực hiện quá trình tìm kiếm liên kết ngoài tối thiểu dựa vào cấu hình “cây ảo” vừa cập nhật thông qua thủ tục LOCAL_FIND.
Nút lá nhận đƣợc FOUND sẽ thực thi quá trình phát hiện kết thúc bằng cách gửi báo cáo FOUND lên nút cha.
Nút gốc sẽ phởi phát
oGửi thông điệp FIND chứa Tree_List cho tất cả các hàng xóm có liên
kết Tree_link
Khi nhận đƣợc FIND
oĐánh dấu nút gửi là nút cha
oCập nhật Tree_List hiện tại vào bộ nhớ (LOCAL_UPDATE)
oThực hiện tìm kiếm liên kết ngoài dựa vào Tree_List vừa cập nhật
(LOCAL_FIND)
oChuyển tiếp thông điệp FIND cho các nút hàng xóm (khác nút cha)
có liên kết Tree_link
Khi Nút lá nhận đƣợc UPDATE
o Thực thi quá trình báo cáo ngƣợc bằng cách gửi FOUND cho nút cha
vừa đánh dấu
4.3.5 Thủ tục FOUND
Thông điệp FOUND chứa thông tin về liên kết ngoài tốt nhất chọn đƣợc. Các nút nhận đƣợc thông điệp FOUND sẽ thực hiện so sánh kết quả tốt nhất có đƣợc từ các con và từ kết quả của thủ tục LOCAL_FIND, sau đó gửi lên nút cha, đến khi tới nút gốc và kết thúc.
Nút cha đợi đủ tất cả mọi nút con gửi FOUND thì gửi lên cho nút cha của nó, cứ nhƣ vậy cho đến nút gốc. Nút gốc nhận biết đƣợc quá trình FOUND kết thúc, tƣơng tự cơ chế phá hiện kết thúc của thủ tục UPDATE.
Tại mỗi thời điểm một nút gửi thông điệp FOUND, thông tin liên kết ngoài chứa trong thông điệp là liên kết ngoài tốt nhất của “nhánh ảo” của cây MST hiện tại, với nút hiện tại là gốc của nhánh. So sánh liên kết ngoài tốt nhất của các “nhánh ảo” này tại nút gốc sẽ tìm đƣợc liên kết ngoài tốt nhất của toàn bộ cây khung.
Thủ tục FOUND kế thừa hoàn toàn từ thủ tục Report-Found của giải thuật OMST gốc, thông điệp FOUND cũng chứa thông tin về liên kết ngoài tối thiểu đƣợc chọn.
Nút lá sẽ khởi phát
oGửi nút FOUND với thông tin nút ngoài của liên kết ngoài tối thiểu
là kết quả của thủ tục LOCAL_FIND.
Khi nhận đƣợc FOUND
oSo sánh kết quả lấy từ thông điệp FOUND với kết quả từ thủ tục
LOCAL_FIND, lƣu lại kết quả tốt nhất.
oChờ FOUND từ các nút con khác, mỗi lần nhận FOUND từ nút con
thì thực hiện phép so sánh với kết quả tốt nhất.
oSau khi nhận đủ thông điệp FOUND từ tất cả các nút con, nút này
gửi thông điệp FOUND chứa kết quả tốt nhất nhận đƣợc lên cho cha của nó.
Khi nút gốc nhận đƣợc đủ số thông điệp FOUND từ tất cả các con
oNút gốc tiến hành so sánh tƣơng tự nhƣ các nút con khác, sau đó
chọn kết quả tốt nhất, và kết thúc quá trình tìm kiếm.
Kết thúc quá trình FOUND, nút gốc chọn đƣợc liên kết ngoài tối thiểu, thực hiện quá trình chuyển gốc đến nút trong của liên kết ngoài đó, sau đó thực hiện quá trình. Cách thức thực hiện các thủ tục này giống y hệt cách thức thực hiện trong giải thuật OMST gốc.