này. Các thông tin này sẽ đƣợc tính dựa vào các phiên bản “rừng ảo” lƣu tại nút đó.
Tuy nhiên, vấn đề phức tạp ở đây là: khi hai nút kề nhau không “đồng ý” về thông tin của “rừng ảo”, hay hai nút không biết thông tin của nút nào là chính xác hơn. Vấn đề này có thể giải quyết dựa vào khái niệm “phía” của một nút nhƣ sau:
- Xét một liên kết (u, v) trong một mảnh MST. Khi bỏ đi liên kết này, sẽ
đƣợc hai mảnh MST phân biệt, một mảnh chứa u và một mảnh chứa v. Ta định nghĩa một nút hay một liên kết trong mảnh là “phía u” nếu nút hay liên kết này thuộc mảnh MST chứa u. Ngƣợc lại, nó sẽ là “phía v”.
Khi hai nút u, v gửi thông tin về “rừng ảo” cho nhau, chúng sẽ dựa vào “phía” để xác định xem thông tin nào là chính xác hơn. Các thông tin về liên kết phía u lƣu tại u sẽ chính xác hơn những thông tin này khi lƣu tại v. Hay những thông tin phía u bao giờ cũng đến u trƣớc rồi mới đến v. Vì vậy, trong thủ tục UPDATE, một nút chỉ cần gửi thông tin về phía mỉnh cho các nút lân cận để cập nhật.
Thủ tục UPDATE sẽ đƣợc gọi tại nút gốc, khi đó nút gốc sẽ gửi các yêu cầu UPDATE đến lần lƣợt các nút khác trong mạng. Mỗi nút khi nhận đƣợc yêu cầu UPDATE từ nút cha, ngoài việc gửi yêu cầu này cho nút con, chúng sẽ gọi một thủ tục LOCAL_UPDATE để cập nhật thông tin cho các nút lân cận. Thủ tục này còn đƣợc gọi khi một nút nhận đƣợc các thông tin có ích từ nút khác.
Chi tiết thủ tục LOCAL_UPDATE nhƣ sau:
Với mọi k: (v, k) thuộc cây và Forestv(k) khác rỗng:
- Gửi thông báo DIFF(diff(k)) cho nút k
- Forestv(k) = Forestv(k) + diff(k)
Khi nhận đƣợc một thông báo DIFF (Add, Del) từ nút k
Forestv(v) = Forestv(v) + Add – Del