Tải bản đầy đủ (.doc) (80 trang)

ĐỒ án tốt NGHIỆP đại học NGHIÊN cứu bài TOÁN SO KHỚP TIỀN tố dài NHẤT áp DỤNG TRONG ROUTER

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (701.98 KB, 80 trang )

LỜI NĨI ĐẦU
Việc định tuyến các gói tin thường tạo ra các điểm thắt nút của
mạng, đặc biệt khi nhu cầu cập nhật các luật trong bảng định tuyến cao. Do
đó đã có rất nhiều nghiên cứu nhằm tìm ra các giải pháp, thuật toán tốt nhất
cho việc định tuyến nhằm giảm thắt nút của mạng. Các giải pháp dựa trên
bảng tiền tố tĩnh đã có nhiều kết quả tốt khi áp dụng đối với địa chỉ IP
ngắn. Tuy nhiên, khi áp dụng trên địa chỉ IP dài, các giải pháp này thơng
thường phải xây dựng lại tồn bộ bảng định tuyến nên thời gian cập nhật
chậm do vậy xảy ra trường hợp định tuyến sai gói tin. Thời gian gần đây có
nhiều tác giả đã đưa ra các giải pháp, thuật toán thực hiện trên bảng định
tuyến động - bảng định tuyến cho phép chèn/xóa đồng thời với việc định
tuyến các gói tin.
Trong nội dung đồ án tơi nghiên cứu 02 phương pháp định tuyến trên
bảng IP động: phương pháp khớp tiền tố dài nhất, phương pháp sử dụng độ
ưu tiên cao nhất của các luật.
Nội dung nghiên cứu bao gồm:
- Nguyên tắc hoạt động của Router
- Định tuyến IP theo phương pháp khớp tiền tố dài nhất
- Định tuyến IP theo độ ưu tiên
- Cài đặt minh họa
Trong q trình thực hiện đồ án, mặc dù có rất nhiều cố gắng trong
việc nghiên cứu, sưu tầm tài liệu và được sự giúp đỡ nhiệt tình của giáo
viên hướng dẫn, nhưng do điều kiện thời gian có hạn, trình độ kiến thức
cịn nhiều hạn chế nên tơi khơng thể tránh được những thiếu sót. Tơi rất
mong nhận được sự đóng góp ý kiến của các thầy cơ giáo và những người
quan tâm.

1


Tôi xin chân thành cảm ơn thầy giáo TS. cùng các thầy cô trong Bộ


môn Công nghệ phần mềm, và Khoa CNTT đã tận tình hướng dẫn, tạo
mọi điều kiện giúp đỡ tôi thực hiện đồ án này.

2


Chương 1. TỔNG QUAN VỀ ĐỊNH TUYẾN
Định tuyến là yếu tố cốt yếu của tất cả các mạng truyền thông. Một
thiết bị định tuyến trích ra đích từ phần đầu của một gói tin nó nhận được,
chọn đường đi tốt nhất tới đích đó và chuyển tiếp các gói dữ liệu tới thiết bị
tiếp dọc theo đường đi tốt nhất này.
Trong phạm vi chương này, tơi xin trình bày một số nội dung cơ bản
về định tuyến trên Internet.
1.1 Thiết bị định tuyến - Router
Router là một thiết bị hoạt động trên tầng mạng, nó có thể tìm được
đường đi tốt nhất cho các gói tin qua nhiều kết nối để đi từ trạm gửi thuộc
mạng đầu đến trạm nhận thuộc mạng cuối. Router có thể được sử dụng
trong việc nối nhiều mạng với nhau và cho phép các gói tin đi theo nhiều
đường khác nhau tới đích.
Router có địa chỉ riêng và chỉ tiếp nhận, xử lý các gói tin gửi đến nó
mà thơi. Khi một trạm muốn gửi gói tin qua Router thì trạm đó phải gửi gói
tin tới địa chỉ trực tiếp của Router thì khi gói tin đến Router, Router mới xử
lý và gửi tiếp.
Khi xử lý một gói tin, Router phải tìm được đường đi của gói tin qua
mạng. Để làm được điều đó nó phải tìm được đường đi tốt nhất trong mạng
dựa trên các thơng tin đã có về mạng trên bảng định tuyến.
Để ngăn chặn việc mất mát số liệu, Router còn phải nhận biết đường
nào có thể truyền và ngừng truyền khi đường bị tắc bằng cách cài đặt các
phương thức tránh tắc nghẽn.
Các phương thức hoạt động của Router đảm bảo cho nó có thể nối

được với các Router khác, qua đó chia sẻ thơng tin về mạng hiện có. Các

3


