Thuật toán để chèn một đoạn vào R.
Bước 1: Nếu r = [u, v] ∈ R, cập nhật thông tin về Next Hop tương ứng với r ∈ R và kết thúc.
Bước 2: Tính maxP(u, v, R), minP(u, v, R), maxY(u, v, R) và minX(u, v, R).
Bước 3: Nếu maxY(u, v, R) ≤ maxP(u, v, R) ∧ minX(u, v, R) ≥ minP(u, v, R), R ∪ {r} là conflict free; ngược lại thì không.
Thực chất bước 1 thực hiện việc tìm kiếm tranform1(map1(r)) trong cây PST1.
Trong bước 2, ta chú ý:
maxY(u,v,R)= maxXinRectangle(2w u- (u - 1) + 2w-1, 2w(v-1)+ 2w-1, u -1)
minX(u,v,R) = minXinRectangle(2w (u+1), 2w v + (2w -1)- v-1,( 2w-1) -v -1) Trong đó đối với maxY ta sử dụng PST1 và đối với minX ta sử dụng
PST2. phần 3.2.4.4 mô tả việc tính của maxP và minP. Việc chèn điểm của bước 3 được thực hiện sử dụng thuât toán chèn chuẩn cho PST .
3.2.4.3 Xóa một đoạn
Giả sử ta xóa đoạn r = [u, v]. Việc xóa phải được kiểm tra nếu r ≠ z
(là đoạn khớp với tất cả các địa chỉ đích) và A = R – {r} là conflict free.
Thuật toán xóa một đoạn từ R
Bước 1: Nếu r = z, thay đổi thông tin Next Hop của z thành ∅, kết thúc.
Bước 2: Xóa transform1(map1(r)) từ PST1 và transform2(map2(r)) từ
PST2 và lấy các cây PST với A = R – {r}. Nếu PST1 không có
transform1(map1(r)), r ∉ R; kết thúc.
Bước 3: Kiểm tra có hay không tập con A mà ánh xạ bằng r = [u, v].
Bước 4: Nếu A là một tập con, kết luận A là conflictFree(A) và kết thúc.
Bước 5: Kiểm tra khi A là một đoạn chứa r = [u, v]. Nếu không kết luận
conflictFree(A) kết thúc.
m = start(maxXinRectangle(0, 2w u + (2w - 1) – v, (2w – 1) - v)) sử dụng cây
PST2
n = finish(minXinRectangle(2w v – u + 2w - 1, ∞, u)) sử dụng cây PST1.
Bước 7: Xác định xem có [m,n]∈A không. Nếu có thì kết luận
conflictFree(A). Ngược lại, kết luận ¬conflictFree(A). Nếu ¬
conflictFree(A) chèn lại transform1(map1(r)) vào cây PST1 và
transform2(map2))cây PST2 và không xóa r. Độ chính xác của thuật toán theo bổ đề 8.
Bước 2 áp dụng thuật toán PST chuẩn để xóa một điểm. Bước 3, ta chú ý A có một tập con mà phép chiếu r = [u, v] khi và chỉ khi maxP(u, v, A) = v. Bước 5, cần chú ý r= [u, v]⊆s = [x, y] khi và chỉ khi x u y v≤ ∧ ≥ .
Do vậy A là một đoạn nếu minXinRectangle(2wv – u + 2w – 1, ∞, u) tồn tại trong PST1.
Bước 6, giả sử rằng maxXinRectangle và minXinRectangle trả về một đoạn của R mà tương ứng với các điểm mong muốn trong hình chữ nhật. Để xác định xem thử [m, n] ∈ A (Bước 7), ta tìm kiếm điểm (2wn – m + 2w – 1, m) trong PST1. Sử dụng thuật toán tìm kiếm trong cây PST chuẩn. Việc chèn lại đoạn r vào hai cây PST1, PST2 khi cần thiết được thực hiện bằng việc sử dụng thuật toán chèn vào cây PST chuẩn.
3.2.4.4 Độ phức tạp
Các thủ tục tìm kiếm, chèn, xóa trên cây PST1 và PST2 có độ phức tạp giống như trường hợp của các đoạn không giao nhau phần 3.2.2 và 3.2.3.
Kết luận chương 3
Qua phần tìm hiểu về định tuyến IP theo phương pháp khớp tiền tố dài nhất, ta nắm được cách ánh xạ các địa chỉ tiền tố thành tập hợp các điểm trong không gian hai chiều và biểu diễn tập hợp này trên cây PST. Sau đó dùng hàm enumerateRectangle trên cây PST để tìm các tiền tố khớp với địa chỉ đích d, và hàm minXinRectangle để tìm tiền tố dài nhất khớp với địa chỉ d. Đây cũng là nội dung quan trọng nhất của chương.
Ngoài ra, đối với các đoạn không giao nhau khi chèn vào cây, ta còn kiểm tra được đoạn chèn vào có giao với các đoạn đã có trong cây chưa bằng cách duy trì một cây PST thứ hai. Với tập các đoạn conflic free, ta nghiên cứu thuật toán chèn/xóa một đoạn trong đó kiểm tra tính conflic free
của tập các đoạn.
Tuy nhiên, phạm vi nghiên cứu của chương chỉ dừng lại ở phần nghiên cứu lý thuyết, chưa thử cài đặt minh họa.
Chương tiếp theo sẽ nghiên cứu một phương pháp khác cho việc định tuyến IP động.