1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

56 760 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 56
Dung lượng 554,61 KB

Nội dung

Để khắc phục nhược điểm vừa nêu trê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ình thành dựa trên cơ sở bảng được tổ chức dư

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

*************

TRẦN THỊ SIM

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

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Khoa học máy tính

HÀ NỘI – 2015

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

*************

TRẦN THỊ SIM

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

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyê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 3

LỜ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áo PGS 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àn thà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 đỡ

em trong 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 em nhữ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óa luậ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 đỡ động viê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óa luậ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ỏi nhữ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 4

LỜ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 5

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 trê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

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

Trang 6

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

Trang 7

DANH MỤC HÌNH

Hình 1.1 Hình ảnh một cây 5

Hình 1.2 Cây nhị phân 6

Hình 1.3 Cây nhị phân không có thứ tự 7

Hình 1.4 Cây nhị phân lệch 8

Hình 1.5 Cây zíc – zắc 8

Hình 1.6 Cây nhị phân hoản chỉnh 9

Hình 1.7 Cây nhị phân đầy đủ 9

Hình 1.8 Cây nhị phân gần đầy 9

Hình 1.9 Cây nhị phân tìm kiếm 11

Hình 1.10 Tìm nút trên cây với khóa x=55 12

Hình 1.11 Xóa nút trên cây với khóa x =40 13

Hình 1.12 Xóa một nút trên cây với khóa x = 37 14

Hình 1.13 Xóa một nút với khóa x = 18 16

Hình 1.14 Thêm một nút với khóa x = 10 vào cây 17

Hình 1.15 Cây nhị phân ban đầu 20

Hình 1.16 Thêm nút có khóa x = 7 20

Hình 1.17 Tái cân bằng lại cây khi thêm nút với khóa x = 7 20

Hình 2.1 Các nút được chèn theo thứ tự tăng dần 21

Hình 2.2 Ví dụ về cây đỏ đen 23

Hình 2.3 Lật màu 26

Hình 2.4 Các biến dạng của nút khi được chèn với x là cháu ngoại 27

Hình 2.5 Các biến dạng của nút khi được chèn với x là cháu nội 27

Hình 2.6 Các khả năng khi chèn nút 28

Hình 2.7 Nút P đỏ và X là cháu ngoại 30

Hình 2.8 P đỏ và x là nút cháu nội 32

Hình 2.9 Minh họa trường hợp 2 34

Hình 2.10 Minh họa trường hợp 3 35

Hình 2.11 Minh họa trường hợp 4 35

Trang 8

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

Trang 9

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 trong 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ả hơn 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 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 trê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ình thà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ây nhị 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ìm kiế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 cho phương pháp này Chính vì vậy em đã chọn đề tài: “Xây dựng

Trang 10

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

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

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áp câ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ìm kiế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

Trang 11

cân bằng từ đó giảm thiểu chi phí tìm kiếm dữ liệu đối với dữ liệu trong một danh sá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ủa khó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ợp vớ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 cao của người sử dụng

+ Phương pháp thực nghiệm

Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được nghiên cứu và kết quả đạt được qua những phương pháp trên

7 Cấu trúc khóa luậ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ác giả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ìm kiế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 trên cây đỏ đen

Trang 12

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 trong 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ĩnh vự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 trong mộ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ấp khác nhau trong biểu diễn hình cây gia phả Sơ đồ tổ chức của 1 đơn vị cũng thườ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ấp dướ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ĩnh vự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ữ 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 con nằ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 đỉnh) và các cạnh, thỏa mãn một số yêu cầ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ột danh sách các đỉnh phân biệt mà đỉnh trước có liên kết với đỉnh sau

Một tính chất quan trọng hình thành nên cây, đó là có đúng một đường

đi nố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ơn mộ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ễn hì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

Trang 13

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)

+ 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út cha (parent) Các nút nằm ngay dưới nút đó được gọi là nút con (subnode) Các nú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ây chí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ữa nú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 con của mỗi nút thì phân biêt cây con trái và cây con phải

Nút cha

Nút lá

Nút gốc

Nút con

Trang 14

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ự

5

4

Trang 15

Hình 1.3 Cây nhị phân không có thứ tự

Trang 16

a) Cây lệch trái b) Cây lệch phải

Hình 1.4 Cây nhị phân lệch

Hình 1.5 Cây zíc – zắc

Trang 17

Hình 1.6 Cây nhị phân hoản chỉnh

Hình 1.7 Cây nhị phân đầy đủ

Hình 1.8 Cây nhị phân gần đầy

Trang 18

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

ứng vớ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ề trá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ây nhị 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 chỉnh

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ây nhị phân suy biến có chiều cao lơn nhất, cây có nhị phân hoàn

chỉnh hoặ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

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á trị khóa nào đó trong các giá trị khóa đã cho và

đối với mọi nút trên cây tính chất sau đây luôn được thỏa mãn:

Trang 19

+ 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 đó

+ 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ấu trú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 log

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ên câ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ống sau đây sẽ xuất hiện:

+ Không có gốc (cây rỗng): X không có trên cây phép tìm kiếm không thỏ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ái của gốc với cách làm tương tự

5

Trang 20

+ 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ự

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!= NULL)

{

if( p->data ==x) return p;

else if (x<p->data) p = p->left;

else p = p->right;

} return NULL;

Trang 21

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á

+ 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ó

Trang 22

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ưu tạ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 trình

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);

Trang 23

{

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;

}

Trang 24

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ự

+ 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 phải của gốc với cách làm tương tự

Trang 25

a) Cây ban đầu

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

Trang 26

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)

else

{

t = q ;

f = NULL ; while (q !=NULL)

{

f =q ;

if (x<q->data) {

q = q->left ; }

else {

q = q->right ; }

}

if (x< f->data) {

f->left = p ; }

Trang 27

else {

f->right = p ; }

}

return p ;}

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 được hoà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à O(log ), một trường hợp rất thuận lợi như 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ến thiế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ách dự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 28

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)

Hình 1.16 Thêm nút có khóa x = 7 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ằng nữ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ình 1.17

Hình 1.17 Tái cân bằng lại cây khi thêm nút với khóa x = 7

Ngày đăng: 24/09/2015, 08:55

HÌNH ẢNH LIÊN QUAN

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 - 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
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 (Trang 13)
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 - 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
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 (Trang 14)
Hình 1.3. Cây nhị phân không có thứ tự - 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
Hình 1.3. Cây nhị phân không có thứ tự (Trang 15)
Hình 1.4. Cây nhị phân lệch - 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
Hình 1.4. Cây nhị phân lệch (Trang 16)
Hình 1.6. Cây nhị phân hoản chỉnh - 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
Hình 1.6. Cây nhị phân hoản chỉnh (Trang 17)
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 - 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
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 (Trang 19)
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 - 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
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 (Trang 20)
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ó - 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
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ó (Trang 21)
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à - 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
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à (Trang 22)
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 - 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
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 (Trang 24)
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 - 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
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 (Trang 28)
Hình 18.1. Các nút được chèn theo thứ tự tăng dần - 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
Hình 18.1. Các nút được chèn theo thứ tự tăng dần (Trang 29)
Hình 19.2. Ví dụ về cây đỏ đen - 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
Hình 19.2. Ví dụ về cây đỏ đen (Trang 31)
Hình 20.3.  Lật màu - 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
Hình 20.3. Lật màu (Trang 34)
Hình 21.4. Các biến dạng của nút khi được chèn với x là cháu ngoạ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
Hình 21.4. Các biến dạng của nút khi được chèn với x là cháu ngoại (Trang 35)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w