chương trình chạy trên Router sẽ xây dựng bảng chỉ đường thông qua việc
trao đổi các thông tin với các Router khác.
Trong phương thức vector khoảng cách, mỗi Router luôn truyền đi
các thơng tin về bảng định tuyến của mình trên mạng, thơng qua đó các
Router khác sẽ cập nhật lên bảng chỉ đường của mình.
Trong phương thức trạng thái tĩnh, các Router chỉ truyền các thông
báo khi phát hiện có sự thay đổi trong mạng và chỉ khi đó các Router tự cập
nhật lại bảng định tuyến, thông tin truyền đi khi đó thường là thơng tin về
đường truyền.
1.2 Định tuyến trên Internet
1.2.1 Khái niệm về định tuyến
Định tuyến là tiến trình học tất cả các hướng đi trong một mạng và
chuyển tiếp các gói tin trên các hướng đi này. Một cách cụ thể, định tuyến
là quá trình định hướng gói tin về phía địa chỉ đích, hay nói cách khác là
xác định đường đi từ mạng này đến mạng khác. Router sẽ quyết định
đường đi của gói tin đến đúng địa chỉ đích dựa vào bảng định tuyến chứa
trong bộ nhớ. Bảng định tuyến này được khởi tạo giá trị ban đầu, các đầu
vào có thể tạo bằng tay hoặc tự động.
Có thể phân chia thành 3 kiểu định tuyến
- Định tuyến tĩnh
- Định tuyến động
-

Định tuyến mặc định: Một gói tin mà Router khơng biết địa chỉ
đích của nó được gửi ra cổng mặc định.


Ngày nay Internet bao gồm hàng nghìn các gói tin được kết nối trên
các mạng bởi các Router. Khi một máy trạm gửi một gói tin vào Internet,

4


các Router giữ chậm gói tin đó và định hướng đến địa chỉ đích cuối cùng.
Các Router trao đổi thơng tin định tuyến với mỗi Router khác, và sử dụng
thông tin thu được để tính tốn đường đi cho tất cả các địa chỉ đích có thể
đến được. Mỗi gói tin được xử lý ngay và định hướng tới Router tiếp theo
dựa trên địa chỉ đích của nó.
1.2.2 Thuật tốn định tuyến
Một mạng chuyển mạch gói bao gồm các nút mạng (các Router và
switch) được kết nối với nhau bởi các đường truyền thơng có cấu trúc
giống một mạng lưới. Gói tin được truyền từ một nút mạng tới một nút
mạng khác có rất nhiều đường khác nhau. Tuy nhiên đường tốt nhất chỉ có
một và việc tìm được đường này phụ thuộc vào hàm mục tiêu mà người
điều hành mạng cố gắng tối ưu. Một thuật toán định tuyến phải biết toàn bộ
trạng thái về mạng khi mạng đang hoạt động.
Các tiêu chí chính để đánh giá một thuật toán định tuyến tốt trên
Router cũng phụ thuộc vào hàm mục tiêu mà con người cố gắng tối ưu. Tuy
nhiên, nói chung một thuật tốn định tuyến thường hướng tới một hoặc
nhiều hơn các mục đích sau:
1. Phân phát nhanh và chính xác các gói tin
2. Khả năng thích nghi với những thay đổi cấu hình mạng là kết quả từ
một nút hoặc một đường kết nối bị đứt
3. Thích nghi với việc thay đổi địa chỉ nguồn – đích tải lưu lượng
4. Khả năng gửi các gói tin ra khỏi các đường liên kết bị tắc tạm thời
5. Khả năng kiểm tra sự kết nối của mạng

6. Chi phí thấp

5


1.3 Bảng định tuyến
Router chuyển tiếp các gói tin dựa trên địa chỉ IP đích trong phần
Header của gói tin. Nó so sánh địa chỉ đích với bảng định tuyến để tìm ra
một lối khớp, lối này sẽ cho Router biết gói tin sẽ được chuyển đi đâu tiếp.
Nếu Router không khớp một lối nào trong bảng định tuyến và khơng có
đường mặc định nào thì nó sẽ hủy gói tin. Vì vậy, cần phải có một bảng
định tuyến đầy đủ và chính xác.
Một nút mạng hay một Router phải xem xét bảng định tuyến của
mình trước khi chuyển gói tin đến địa chỉ ở xa. Trong bảng, mỗi địa chỉ
đích được gán tương ứng với một địa chỉ Router cần đến ở chặng tiếp theo.
Mục đích
- Lưu trữ thơng tin về các mạng con khác trong mạng và cách để đến
được các nút mạng trong mạng đó.
- Chỉ ra địa chỉ IP nào trong bài toán định hướng tiếp theo để đến
được nút mạng đích.
- Chỉ ra giao diện mạng được sử dụng để chuyển gói tin tới đích.
Mỗi bảng định tuyến bao gồm rất nhiều thành phần. Trong phạm vi
đồ án ta giả sử đã có một bảng định tuyến như bảng 1.1, bao gồm các
trường sau:
Rule Name: tên của quy tắc
Prefix Name: tên tiền tố
Prefix: tiền tố được đưa ra bởi CIDR1
Next Hop: bước truyền tiếp theo
Ranges Start: giá trị bắt đầu của đoạn, khi coi một tiền tố là một đoạn
1


