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 trình, qua đó tính đúng đắn của giải thuật cũng đƣợc đảm bảo.
Các thủ tục và xử lí sự kiện khác, nhƣ Change_Root, Merge, Alert và xử lí đồng bộ khi có sự thay đổi hình trạng mạng trong quá trình thực thi các thủ tục đƣợc áp dụng giống nhƣ trong giải thuật OMST gốc, vì chỉ có tổ chức bộ nhớ ở các nút và cấu trúc thông điệp là khác nhau, nhƣng đều đáp ứng giống hệt nhau với các sự thay đổi hình trạng mạng, do đó các thủ tục xử lí khi có thay đổi hình trạng cũng giống nhau.
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