Để khắc phục nhược điểm vừa nêu ừên đối với tìm kiếm nhị phân và đápứng yêu cầu tìm kiêm đối với bảng biến động, một phương pháp mới được hìnhthành dựa trên cơ sở bảng được tổ chức dưới
Trang 2Chuyên ngành: Khoa học máy tính
Người hướng dẫn khoa học PGS TS BÙI THẾ HỒNG
Trang 3LỜI CẢM ƠN
Lời đầu tiên em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy giáoPGS TS Bùi Thế Hồng, đã trực tiếp hướng dẫn và chỉ bảo tận tình cho em hoànthành khóa luận này
Em cũng xin chân thảnh cảm ơn các thầy, cô giáo trong khoa Công nghệthông tin, cũng như các thầy, cô giáo trong trường đã giảng dạy và giúp đỡ emtrong các năm học vừa qua Chính các thày, cô giáo đã xây dựng cho chúng emnhững kiến thức nền tảng và kiến thức chuyên môn để em có thể hoàn thành khóaluận tốt nghiệp và chuẩn bị cho những công việc của mình sau này
Cuối cùng em xin bày tỏ lòng biết ơn tới gia đình và bạn bè đã giúp đỡ độngviên em rất nhiều trong suốt quá trình học tập để em có thể thực hiện tốt khóaluận này
Do kiến thức và thời gian còn hạn chế nên khóa luận không tránh khỏinhững thiếu sót Kính mong nhận được sự đóng góp ý kiến của các thầy, cô giáo
và các bạn để khóa luận được hoàn thiện hơn
Hà Nội, tháng 05 năm 2015 Sinh viên
Trần Thị Sim
Trang 4LỜI CAM ĐOAN
Tên em là: Trần Thị Sim
Sinh viên lớp: K37A - CNTT, khoa Công nghệ thông tin, trường Đại học sư phạm Hà Nội 2
Em xin cam đoan:
1 Đề tài “Xây dựng chương trình mô phỏng các thuật toán cơ bản trên
cây đỏ đen ” là sự nghiên cứu của riêng em, dưới sự hướng dẫn của thầy giáo PGS.TS Bùi Thế Hồng
2 Khóa luận hoàn toàn không sao chép của tác giả nào khác
Nếu sai em xin hoàn toàn chiu trách nhiệm
Hà Nội, tháng 05 năm 2015 Người cam đoan
Trần Thỉ Sim
Trang 5LỜI CAM ĐOAN MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1 CẦY NHỊ PHÂN TÌM KIẾM 4
1.1 Định nghĩa 4
1.2 Cây nhị phân 5
1.3 Cây nhị phân tìm kiếm 10
1.4 Giải thuật tìm kiếm 11
1.4.1 Tìm một node trên cây tìm kiếm 11
1.4.2 Xóa một nút ừên cây tìm kiếm 13
1.4.3 Thêm một nút trên cây tìm kiếm 16
CHƯƠNG 2 CÂY ĐỎ ĐEN 21
2.1 Giới thiệu 21
2.2 Định nghĩa 22
2.3 Tính chất 23
2.4 Tính hiệu quả của cây đỏ đen 25
2.5 Các thuật toán cơ bản trên cây đỏ đen 25
2.5.1 Thêm một nút mới 25
2.5.2 Xóa một nút 33
2.5.3 Tìm kiếm một nút 37
CHƯƠNG 3 XÂY DựNG CHƯƠNG TRÌNH MÔ PHỎNG 38
Trang 6LỜI CAM ĐOAN
3.1 Phát biểu bài toán 38
3.2 Xây dựng chương trình mô phỏng 39
3.2.1 Khởi tạo cây 39
3.2.2 Xoay trái X 39
3.2.3 Xoay phải X 40
3.2.4 Thêm nút X vào cây 41
3.2.5 Cấp phát và thêm nút vào cây 41
3.2.6 Xóa một nút X vào cây 42
3.2.7 Tìm nút X 44
3.3 Thiết kế giao diện 44
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 46
TÀI LIỆU THAM KHẢO 48
DANH MỤC HÌNH • 1.1 Hình ảnh một cây
1.2 Cây nhị phân
1.3 Cây nhị phân không có thứ tự
1.4 Cây nhị phân lệch
1.5 Cây zíc-zắc
1.6 Cây nhị phân hoản chỉnh
1.7 Cây nhị phân đầy đủ
1.8 Cây nhị phân gần đầy
1.9 Cây nhị phân tìm kiếm
Trang 7LỜI CAM ĐOAN
1.10 Tìm nút trên cây với
khóa x=55
1.11 Xóa nút trên cây với khóa X =40
1.12 Xóa một nút trên cây với khóa X = 37
1.13 Xóa một nút với khóa X = 18
1.14 Thêm một nút với khóa X = 10 vào cây
1.15 Cây nhị phân ban đầu 1.16 Thêm nút có khóa X = 7 1.17 Tái cân bằng lại cây khi thêm nút với khóa X = 7
2.1 Các nút được chèn theo thứ tự tăng dần
2.2 Ví dụ về cây đỏ đen
2.3 Lật màu
2.4 Các biến dạng của nút khi được chèn với X là cháu ngoại 2.5 Các biến dạng của nút khi được chèn với X là cháu nội
2.6 Các khả năng khi chèn nút
2.7 Nút p đỏ và X là cháu ngoại
2.8 p đỏ và X là nút cháu nội
2.9 Minh họa trường họp 2
Trang 8LỜI CAM ĐOAN
2.10 Minh họa trường hợp 3
2.11 Minh họa trường hợp 4
Hình 2.12 Minh họa trường hợp 5 36
Hình 2.13 Minh họa trường hợp 6 37
Hình 3.1 From giao diện chính của chương trình 44
Hình 3.2 From chức năng chèn một phần tử 45
Hình 3.3 From chức năng xóa một phần tử 45
Hình 3.4 From chức năng tìm một phần tử 45
MỞ ĐÀU
1 Lý do chọn đề tài
Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu ừong máy tính sao cho nó có thể được sử dụng một cách hiệu quả Thông thường, một cấu trúc dữ liệu được chọn cẩn thận sẽ cho phép thực hiện thuật toán hiệu quả hom Việc chọn cấu trúc dữ liệu thường bắt đầu từ việc chọn một cấu trúc dữ liệu trừu tượng Một cấu trúc dữ liệu được thiết kế tốt cho phép thực hiện nhiều phép toán, sử dụng càng ít tài nguyên, thời gian xử lý và không gian bộ nhớ tốt
Tìm kiếm là một đòi hỏi rất thường xuyên trong đời sống hàng ngày cũng như trong xử lý tin học vấn đề tìm kiếm xét một cách tổng quát, có thể hiểu là tìm một đối tượng thỏa mãn một số đòi hỏi nào đó, trong một tập rộng lớn các đối tượng
Có nhiều phương pháp tìm kiếm cơ bản và phổ biến, đối với dữ liệu ở bộ nhớ trong nghĩa là tìm kiếm trong, đối với dữ liệu ở bộ nhớ ngoài là tìm kiếm ngoài Đối với tìm kiếm trong, tìm kiếm nhị phân là một phương pháp khá thông dụng, chi phí ít, đạt kết quả tốt Tuy nhiên, khi sử dụng tìm kiếm nhị phân, dãy khóa đã phải sắp xếp rồi, nghĩa là thời gian chi phí cho sắp xếp cũng phải kể đến
Trang 9LỜI CAM ĐOAN
Nếu dãy khóa luôn biến động thì lúc đó chi phí cho sắp xếp lại nổi lên rất rõ vàchính điều ấy bộc lộ nhược điểm của phương pháp này
Để khắc phục nhược điểm vừa nêu ừên đối với tìm kiếm nhị phân và đápứng yêu cầu tìm kiêm đối với bảng biến động, một phương pháp mới được hìnhthành dựa trên cơ sở bảng được tổ chức dưới dạng cây nhị phân mà ta gọi là câynhị phân tìm kiếm
Trong đó cây đỏ đen là một cấu trúc dữ liệu hay, cùng với cây nhị phân tìmkiếm là những cấu trúc dữ liệu có điểm mạnh trong việc lưu trữ và tìm kiếm dữliệu Song cây đỏ đen với đặc tính tái cân bằng lại cây đã tạo nên sự khác biệt chophương pháp này Chính vĩ vậy em đã chọn đề tài: “Xây dựng chương trình môphỏng các thuật toán cơ bản trên cây đỏ đen” để làm khóa luận
2 Mục đích của đề tài
Đề tài nhằm nghiên cứu lý thuyết về cây đỏ đen, một dạng cây tìm kiếm nhịphân tự cân bằng để thấy được những điểm mạnh của kiểu cấu trúc dữ liệu này.Trên cơ sở thực hiện mô phỏng các phép toán chèn, xóa, tìm kiếm trên cây đỏđen, đề tài nhằm khẳng định những tính chất, và việc sử dụng cấu trúc dữ liệu cây
đỏ đen vào việc lưu trữ dữ liệu và thực hiện tìm kiếm ừong bài toán tìm kiếm làviệc nên làm
3 Nhiệm vụ nghiên cứu
Nghiên cứu và làm rõ những khái niệm, tính chất về cấu trúc dữ liệu cây,cây nhị phân, cây nhị phân tìm kiếm Trên cơ sở đó xây dựng cấu trúc cây đỏđen
Nghiên cứu các phép toán chèn, xóa, tìm kiếm trên cấu trúc dữ liệu cây đỏđen, đánh giá chúng so với cây nhị phân tìm kiếm
Mô phỏng các phép toán chèn, xóa, tìm kiếm một node trên cây đỏ đen
Trang 10LỜI CAM ĐOAN
4 Đổi tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu: Cây đỏ đen
Phạm vi nghiên cứu: Các phép chèn, xóa, tìm kiếm các node trên cây đỏđen
5 Ý nghĩa khoa học và thực tiễn
Ỷ nghĩa khoa học: Cây đỏ đen ra đời, phát triển và có cơ sở khoa học vững
chắc đã giúp cho việc nghiên cứu chứng minh được việc sử dụng phương phápcây đỏ đen vào việc lưu trữ dữ liệu và thực hiện việc tìm kiếm trong bài toán tìmkiếm là việc nên làm Hiện nay, việc làm thế nào để giảm thiểu chi phí tìm kiếm
là một lĩnh vực đang được các chuyên gia nghiên cứu và phát triển
Ý nghĩa thực tiễn: Chương trình thử nghiệm nếu thành công sẽ biết được
hình dạng của cây phát triển như thế nào và đó là một cây nhị phân tìm kiếm cânbằng từ đó giảm thiểu chi phí tìm kiếm dữ liệu đối với dữ liệu trong một danhsách tuyến tính
6 Phương pháp nghiên cứu
+ Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ
sở lý thuyết của khóa luận và các biện pháp cần thiết để giải quyết các vấn đề củakhóa luận
+ Phương pháp chuyên gia
Tham khảo ý kiến của các chuyên gia để có thể thiết kế chương trĩnh phù hợpvới yêu cầu thực tiễn Nội dung xử lý nhanh đáp ứng được yêu cầu ngày càng caocủa người sử dụng
+ Phương pháp thực nghiệm
Trang 11LỜI CAM ĐOAN
Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được nghiêncứu và kết quả đạt được qua những phương pháp trên
7 Cấu trúc khóa ỉuân
Ngoài lòi cảm ơn, mở đầu, kết luận và hướng phát triển, tài liệu tham khảo,khóa luận được chia thành 3 chương:
Chương 1: Cây nhị phân tìm kiếm - Chương này giới thiệu tổng quan về cây,khái niệm và các tính chất của cây, cây nhị phân, cây nhị phân tìm kiếm và cácgiải thuật tìm kiếm, các thao tác chèn và xóa, tìm kiếm trên cây nhị phân tìmkiếm, tính chất của cây nhị phân tìm kiếm
Chương 2: Cây đỏ đen - Chương này trình bày về khái niệm, tính chất cây đỏ
đen, các phép toán chèn, xóa, tìm kiếm trên cây đỏ đen, những hiệu quả khi sửdụng cây đỏ đen
Chương 3: Xây dựng chương trình mô phỏng - Chương này phát biểu về bài
toán cây đỏ đen và chương trình mô phỏng các thuật toán chèn, xóa, thêm nodeừên cây đỏ đen
CHƯƠNG 1 CÂY NHỊ PHÂN TÌM KIỂM
1.1 Định nghĩa
Cây là một cấu trúc dữ liệu có vai trò quan trọng ừong việc phân tích vàthiết kế các thuật toán Lưu trữ và biểu diễn kiểu cây có thể thấy trong nhiều lĩnhvực của cuộc sống Ví dụ một cuốn gia phả lưu thông tin về các thành viên trongmột dòng họ, trong đó các thành viên thứ bậc khác nhau được phân thành các cấpkhác nhau trong biểu diễn hình cây gia phả Sơ đồ tổ chức của 1 đơn vị cũngthường được biểu diễn thông qua một cấu trúc cây Các đơn vị con nằm ở cấpdưới đơn vị trực tiếp quản lý Các đơn vị ngang hàng nằm cùng cấp Trong lĩnhvực máy tính, cách lưu trữ dữ liệu của hệ điều hành cũng áp dụng kiểu lưu trữ
Trang 12LỜI CAM ĐOAN
cây Các tệp tin được lưu trữ trong các cây thư mục, trong đó các thư mục connằm trong thư mục cha.Cây có thể được định nghĩa như sau:
Cây là một tập hợp các nút (các đinh) và các cạnh, thỏa mãn một số yêucàu nào đó Mỗi nút của cây đều có một định danh và có thể mang thông tin nào
đó Các cạnh dùng để liên kết các nút với nhau Một đường đi trong cây là mộtdanh sách các đinh phân biệt mà đỉnh trước có liên kết với đinh sau
Một tính chất quan trọng hình thành nên cây, đó là có đúng một đường đinối hai nút bất kì trong cây Nếu tồn tại hai nút trong cây mà có ít hoặc nhiều hơnmột đường đi thì lúc đó có một đồ thị
Mỗi cây thường có một nút được gọi là nút gốc Mỗi nút đều có thể coi lànút gốc của cây con bao gồm chính nó và các nút bên dưới nó Trong biểu diễnhình học của cây, nút gốc thường nằm ở vị trí cao nhất, tiếp theo là các nút kếtiếp
Hình 1.1 Hình ảnh một cây Như vậy có thể thấy rằng cây bao gồm gốc và các cây con nối với gốc Qua đó, có thể định nghĩa cây dưới dạng đệ qui như sau Cây có thể là:
+ Một nút đứng riêng lẻ (và nó chính là gốc của cây)
Trang 13LỜI CAM ĐOAN
+ Hoặc một nút kết họp với một số cây con bên dưới
Mỗi nút trong một cây (trừ nút gốc) có đúng 1 nút nằm trên nó, gọi là nútcha (parent) Các nút nằm ngay dưới nút đó được gọi là nút con (subnode) Cácnút nằm cùng cấp được gọi là các nút anh em (sibling) Nút không có nút con nàođược gọi là nút lá (leaf) hoặc nút tận cùng
Chiều cao của nút là đường đi dài nhất từ nút tới nút lá Chiều cao của câychính là chiều cao của nút gốc Độ sâu của 1 nút là độ dài đường đi duy nhất giữanút gốc và nút đó
1.2 Cây nhị phân
Cây nhị phân là một dạng quan trọng của cấu trúc cây Cây nhị phân cócác đặc điểm là: Mọi nút trên cây chỉ có tối đa là 2 nút con Đối với mỗi cây concủa mỗi nút thì phân biêt cây con trái và cây con phải
Hình 1.2 Cây nhị phân Cây nhị phân là loại cây có cấu trúc đơn giản và có nhiều ứng dụng trong tin học Các cây nhị phân sau đây làkhác nhau, xong chúng đều là cây nhị phân không có thứ tự
Trang 14Hình 1.3 Cây nhị phân không có thứ tự
Trang 15a) Cây lệch trái b) Cây lệch phải
Trang 16Hình 1.6 Cây nhị phân hoản chỉnh
Hình 1.8 Cây nhị phân gần đầyHình 1.7 Cây nhị phân đày đủ
Trang 171 0
Các hình trên là một số dạng đặc biệt của cây nhị phân Các cây nhị phân hình 1.4 được gọi là cây nhị phân suy biến vì thực chất nó có dạng của một danh sách tuyến tính
Cây nhị phân hình 1.5 được gọi là cây nhị phân hoàn chỉnh Các nút ứngvới các mức trừ mức cuối cùng đều đạt tối đa và mức cuối cùng các nút đều dạt
về ừái
Cây nhị phân hình 1.6 có các nút tối đa ở cả mọi mức nên còn gọi là câynhị phân đầy đủ Cây nhị phân đày đủ là một trường hợp đặc biệt của cây nhịphân hoàn chinh
Cây nhị phân hình 1.7 là cây gần đầy, khác với cây (hình 1.6) ở chỗ các nút
ở mức cuối không dạt về phía trái
Cây nhị phân có một số tính chất sau:
+ Trong các phân cây nhị phân cùng có số lượng nút như nhau thì câynhị phân suy biến có chiều cao lơn nhất, cây có nhị phân hoàn chỉnhhoặc cây nhị phân gàn đây có chiều cao nhỏ nhất, loại cây này cũng làcây có dạng “cân đối” nhất
+ Số lượng tối đa các nút ở mức i trên cây nhị phân là 2i_1, tối thiểu là 1(i>l)
+ Số lượng tối đa các nút trên cây một cây nhị phân có chiều cao là 2h-l,tối thiểu là h (h>l)
+ Cây nhị phân hoản chỉnh, không đầy đủ, có n nút thì chiều cao của nólà: h =[log2 ( n + 1)] + 1
+ Cây nhị phân đầy đủ, có n nút, thì chiều cao của nó là h = log2(n + 1)
1.3 Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếm ứng với n khóa là một cây nhị phân mà mỗi nút của
nó đều được gán một giá tñ khóa nào đó trong các giá tñ khóa đã cho và đối vớimọi nút trên cây tính chất sau đây luôn được thỏa mãn:
+ Mọi khóa thuộc cây con trái nút gốc đều nhỏ hơn khóa ứng với nút đó
Trang 181 1
+ Mọi khóa thuộc cây con phải nút gốc đều lớn hơn khóa ứng với nútđó
Ở đây thứ tự chọn quy ước là thứ tự tăng dần đối với số và thứ tự từ điểnđối với chữ
Hình 1.9 Cây nhị phân tìm kiếm Nhờ ràng buộc về khóa trên cây nhị phân tìm kiếm, việc tìm kiếm trở nên có định hướng Hơn nữa, do cấutrúc cây việc tìm kiếm trở nên nhanh đáng kể Chi phí tìm kiếm trung bình chỉ khoảng log2 N.
1.4 Giải thuât tìm kiếm ■
1.4.1 Tìm một node trên cây tìm kiếm
Đối với một cây nhị phân tìm kiếm để tìm xem một khóa X nào đó có trêncây đó không, đầu tiên phải so sánh X với khóa ở gốc và có 1 trong 4 tình huốngsau đây sẽ xuất hiện:
+ Không có gốc (cây rỗng): X không có ừên cây phép tìm kiếm khôngthỏa mãn
+ X trùng với khóa gốc: Phép tìm kiếm được thỏa mãn
+ X nhỏ hơn khóa ở gốc: Tìm kiếm tiếp tục bằng cách xét cây con tráicủa gốc với cách làm tương tự
+ X lớn hơn khóa ở gốc: Tìm kiếm được thực hiện tiếp tục bằng cách xét cây con bên phải của gốc với cách làm tương tự
Trang 191 2
Hình 1.10 Tìm nút trên cây với khóa x=55 Như ở
cây hình 1.10, nếu X = 55 thì sẽ thực hiện
+ So sánh X với 44: x>44 chuyển sang cây con phải
+ So sánh X với 88: x<88 chuyển sang cây con bên trái
+ So sánh X với 55: x=55, vậy tìm kiếm đã được thỏa mãn Giải thuật tìm kiếm trên cây tìm kiếm nhị phân như sau:
Cay timkiem (cay p , int x)
{
while(p!= NƯLL)
{if( p->data ==x) retum p; elseif(x<p->data)
p = p->left;
else p = p->right;
}retum NULL;
}
1.4.2 Xóa một nút trên cây tìm kiếm
Việc hủy một phần tử X ra khỏi cây phải bảo đảm điều kiện ràng buộc của CNPTK (cây nhị phân tìm kiếm)
Có 3 trường họp khi hủy nút X có thể xảy ra:
+ X - nút lá
Trang 201 3
+ X - chỉ có 1 cây con (trái hoặc phải)
+ X - có đủ cả 2 cây con Trường họp thứ nhất: Chỉ đơn giản hủy X vì nó không móc nối đến phần tử nào khác
Hình 1.11 Xóa nút trên cây với khóa X =40 Trường họp thứ hai: Trước khi xóa X thì phải móc nối cha của X với con duy nhất của nó
Hình 1.12 Xóa một nút trên cây với khóa X = 37 Trường họp cuối cùng: Không thể hủy trực tiếp do X có đủ hai con mà sẽ hủy gián tiếp Thay vì hủy
X, mà là tìm một phần tử thế mạng y Phần tử này có tối đa một con Thông tin lưutại y sẽ chuyển lên lưu tại X Sau đó, nút bị hủy thật sẽ là y giống như hai trường hợp đàu
Vấn đề là phải chọn y sao cho khi lưu y vào vị trí của X, cây vẫn là cây nhị phân tìm kiếm
Có 2 phần tử thỏa mãn yêu cầu:
+ Phần tử nhỏ nhất (trái nhất) trên cây con phải
+ Phần tử lớn nhất (phải nhất) trên cây con trái
Việc chọn lựa phàn tử nào là phần tử thế mạng hoàn toàn phụ thuộc vào ý thích của người lập ừình
Trang 211 4
Giải thuật xóa trên cây nhị phân tìm kiếm nhị phân như sau: int delkey (cay&p, int x)
{
if (p==NULL) return p;
else if (p->key>x) return delkey(p->left, x);
else if (p->key<x) return delkey (p->right,x);
else{
Node *q=p;
if (p->left=NULL) p=p->right; else if (p->right ==NULL) p= p->left; else
{Node *s=p, *t=s->left; while (t->right !
=NULL) {
S=t;
T= t->right;
}q->key=t->key; s->right=t->left;
delete t;
}}
return 1;
}
Hình 1.13 Xóa một nút với khóa X = 18
1.4.3 Thêm một nút trên cây tìm kiếm
Đối với một cây nhị phân tìm kiếm để thêm X vào cây, đầu tiên phải so sánh X với khóa ở gốc và có 1 trong 4 tình huống sau đây sẽ xuất hiện:
+ Không có gốc (cây rỗng): Thêm X vào cây
+ X trùng với khóa gốc+ X nhỏ hơn khóa gốc: Tìm kiếm thực hiện tiếp tục bằng cách xét cây con trái của gốc với cách làm tương tự
Trang 221 5
+ X lớn hom khóa ở gốc: Tìm kiếm được thực hiện tiếp tục bằng cách xét cây con phải của gốc với cách làm tương tự
b) Sau khi nút với khóa X =10 Hình 1.14
Thêm một nút với khóa X = 10 vào cây Như với cây ở hình 1.14,
nếu X =10 thì sẽ thực hiện :
+ So sánh X với 5: x>5 vậy phải chuyển sang cây con phải
+ So sánh X với 8: x>8 vậy phải chuyển sang cây con phải
+ So sánh X với 9: x>9 cho nên thêm một nút với khóa x= 10 vào bên phải.a) Cây ban đâu
Trang 231 6
Thuật toán thêm nút vào cây nhị phân tìm kiếm sẽ như sau: Cay themnut
(Cay &p, int x)
q = q->left;
}else{
q = q->right;
}}
else{f->right = p ;}
Trang 241 7
Rõ ràng với giải thuật nêu trên có dạng cây nhị phân tìm kiếm dựng đượchoàn toàn phụ thuộc vào dãy khóa đưa vào Như vậy có nghĩa là, trong quá trình
xử lý động không thể biết trước được cây sẽ phát triển ra sao, hình dạng như thếnào Rất có thể là một cây nhị phân hoàn chỉnh hoặc một cây nhị phân cân đối,nên chi phí tìm kiếm có cấp độ lớn chỉ là 0(log2 n), một trường hợp rất thuận lợinhư luôn mong đợi Nhưng cũng có thể là một cây nhị phân suy biến, không khác
gì một danh sách tuyến tính mà tìm kiếm trên cây đó chính là tìm kiếm tuần tựvới chi phí có cấp 0(n), điều này cũng dễ đưa tới một khuynh hướng lo ngại khiếnthiếu tin tưởng vào phương pháp tìm kiếm này
Tới đây cũng có thể xuất hiện thêm câu hỏi là: Tại sao không tìm cáchdựng một cây nhị phân tìm kiếm luôn cân bằng để có thể đạt chi phí tối thiểu?
Trang 251 8
Hình 18.1 Các nút được chèn theo thứ tự tăng dần
Hình 1.15 Cây nhị phân ban đầu Tìm kiếm với khóa X =
7 trên hình 1.15 Như phép tìm kiếm với X như trên sẽ không được thỏa mãn vàphải chèn thêm nút có khóa bằng 7 vào cây trên hình 1.11 Như vậy, cây sẽ không còn cân đối nữa như (hình 1.16)
Khi thêm nút có khóa X = 7 vào cây thì cây trở nên không cân bằngnữa, việc này làm cho chi phí tìm kiếm trở lên tốn kém hơn Điều tất nhiênđặt ra lúc này là phải “tái cân bằng” lại để được cây cân bằng như hình1.17
Trang 261 9
Trang 272 0
Hình 18.1 Các nút được chèn theo thứ tự tăng dần
Có nhiều cách tiếp cận khác để bảo đảm cho cây cân bằng: Chẳng hạn cây2-3-4 nhưng trong phần lớn trường họp, cây đỏ đen là cây cân bằng hiệu quảnhất, ít ra thì khi dữ liệu được lưu trữ trong bộ nhớ chứ không phải ừong nhữngtập tin Trước khi khảo sát cây đỏ đen, hãy xem lại cây không cân bằng được tạo
ra như thế nào