Classless Inter-Domain Routing

6


Ranges Finish: giá trị kết thúc của đoạn
Priority: trường ưu tiên, là giá trị để đánh giá độ ưu tiên của các nhóm
địa chỉ. Có nhiều cách để đánh giá độ ưu tiên cho các nhóm địa chỉ ví dụ
như dựa vào băng thông của mạng, dựa vào khoảng cách các vùng, dựa vào
chiều dài tiền tố…
Rule
Name

Prefix
Name

Ranges
Start

Ranges
Finish

Priority

R1

P1

*


N1

0

31

1

R2

P2

0101*

N2

10

11

4

R3

P3

100*

N3


16

19

3

R4

P4

1001*

N4

18

19

4

R5

P5

10111

N5

23


23

5

Prefix Next Hop

Bảng 1.1. Một bảng định tuyến với 5 quy tắc (W = 5)
Ta sử dụng W là ký hiệu chiều dài lớn nhất có thể của một tiền tố.
Trong IPv4, W = 32 và trong IPv6, W = 128. Trong bảng 1.1, với W = 5,
tiền tố P1 khớp với tất cả các địa chỉ đích, được gọi là default prefix. Tiền
tố P3 khớp với các địa chỉ từ 16 đến 19. Nếu một địa chỉ tiền tố của một
quy tắc khớp với địa chỉ đích của các gói tin đến, Next Hop của quy tắc này
sẽ được sử dụng để định hướng gói tin.
Khi một địa chỉ đích đến khớp với nhiều quy tắc trong bảng định
tuyến thì việc chọn một Next Hop nào đó phụ thuộc vào phương pháp khớp
tiền tố. Có ba biện pháp so khớp thơng dụng khác nhau:
Biện pháp khớp tiền tố đầu tiên, bảng quy tắc giả sử là một danh
sách tuyến tính của các luật với chỉ số từ 1 đến n, cho một bảng có n quy

7


tắc. Quy tắc đầu tiên khớp với gói tin đến được sử dụng để định tuyến gói
tin. Ví dụ khi địa chỉ đích đến là 19 thì Next Hop là N1, vì tiền tố * là tiền
tố đầu tiên khớp với địa chỉ 19. Nhận thấy quy tắc R1 khớp với tất cả các
địa chỉ đích. Tuy nhiên khi định tuyến tất cả các gói tin theo quy tắc R1 thì
kết quả việc định tuyến khó thể nói sẽ xảy ra điều gì. Do vậy đánh thứ tự
cho các quy tắc phải thay đổi để các quy tắc khác có thể được sử dụng, tiền
tố mặc định nên đặt ở cuối bảng quy tắc.

Trong khớp tiền tố có độ ưu tiên cao nhất, mỗi quy tắc được gán một
độ ưu tiên, và một quy tắc với độ ưu tiên cao nhất được chọn từ các quy tắc
khớp với gói tin đến (giả sử rằng các độ ưu tiên của các tiền tố khác nhau).
Biện pháp khớp đầu tiên là biện pháp đặc biệt của khớp có độ ưu tiên cao
nhất.
Khớp đặc trưng nhất, trong tất cả các tiền tố cùng khớp với địa chỉ
đích thì tiền tố nào đặc trưng nhất sẽ được chọn để định tuyến gói tin. Tiền
tố 110* đặc trưng hơn tiền tố 11*. Khi các tiền tố cùng khớp với một địa
chỉ đích d thì tiền tố đặc trưng nhất là tiền tố dài nhất 2 nên biện pháp khớp
đặc trưng nhất còn gọi là khớp tiền tố dài nhất.
Trong trường hợp bảng 1.1, các quy tắc P1, P3, P4 đều khớp với địa
chỉ 19. Với biện pháp này, quy tắc P4 được chọn.
1.3.1 Bảng định tuyến tĩnh
Là cách mà các quy tắc được đưa vào bảng định tuyến bằng tay.
Trong trường hợp này, gói tin vẫn được gửi đến đích mà khơng căn cứ vào
trạng thái của mạng. Đích có hoạt động hay khơng, các đường tĩnh vẫn giữ
nguyên trong bảng đầu ra, lưu lượng vẫn được gửi tới đích đã được xác
định trước.
2

Độ dài của một tiền tố là số bit trong tiền tố đó (khơng sử dụng đến kí tự * khi xác định độ dài). Với
bảng dữ liệu trên, độ dài của P1 là 0 và của P2 là 4.

