Với cải tiến trình bày ở chƣơng này, ta có thể xây dựng đƣợc một giải thuật tốt hơn, nhƣng không làm thay đổi độ phức tạp tính toán, và vẫn đảm bảo tính đứng đắn và tối ƣu của giải thuật. Ngoài ra, việc lƣu trữ hình trạng mạng theo nút sẽ làm đơn giản hóa cài đặt, thu gọn kích thƣớc gói tin thông điệp.
Cải tiến này áp dụng cho hầu hết các mạng động nói chung. Tuy nhiên, với đặc thù của mạng MANET, ta có thể đƣa ra giải thuật tiện lợi hơn, và chỉ phù hợp với mạng MANET:
Nhƣ đã trình bày ở trên, tƣ tƣởng chính của cơ chế bảo toàn là mỗi khi có liên kết bị đứt, mỗi mảnh con cập nhật lại đƣợc toàn bộ danh sách mảnh mình, từ đó định vị lại nhóm các node có thể tìm kiếm liên kết ngoài. Đối với mạng MANET, do cơ chế phát sóng không dây trong phạm vi mà hàng xóm nhận đƣợc, mỗi node không cần lƣu lại toàn bộ danh sách các node thuộc cây khung chứa chính nó, mà chỉ cần đánh dấu node hàng xóm có thuộc cây khung chứa mình hay không, nói cách khác, đánh dấu node hàng xóm có cùng thuộc cây khung với mình không.
Để thực hiện điều này, cấu trúc dữ liệu ở phần 4.2 cần bổ sung thêm trƣờng định danh của mảnh MST chứa nút hàng xóm 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 Link_Type nb_linkType;
// Định danh của mảnh MST chứa hàng xóm Address nb_rootID;
}
List<nb_link> Nb_List; // Danh sách các nút hàng xóm Đồng thời mỗi nút cũng có thêm thuộc tính rootID, lƣu định danh của mảnh MST chứa nút đó. Ban đầu rootID bằng giá trị bằng định danh của nút hiện tại.
Ở thủ tục UPDATE, nút gốc của cây mới sẽ phát tràn thông điệp
UPDATE(rootIDi) cho các hàng xóm, Mỗi node j nhận đƣợc thông điệp
UPDATE từ nút i sẽ xử lí:
- Nếu Nb_List[i].nb_linkType = Mesh_Link:
o Thiết lập Nb_List[i].nb_rootID = rootIDi
- Nếu Nb_List[i].nb_linkType = Tree_Link:
o Thiết lập Nb_List[i].nb_rootID = rootIDi
o rootID = rootIDi
o Chuyển tiếp này đi cho các hàng xóm.
Nếu nút j nhận đƣợc thông điệp UPDATE từ một nút con nào đó (nút có liên kết Tree_Link và không phải là nút cha), nút này đơn giản bỏ qua thông điệp này.
Do thủ tục UPDATE đƣợc khởi phát từ nút gốc, các nút khác chỉ có nhiệm vụ chuyển tiếp và chỉ gửi đi qua các liên kết dạng Tree_Link, nên sau khi thủ tục UPDATE kết thúc, tất cả các nút của cây khung MST gốc v đều có thuộc tính rootID là v. Mỗi nút u sẽ có đƣợc danh sách “nhánh cây ảo” gồm các nút vừa là hàng xóm của nút u vừa thuộc cây khung MST chứa u. Nếu trong bộ nhớ của nút u, hàng xóm k có Nb_List[k].nb_rootID trùng với rootID của nút u thì hàng xóm đó thuộc cây khung chứa nút u.
Với cách tổ chức dữ liệu này, giải thuật vẫn đảm bảo tính bất biến không vòng lặp, do thủ tục FIND chỉ tìm kiếm liên kết ngoài từ các nút hàng xóm, do đó mỗi nút chỉ cần biết danh sách các nút hàng xóm cùng thuộc cây khung với nó là đủ, không cần biết danh sách tất cả các nút của toàn bộ cây khung. Nút u muốn chọn nút i để so sánh liên kết ngoài tối thiểu thì nút i phải thỏa mãn cả 2 điều kiện cần sau:
- Nb_List[i].nb_linkType = Mesh_Link
- Nb_List[i].nb_rootID != rootID
Chứng minh tính đúng đắn của giải pháp này tƣơng tự nhƣ giải pháp cải tiến dùng danh sách nút, do tính “bất biến không vòng lặp” đƣợc đảm bảo, nhƣ phần trình bày ở trên đã chỉ ra.
CHƢƠNG 5 - XÂY DỰNG VÀ BẢO TRÌ TỐI ƢU CÂY KHUNG ĐA PHÁT TRONG MẠNG MANET
5.1 Đặt vấn đề
Bài toán cây khung nhỏ nhất đƣợc chứng minh là bài toán tối ƣu với tổng chi phí nhỏ nhất xây dựng đƣờng đi nối tất cả các nút của đồ thị, là bài toán cơ bản và có ứng dụng quan trọng trong các mạng truyền dữ liệu cũng nhƣ định tuyến mạng. Tuy nhiên, trong định tuyến đa phát, chỉ có một nhóm các nút đƣợc chỉ định trƣớc có chức năng gửi nhận dữ liệu, còn lại các nút khác chỉ đóng vai trò trung gian định tuyến, nhận-và-chuyển tiếp (store and forward) các gói tin đến các nút liền kề. Trong ngữ cảnh này, nếu xây dựng cây khung đi qua tất cả các nút, kể cả những nút không thuộc nhóm đa phát, thì tổng chi phí đƣờng truyền (tính theo các nút thuộc nhóm đa phát) có thể không còn là tối ƣu nữa, do phần chi phí đƣờng truyền cho các nút không thuộc nhóm đa phát là chi phí vô ích (vì các nút đó không nhận dữ liệu).
Nhƣ vậy, không thể áp dụng nguyên bản giải thuật cây khung và bảo trì cây khung nhƣ đã trình bày ở phần trên vào mạng đa phát đƣợc, mà cần có giải pháp cải tiến, đƣợc trình bày trong chƣơng này. Đây là một phần đóng góp quan trọng của luận văn, giải quyết tối ƣu hơn bài toán cây khung trong mạng đa phát.