8


Đặc điểm của bảng Router tĩnh:
1. Thời gian xử lý một gói tin đến: là thời gian cần thiết để tìm trên bảng
một quy tắc để sử dụng. Chúng ta thường gọi đây là phép tìm kiếm.
2. Thời gian tiền xử lý: là thời gian tạo cấu trúc dữ liệu cho bảng quy tắc.

3. Yêu cầu về bộ nhớ: dung lượng bộ nhớ cần thiết để cấu trúc lại bảng quy
tắc.
Đối với bảng tĩnh để thực hiện các thao tác cập nhật, người ta sử
dụng 2 bảng: bảng làm việc (working) và bảng phụ (shadow). Việc tìm
kiếm được thực hiện trên bảng làm việc còn việc cập nhật được thực hiện
trên bảng phụ (theo thời gian thực hoặc là cập nhật theo gói với khoảng
thời gian thích hợp). Sau một chu kỳ, bảng phụ sẽ được sao chép sang bảng
chính và bộ lưu trữ của bảng làm việc được xóa. Trong kiểu cập nhật này,
nhiều gói tin phân loại sai được định tuyến, do việc copy không được thực
hiện ngay lập tức. Số lượng các gói tin bị phân loại sai phụ thuộc vào chu
kỳ cập nhật của bảng làm việc. Do vậy cần giảm thời gian tiền xử lý để
giảm số gói tin đã phân loại bị định tuyến sai.
Hơn nữa, để cập nhật bảng tĩnh, phải thêm bộ nhớ cho bảng phụ và
cho việc xây dựng lại theo chu kỳ của bảng làm việc.
Qua các đặc điểm cơ bản của bảng định tuyến tĩnh, ta nhận thấy loại bảng
này có một số ưu nhược điểm nhất định. Việc cập nhật được thực hiện bằng
tay nên người quản trị có tồn quyền điều khiển thơng tin trong bảng định
tuyến. Tuy vậy, khi kích thước của mạng tăng lên 3, độ phức tạp của việc
cấu hình tăng lên. Bảng định tuyến kiểu này khơng có khả năng thích ứng
với mạng có cấu trúc thay đổi. Trên thực tế, loại bảng này rất ít được sử
dụng.
3

Giả sử một mạng có n Router thì cần phải cấu hình n*(n-1) câu lệnh trên tất cả các Router.

9


1.3.2 Bảng định tuyến động
Định tuyến động là quá trình mà trong đó giao thức định tuyến phải

tìm ra đường tốt nhất trong mạng và duy trì chúng. Gói tin có thể đến được
đích tùy thuộc vào sự tồn tại và trạng thái của mạng đó. Nếu một đích rời
khỏi mạng, đường đi tới đích đó sẽ bị mất đi trong bảng định tuyến, và gói
tin sẽ khơng được gửi tới đích đó.
Có rất nhiều cách để xây dựng bảng định tuyến động. Nhưng tất cả
đều thực hiện theo quy tắc chung sau: Router sẽ khám phá tất cả các tuyến
đường đến đích có thể và thực hiện một số quy tắc đã định trước để xác
định ra đường tốt nhất đến đích.
Trong một bảng quy tắc động, các quy tắc được chèn/xóa thường
xun. Kiểu bảng này khơng chèn/xóa theo từng khối, và việc chèn/xóa
được thực hiện trong thời gian thực.
Đầu tiên, việc cập nhật được thực hiện thường xuyên trong vùng
Backbone. Bảng định tuyến cần phải cập nhật để phản ánh sự thay đổi của
Router. Tốc độ cập nhật đạt tới 1000 trên giây [Labovitz]. Mạng sẽ cập
nhật các lỗi phát sinh từ một Router bị hỏng, Router chỉnh sửa.
Thứ hai, một tiến trình cập nhật nhanh được ưu tiên hơn vì trong quá
trình cấu trúc lại, thời gian trễ từ điểm này sang điểm khác tăng lên, số gói
tin bị mất tăng lên đột ngột và một phần kết nối mạng bị lỗi.
Với bảng định tuyến động, ta nên nhắc đến thời gian cần để chèn/xóa
một quy tắc. Trong bảng quy tắc động, ban đầu cấu trúc dữ liệu được khởi
tạo với một cấu trúc dữ liệu tĩnh và sau đó chèn từng quy tắc một.
Các đặc điểm của bảng định tuyến động:
1. Thời gian tìm kiếm địa chỉ tiền tố trong bảng

10


2. Thời gian chèn. Thời gian cần để chèn một quy tắc mới vào bảng
3. Thời gian xóa. Thời gian để xóa một quy tắc từ bảng.


4. Yêu cầu bộ nhớ
Bảng định tuyến động chỉ làm việc trên một bảng làm việc và sự cập
nhật được làm trực tiếp trên bảng đó trong thời gian thực. Trong kiểu cập
nhật này, khơng gói tin nào được phân lớp khơng thích hợp. Tuy nhiên,
việc phân lớp và chuyển tiếp gói tin có khi bị trễ cho đến khi tiến trình cập
nhật hồn thành. Để giảm thiểu thời gian trễ này, việc cập nhật phải thực
hiện nhanh.
Với kiểu bảng động, yêu cầu xử lý của CPU của Router cao hơn kiểu
bảng tĩnh. Tuy nhiên, việc cấu hình và tự động tìm ra những tuyến đường
thay thế nếu như mạng thay đổi lại đơn giản hơn rất nhiều.
Ngày nay, số lượng các hệ thống tự trị đang tiếp tục tăng lên, đó là lý
do đòi hỏi việc tăng tốc độ cập nhật của các bảng định tuyến động. Trong
phạm vi đồ án, ta xây dựng một cấu trúc và giải thuật cho bảng định tuyến
động để giảm thời gian cập nhật của bảng.
Kết luận chương 1
Trong chương 1, ta đã nghiên cứu một thiết bị định tuyến rất thơng
dụng đó là Router, chức năng, và hoạt động của nó. Định tuyến trên
Internet là gì, các kiểu định tuyến. Thuật toán định tuyến và các tiêu chí để
đánh giá một thuật tốn định tuyến tốt. Nội dung quan trọng nhất của
chương này nghiên cứu về bảng định tuyến, trong đó bảng định tuyến động
với các ưu điểm của nó và sự cần thiết phải tăng tốc độ cập nhật của bảng
định tuyến.

11


Tuy nhiên, do phạm vi nghiên cứu đồ án hạn chế, nên các phần được
trình bày trong chương chỉ là những nội dung cơ bản nhất. Cho nên ta cần
phải tiếp tục nghiên cứu mở rộng kiến thức về nội dung này.


12


Chương 2. CÂY TÌM KIẾM ƯU TIÊN
Trong chương này ta nghiên cứu cấu trúc cây tìm kiếm ưu tiên
(PST4) và cây đỏ đen. Cây tìm kiếm ưu tiên là một cấu trúc cây phức tạp là
sự kết hợp của cây nhị phân tìm kiếm và hàng đợi ưu tiên. Nghĩa là cây
phải thỏa mãn các tính chất của một cây nhị phân tìm kiếm và các tính chất
của hàng đợi ưu tiên. Cây được sử dụng trong cấu trúc bảng định tuyến
động với các đoạn địa chỉ.
Cây tìm kiếm ưu tiên là sự kết hợp của cây nhị phân tìm kiếm và
hàng đợi ưu tiên. Các đặc điểm của cây như sau:
- Các khóa (Keys) là cặp có thứ tự (xi, yi).
- Cây được xây dựng min theo giá trị y (ở gốc giá trị của y là nhỏ
nhất)
- Thao tác tìm kiếm chủ yếu theo giá trị x.
Cây tìm kiếm ưu tiên có hai kiểu khác nhau:
(1) Cây tìm kiếm là một cây tìm kiếm nhị phân cân bằng: Red-black
Priority Search Tree (RBPST)
(2) Cây tìm kiếm là cây tìm kiếm theo cơ số gọi là cây Radix Priority
Search Tree (RPST)
2.1 Radix Priority Search Tree
Cây tìm kiếm ưu tiên được giới thiệu đầu tiên bởi E.McCreight năm
1985 với các đặc điểm như sau.
2.1.1 Tính chất cây
- Các giá trị của x khác nhau và thuộc đoạn [0, k - 1]
- Mỗi nút của cây tìm kiếm ưu tiên có đúng 1 phần tử
4

Priority search tree (PST)


13


- Giá trị y của nút w phải nhỏ hơn hoặc bằng giá trị y của các nút con
của w (cây được định nghĩa theo giá trị min ở gốc)
- Khoảng của nút gốc w là [a, b)
- Khoảng của nút con trái là [a, floor((a+b)/2))
- Khoảng của nút con phải là [floor((s+b)/2), b)
2.1.2 Xây dựng một cây
Cho S là tập hợp các điểm (xi, yj). Ta sắp xếp các điểm theo thứ tự
tọa độ x tăng dần từ trái sang phải, tọa độ y tăng dần từ dưới lên trên.
Thuật tốn tạo một cây RPST:
• Nếu S là rỗng, trả về con trỏ rỗng và kết thúc
• Điểm P ∈ S, P có tọa độ y nhỏ nhất sẽ trở thành nút gốc R.
• Nếu S – P = ∅ thì R là một nút lá; trả về R và kết thúc
• X(P) = floor((xmin + xmax ) / 2) (với xmin , xmax là khoảng của nút P) là
giá trị chia các điểm trong (S – P) thành hai phần: phần có tọa độ x
nhỏ hơn X(P) và phần có tọa độ x lớn hơn X(P).
• Lặp việc tạo cây ưu tiên trên các điểm có thành phần x < = X(P) với
gốc là nút con trái của R
• Lặp việc tạo cây ưu tiên trên các điểm có thành phần x > X(P) với
gốc là nút con phải của R
Ví dụ: Cho S = {F(-1, 9), N(1, 8), A(15, 7), I(-2, 5), H(7, 6), J(2, 3), G(6,
4), B(16, 2), K(4, 6), C(12, 1), E(10, -2), D(14, -1), M(9, -3)}
Sau đây ta minh họa các bước xây dựng một cây RPST từ tập S.
Lặp 1:

14



Lặp 2:

Lặp 3:

15


Lặp 4:

Cây hoàn chỉnh:

16


Hình 2.1. Các bước xây dựng một cây RPST
Ánh xạ cây vừa xây dựng qua trục hoành, thêm chỉ số đoạn, bỏ trục
tọa độ ta có được cách biểu diễn cây thơng thường như sau:

Hình 2.2. Cây RPST
2.1.3 Chèn một nút vào cây RPST
Thuật toán chèn nút P(x, y) vào trong cây có nút gốc R.
• Nếu y < R(y) chèn nút P vào vị trí nút gốc. Nút P gán bằng nút gốc.

17


o Nếu P(x) thuộc khoảng [a, (floor(a+b)/2)) thực hiện thuật toán
chèn nút P trên cây con trái, nếu P(x) thuộc [floor((a+b)/2), b)
thực hiện thuật tốn chèn trên cây con phải.

• Nếu y > R(y)
o P(x) thuộc khoảng [a, (floor(a+b)/2)) tiếp tục đi xuống và so
sánh P với các nút trên cây con trái
o P(x) thuộc [floor((a+b)/2), b) tiếp tục đi xuống và so sánh P
với các nút trên cây con phải.
Ví dụ: khi chèn (7, 1) ta thực hiện như sau:
[0, 16)

[0, 8)

5,
8

[0, 16)
7,1
[0, 8)
6,
9

6,
9

7,
1
5,
8

S
7,
1


[0, 8)
5,
8

[4, 8)
6,
9

Hình 2.3. Chèn một nút vào cây RPST
• Insert (7,1).
• (7,1) sẽ thay thế cặp khóa ở gốc, vì 1 < 8.
• (5,8) được đẩy xuống con trái,vì 5 thuộc khoảng của nút con trái.

18


• (5,8) sẽ thay thế vào vị trí của (6,9), vì 8 < 9.
• (6,9) được đẩy xuống nút con phải của (5,8), vì 6 thuộc khoảng của
nút con phải và 8 < 9.
Thời gian thực hiện chèn một nút mất O(h), với h là chiều cao cây
tìm kiếm nhị phân.
2.1.4 Xóa một nút khỏi cây RPST
Tương tự phép xóa trong min heap. Thuật tốn như sau:
• Nếu nút bị xóa là nút lá, xóa nút kết thúc
• Nếu nút bị xóa khơng là nút lá, xóa nút và chọn nút con có thành
phần y nhỏ hơn lên thay thế
Ví dụ: xóa nút (5, 8) khỏi cây
[0, 16)


[0, 16)
7,
1

[0, 8)
5,
8

[0, 4)

11,
5
[4, 8)

2,12

[0, 8)

[8, 16)

6,
9
[0, 4)

7,
1

[8, 16)
11,
5


2,12

6,
9

Hình 2.4. Xóa một nút từ cây RPST
Thời gian thực hiện xóa một nút mất O(h), với h là chiều cao cây tìm
kiếm nhị phân.

2.2 Red-Black Priority Search Tree

19


Red – Black Priority Search Tree hay còn gọi là cây tìm kiếm ưu tiên
động được giới thiệu bởi Professor Robert Tamassia [5, tr.65]. Sau đây ta
đi nghiên cứu phương pháp tổng quát để xây dựng và duy trì một cây PST
động.
 Sử dụng phương pháp bottom – up kết hợp với quy tắc trận đấu để xây
dựng cây.
 Áp dụng tính chất cây đỏ đen [2, tr.239] để tơ màu cho các nút của
cây.
 Thủ tục chèn/xóa một nút trong cây, trong đó sử dụng phép quay để
duy trì sự cân bằng của cây.
2.2.1 Tính chất cây
Một cây PST có thể được xây dựng hiệu quả khi sử dụng cách xây
dựng bottom-up giống như cách đã sử dụng để xây dựng heap cũng như các
cây nhị phân. Khi xây dựng một cây PST bằng cách bottom-up, bước đầu
tiên tạo tất cả các điểm lá, và sắp xếp chúng theo thứ tự tăng dần của giá trị

x. Sau đó cây được kiến trúc dùng nguyên tắc thi đấu giống như cách xây
dựng một cây thi đấu. Để minh họa cho cách xây dựng cây, ta đi xây dựng
một cây tìm kiếm ưu tiên theo giá trị max ở gốc.
Bước 1: Áp dụng quy tắc trận đấu để xây dựng cây
Trong một trận đấu gồm có hai điểm, điểm có giá trị y lớn hơn sẽ
thắng cuộc và trở thành nút gốc của một cây con. Ở vòng tiếp theo, các
điểm thắng cuộc ở bước trước sẽ thi đấu từng cặp với nhau để tìm ra người
thắng cuộc, người thắng cuộc của bước sau cùng sẽ giành vị trí tại nút gốc
của cây. Các điểm thắng cuộc để lại một nút rỗng bên cạnh, và các nút này
được lấp đầy bởi các điểm bị thua cuộc ở bước ngay trước đó. Việc lấp đầy
này sẽ dẫn đến nút khác bị rỗng, tiến trình lại được tiếp tục cho đến khi

20


khơng cịn các điểm có thể lấp vào các nút. Khi một điểm được đứng ở một
nút trong trên cây, nút lá cho điểm này tạo thành một chỗ đứng 5. Sau khi
cây đã được xây dựng xong, có N – 1 nút lá được tạo thành chỗ đứng (với
N là số điểm trong tập dữ liệu). Các nút lá luôn được sắp xếp tăng dần theo
giá trị x của các điểm.
Bước 2: Áp dụng tính chất cây đỏ đen để tô màu cho các nút
Sau khi các điểm được đặt vào đúng vị trí các nút, ta tơ màu cho các
nút giống như quy tắc tô màu cho cây đỏ đen.
Hình 2.5 minh họa tiến trình xây dựng sử dụng một ví dụ nhỏ gồm 8
nút.
Thuật tốn xây dựng cây RBPST
1. Sắp xếp các điểm theo giá trị x tăng dần.
2. Trận đấu bắt đầu với các cặp điểm, các điểm có y cao hơn sẽ thắng
cuộc.
3. Khi một điểm thắng ở vòng thi đấu cao hơn, điểm bị thua ở vòng

trước sẽ di chuyển lên và lấp đầy nút rỗng.
4. Khi cây xây dựng xong, n-1 nút lá trở thành các vị trí đứng.
5. Tơ màu các nút.
Xây dựng cây theo cách này thực hiện trong thời gian là O(N). Tuy
nhiên, bước đầu tiên trong tiến trình sắp xếp các điểm thực hiện mất O(N
logN) thời gian, toàn bộ tiến trình xây dựng cây mất O(N logN) thời gian.

5

placehodler

21


Hình 2.5. Xây dựng cây RBPST sử dụng quy tắc trận đấu từ dưới lên
Như ta đã biết một cây đỏ đen là một cây tìm kiếm nhị phân đặc biệt,
với thuộc tính màu của các nút và tính chất độ dài đường đi tới một nút lá
nên dùng cây đỏ đen khi lưu trữ thông tin rất hiệu quả. Vì một cây đỏ đen
cho phép chèn/xóa các phần tử nhanh chóng. Đây cũng là lý do ta sử dụng
phương pháp tô màu của cây đỏ đen cho cây PST. Các tiến trình này được
trình bày trong phần sau.
2.2.2 Chèn một nút vào cây RBPST
Để chèn một nút mới vào cây PST động gồm 3 bước sau:
1) Thêm một nút lá sau này sẽ là một vị trí đứng cho nút mới.

22


2) Đẩy nút mới đi xuống cây, bắt đầu tại nút gốc.
3) Cân bằng lại cây nếu cần thiết.

Khi các nút lá của cây được sắp xếp theo giá trị x tăng dần, thì vị trí
đứng cho nút mới khi thêm vào phải hiệu chỉnh theo thứ tự này. Để tìm vị
trí đó, tiến trình bắt đầu tại nút gốc và lặp lại với các cây con bằng cách so
sánh giá trị x của nút mới và giá trị x của nút gốc của cây con đang xét.
Nếu nút mới có giá trị x lớn hơn giá trị phân chia của nút gốc 6, tiến trình sẽ
đi xuống cây con bên phải. Nếu nhỏ hơn, tiến trình lặp với cây con trái.
Cây đầu tiên trong hình 2.6 minh họa tiến trình này.
Kết thúc việc hiệu chỉnh một vị trí đứng của nút lá được tìm thấy và
nút lá được lưu trong vị trí đó phải được thay thế bởi một nút trong rỗng.
Nút lá cho điểm mới và nút lá vừa bị thay thế sẽ trở thành hai nút con của
nút mới vừa sinh ra. Hình 2.6 ở cây thứ 2, điểm chèn vào là c’, nút bị thay
thế là nút có khóa là d. Vị trí đứng của c’ ở bên phải d vì tọa độ x của c’ lớn
hơn d. Hai nút lá củ d và c’ trở thành nút lá của một nút đỏ mới thêm vào.
Sau khi một vị trí đứng và một nút trong mới được thêm vào trong
cây, là thời gian tìm vị trí chính xác của điểm mới chèn vào trong cây. Để
tìm vị trí này, dùng phương thức push-down. Phương thức này bắt đầu từ
nút gốc, và giá trị y của nút gốc và nút mới được so sánh với nhau. Nếu nút
mới có giá trị y nhỏ hơn giá trị y của nút gốc, phương thức push-down
được tiếp tục hiệu chính trên cây con bên phải hoặc bên trái. Việc chọn cây
con nào được quyết định bằng cách so sánh giá trị x của nút mới với giá trị
phân chia của nút gốc (như phần hiệu chỉnh vị trí đứng cho điểm mới chèn
vào). Nếu giá trị y của nút mới lớn hơn giá trị y của nút gốc thì hốn đổi
nút mới và nút gốc đó (khóa của nút gốc là giá trị của điểm mới, khóa nút
mới sẽ là khóa của nút gốc), phương thức push-down lại tiếp tục với nút
6

split line

23



gốc vừa bị hoán đổi giống như một nút mới. Tiến trình tiếp tục được lặp lại
cho đến khi tất cả các điểm được đặt vào các nút. Cây thứ 3 trong hình
trong hình 2.6 minh họa tiến trình này.

Hình 2.6. Chèn một nút vào cây RBPST
Khi một nút mới được chèn vào, dẫn đến tất cả các giá trị phân chia
phải được cập nhật lại. Giá trị phân chia của một nút được xác định là một
nửa giá trị x của nút con phải nhất trong cây con trái và nút con trái nhất
trong cây con phải. Khi một nút con mới được chèn vào, điều kiện này có
thể bị thay đổi, và do vậy việc cập nhật là cần thiết.

24


Sau phép chèn, nếu một tính chất bất kỳ nào của cây đỏ đen bị vi
phạm thì cây sẽ phải cân bằng lại. Hình 2.6 khơng có trường hợp nào bị vi
phạm. Nhưng trong hình 2.7 thì bị vi phạm và phải xây dựng lại.
Một nút mới chèn vào một cây đỏ đen thì ln được tơ màu đỏ, và
quy tắc có cùng số nút đen trên bất kỳ đường nào từ nút gốc tới một nút lá
không xảy ra. Quy tắc khơng có nút đỏ nào có một nút con đỏ (một nút đỏ
phải có hai nút con đen), ta có thể dễ dàng nhận thấy quy tắc này bị vi
phạm khi chèn một nút đỏ và ta gọi đây là lỗi đỏ-đỏ. Khi lỗi đỏ-đỏ xuất
hiện, màu sắc của các nút gần kề quyết định việc làm tiếp theo. Nếu cả nút
cha và nút chú là nút đỏ, sửa lại màu của nút cha và nút chú thành màu đen,
nút ơng thành màu đỏ. Việc này lại có thể dẫn đến nút ông lại vi phạm lỗi
đỏ - đỏ với cha của nó. Nếu trường hợp này xảy ra, tiến trình sẽ được lặp.
Nếu chỉ có nút cha màu đỏ, và nút chú đen, thực hiện một phép quay.
Hình 2.7 minh họa các trường hợp vi phạm tính chất cây đỏ đen khi
chèn nút mới vào cây.

Từ cây trong hình 2.5 ta chèn các điểm c’ và c’’ và khơng có tính
chất nào bị vi phạm. Bước tiếp theo chèn nút c’’’ vào cây. Vị trí đứng của
nút c’’’ được đặt giữa các nút c’’ và d, và nút c’’’ ở nút con bên phải của
c’’. Từ hình minh họa (cây thứ 2 hình 2.7) ta thấy vi phạm quy tắc đỏ-đỏ
của c’’’ và c’’, Cả nút cha (c’’) và nút chú (d) đều là màu đỏ trong trường
hợp này các nút c’’, d và c phải được tô màu lại. Khi tô màu lại các nút
xong (cây thứ 3 hình 2.7) dẫn đến việc vi phạm quy tắc đỏ-đỏ của nút ông
c và nút cha c’’. Và chỉ có nút cha màu đỏ, nút chú a màu đen, cho nên phải
thực hiện phép quay hai nút c và c’.

25


×