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

Bài tập lớn Cấu trúc dữ liệu và giải thuật Cây AVL

32 1 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

Tiêu đề Cây AVL – AVL Tree
Tác giả Lưu Thảo Ly, Lê Thị Hiền Lương, Phạm Thùy Linh, Lê Anh Thư, Tô Thị Linh
Người hướng dẫn Giang Thị Thu Huyền
Trường học Học viện Ngân hàng
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại bài tập lớn
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 32
Dung lượng 2,08 MB
File đính kèm Cây AVL.rar (3 MB)

Nội dung

Bài tập lớn Cấu trúc dữ liệu và giải thuật Cây AVL MỤC LỤC MỞ ĐẦU 1 NỘI DUNG 2 I.Định nghĩa 2 1. Định nghĩa 2 2. Ví dụ về cây cân bằng 2 3. Ưu nhược điểm của cây AVL 3 II. Cấu trúc dữ liệu cây AVL 3 III. Cân bằng 4 1. Các trường hợp mất cân bằng 4 2. Xử lý mất cân bằng cây 6 IV. Các thao tác cơ bản trên cây AVL 11 1. Thêm một phần tử 11 2. Xóa một phần tử 14 3.Tìm kiếm một phần tử 15 4. Các phép duyệt cây 17 V. Ứng dụng 20 VI. Độ phức tạp giải thuật 20 KẾT LUẬN 22 TÀI LIỆU THAM KHẢO 23

Trang 1

HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT

ĐỀ TÀI: CÂY AVL – AVL TREE

Giảng viên: Giang Thị Thu Huyền

Hà nội, tháng 10 năm 2021

Trang 2

Nhóm thực hiện: Nhóm 6

thành

2 Lê Thị Hiền Lương 23A4040080 20.25%

3 Phạm Thùy Linh 23A4040071 19.75%

Trang 3

NHẬN XÉT CỦA GIẢNG VIÊN

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 4

LỜI CẢM ƠN

Lời đầu tiên cho phép nhóm em xin gửi lời cảm ơn chânthành nhất đến Giảng viên Giang Thị Thu Huyền Trong quátrình học tập một môn rất quan trọng là Cấu trúc dữ liệu và giảithuật, nhóm đã được cô quan tâm và giúp đỡ tận tình Bọn em

đã tích lũy thêm được rất nhiều kiến thức để có thể có cái nhìnsâu sắc và hoàn thiện hơn về bộ môn này Thông qua bài tậplớn lần này, nhóm muốn trình bày lại những gì mà bọn em đãtìm hiểu trong thời gian qua

Vì một lý do là kiến thức thì vô hạn, nên mỗi người đều tồntại những hạn chế nhất định Chính vì thế trong quá trình hoànthành bài tập lớn lần này, bọn em sẽ không thể tránh khỏinhững sai sót Cả nhóm hy vọng sẽ nhận được những lời góp ý

từ cô để bài của bọn em được hoàn thiện hơn

Trang 5

DANH MỤC TỪ VIẾT TẮT

CTDL&GT Cấu trúc dữ liệu và giải thuật

DANH MỤC HÌNH ẢNH

Hình 1: Ví dụ về cây cân bằng 2

Hình 2: mất cân bằng phải-phải 4

Hình 3:Mất cân bằng phải-trái 5

Hình 4: mất cân bằng trái-trái 5

Hình 5:mất cân bằng trái-phải 6

Hình 6: Xử lý mất cân bằng, bằng phép quay 7

Hình 7: Phép quay trái 7

Hình 8: Phép quay phải 8

Hình 9: Phép quay trái - phải 9

Hình 10: Phép quay phải – trái 11

Hình 11: Chiều cao của cây thay đổi nhưng cây chưa mất cân bằng 12

Hình 12: Thay đổi chiều cao và làm mất độ cân bằng 13

Hình 13: Xóa node và cân bằng lại cây 15

Hình 14:Tìm kiếm 16

Hình 15: Duyệt trước 17

Hình 16: duyệt giữa 18

Hình 17:duyệt sau 19

Trang 6

MỤC LỤC

MỞ ĐẦU 1

NỘI DUNG 2

I.Định nghĩa 2

1 Định nghĩa 2

2 Ví dụ về cây cân bằng 2

3 Ưu nhược điểm của cây AVL 3

II Cấu trúc dữ liệu cây AVL 3

III Cân bằng 4

1 Các trường hợp mất cân bằng 4

2 Xử lý mất cân bằng cây 6

IV Các thao tác cơ bản trên cây AVL 11

1 Thêm một phần tử 11

2 Xóa một phần tử 14

3.Tìm kiếm một phần tử 15

4 Các phép duyệt cây 17

V Ứng dụng 20

VI Độ phức tạp giải thuật 20

KẾT LUẬN 22

TÀI LIỆU THAM KHẢO 23

Trang 7

MỞ ĐẦU

Định dạng của một cấu trúc cây thay đổi phụ thuộc vàothứ tự chèn dữ liệu của nó Trong trường hợp xấu nhất, nó cóthể có dạng đường tuyến tính (giống với danh sách liên kết), khi

đó các thao tác trên cây có hiệu quả thấp nhất Trong cáctrường hợp trung bình ta có độ phức tạp thời gian của các thaotác chèn, xóa, và tìm kiếm phần tử trên cây là O(logn), và trongtrường hợp xấu nhất là O(n)

Năm 1962, P.M Adelson-Velski E.M Landis đã mở đầuphương hướng giải quyết này bảng cách đưa ra một dạng câycân đối mới mà sau này được mang tên họ, đó là cây nhị phântìm kiếm cân bằng AVL (ta gọi là cây AVL cho gọn)

Một cây áp dụng các thuật toán giúp định dạng của câyđược cân bằng Được gọi là cây cân bằng Ta sẽ đi vào tìm hiểu

kỹ hơn về cây cân bằng và các thuật toán giúp cây cân bằngngay dưới đây

Trang 8

NỘI DUNGI.Định nghĩa

2 Ví dụ về cây cân bằng

Dưới đây là hình ví dụ minh họa ba cây, trong đó cây đầutiên là cân bằng, cây thứ hai và thứ ba là không cân bằng

Hình 1: Ví dụ về cây cân bằng

Trong cây thứ hai, cây con bên trái của C có độ cao là 2 vàcây con bên phải có độ cao là 0, do đó hiệu số là 2 Trong câythứ ba, cây con bên phải của A có độ cao là 2 và cây con bêntrái có độ cao là 0, do đó hiệu số cũng là 2 Trong khi cây AVLchỉ chấp nhận hiệu số (hay Nhân tố cân bằng) là 1

Trang 9

Nếu hiệu số giữa độ cao của các cây con bên trái và câycon bên phải là lớn hơn 1 thì cây được cân bằng bởi sử dụngmột số kỹ thuật quay AVL được trình bày dưới đây.

Để làm cho cây tự cân bằng, một cây AVL có thể thực hiện

4 loại kỹ thuật quay sau:

+ Kỹ thuật quay trái

+ Kỹ thuật quay phải

+ Kỹ thuật quay trái-phải

+ Kỹ thuật quay phải-trái

Hai kỹ thuật quay đầu tiên là các kỹ thuật quay đơn và hai

kỹ thuật quay còn lại là các kỹ thuật quay ghép

3 Ưu nhược điểm của cây AVL

a Ưu điểm: Hiệu năng tìm kiếm luôn được đảm bảo kể cả trong

trường hợp xấu nhất (bằng O(logN))

b Nhược điểm: Khi chèn phần tử hoặc xoá phần tử khỏi cây thì

cần thêm một thao tác đó là giữ cho cây cân bằng

II Cấu trúc dữ liệu cây AVL

Chỉ số cân bằng là độ lệch giữa chiều cao cây trái và chiềucao cây phải của một nút:

Trang 10

+ CSCB(p) = -1 - Độ cao cây trái (p) > Độ cao câyphải (p)

Để dễ trình bày, các giá trị trên được định nghĩa dưới dạng nhưsau:

+ #define LH -1 //cây con trái cao hơn

+ #define EH 0 //cây con trái bằng cây con phải

+ #define RH 1 //cây con phải cao hơn

typedef struct tagAVLNode

{ char balFactor; //chỉ số cân bằng

Data key;

struct tagAVLNode* pLeft;

struct tagAVLNode* pRight;

Trang 11

Hình 2: mất cân bằng phải-phải

+ Tại nút 18: hL=0, hR=2

=>Lệch phải+ Tại nút 22: hL=0, hR=1

=>Lệch phải

=> Tại nút 18 cây lệch phải phải

TH2: Mất cân bằng phải trái (R-L)

Hình 3:Mất cân bằng phải-trái

+ Tại nút 18: hL=0, hR=2

=>lệch phải

Trang 12

+ Tại nút 22: hL=1, hR=0

=> lệch trái

=>Tại nút 18 cây lệch phải trái

TH3: Mất cân bằng trái trái(L-L)

Hình 4: mất cân bằng trái-trái

+ Tại nút 8: hL=2, hR=0

=>Lệch trái+ Tại nút 5: hL=1, hR=0

=>lệch trái

=> tại nút 8 cây lệch trái trái

TH4: mất cân bằng trái phải(L-R)

Trang 13

Hình 5:mất cân bằng trái-phải

+ Tại nút 8: hL=2, hR=0

=>Lệch trái+ Tại nút 5: hL=0, hR=1

=>lệch phải

=> tại nút 8 cây lệch trái phải

2 Xử lý mất cân bằng cây

Biến 1 cây nhị phân tìm kiếm thành cây cân bằng AVL tại

vị trí bị mất cân bằng bằng cách xử dụng phép quay cây

Xử lý cụ thể cho các trường hợp mất cân bằng như sau:

Hình 6: Xử lý mất cân bằng, bằng phép quay

Trang 14

a Xoay trái

Trong trường hợp cây ở trạng thái không cân bằng khi mộtnode được chèn vào làm con phải của một cây có một node gốc

và một node con phải Lúc này ta phải thực hiện phép quay trái

để đưa cây trở lại trạng thái cân bằng

Hình 7: Phép quay trái

Ở ví dụ trên, node A trở thành node không cân bằng khi cómột node chèn vào cây con bên phải của nó Chúng ta thựchiện phép quay trái bởi đưa node A trở thành con trái của node

B, để đưa cây về trạng thái cân bằng

b Xoay phải

Trong trường hợp cây ở trạng thái không cân bằng khi mộtnode được chèn vào làm con trái của một cây có một node gốc

và một node con trái Lúc này ta phải thực hiện phép quay phải

để đưa cây trở lại trạng thái cân bằng

Trang 15

Hình 8: Phép quay phải

Ở ví dụ trên, khi thực hiện phép quay phải ta đưa node A(node mất cân bằng) trở thành con phải của node B

c

Phép quay trái - phải

Phép quay kết hợp có đôi chút phức tạp hơn so với cácphép quay trái và quay phải ở trên Với phép quay trái-phải, ta

sẽ thực hiện việc quay trái trước và quay phải sau đó

Khi một node được chèn vàolàm con phải của cây con trái.Điều này làm cho node C bịmất cân bằng Trong tìnhhuống như vậy ta phải thựchiện phép quay kết hợp trái -phải, để đưa cây trở về trạngthái cân bằng

Đầu tiên, trên cây con trái củanode C, ta sẽ thực hiện phépquay trái để khiến A trở thànhcon trái của B

Trang 16

Sau khi thực hiện xong mộtphép quay trái, cây vẫn chưa

ở trạng thái cân bằng Để đưacây trở về trạng thái cânbằng, ta cần tiếp tục thựchiện một phép quay phải

Phép quay phải sẽ đưa B trởthành node gôc mới Node Ctrở thành con phải của B

Hình 9: Phép quay trái - phải

Sau phép quay kết hợp, cây

Trang 17

Khi một node được chèn vàolàm con trái của cây con phải.Điều này làm cho node A bịmất cân bằng Trong tìnhhuống như vậy ta phải thựchiện phép quay kết hợp phải -trái, để đưa cây trở về trạngthái cân bằng.

Đầu tiên, trên cây con phảicủa node A, ta sẽ thực hiệnphép quay phải để khiến C trởthành con phải của B

Sau khi thực hiện xong mộtphép quay phải, cây vẫn chưa

ở trạng thái cân bằng Để đưacây trở về trạng thái cânbằng, ta cần tiếp tục thựchiện một phép quay trái

Phép quay trái tiếp theo sẽđưa B trở thành node gôc mới.Node A trở thành con trái củaB

Trang 18

Hình 10: Phép quay phải – trái

Sau phép quay kết hợp, cây

đã có trạng thái cân bằng

IV Các thao tác cơ bản trên cây AVL

1 Thêm một phần tử

+ Thêm bình thường như trường hợp cây NPTK

+ Nếu cây tăng trưởng chiều cao

Lần ngược về gốc để phát hiện nút bị mất cân bằng

Tiến hành cân bằng lại nút đó bằng thao tác cân bằngthích hợp

+ Việc cân bằng lại chỉ cần thực hiện 1 lần nơi mất cân bằng

*Việc thêm một phần tử vào cây AVL giống như khi thêm một phần tử vào cây NPTK và phải tuân thủ những quy tắc của cây NPTK.

+ Giá trị của tất cả các Node ở cây con bên trái phải <= giá trịcủa Node gốc

+ Giá trị của tất cả các Node ở cây con bên phải phải > giá trịcủa Node gốc

+ Tất cả các cây con (bao gồm bên trái và phải) cũng đều phải

Trang 19

Mỗi nút đưa thêm 1 thông tin là hệ số cân bằng có thể nhận 3giá trị:

+ Left_higher (hoặc ‐1)

+ Equal_height (hoặc 0)

+ Right_higher (hoặc +1)

Nếu chiều cao của cây thay đổi sau khi thêm xong một phần

tử , ta phải xét từ dưới gốc lên khi đó ta sẽ có hai trường hợp

+ TH1: Chiều cao của cây thay đổi nhưng cây chưa mất cân bằng

Nếu node có giá trị 3 được thêm vào, sẽ có một node có

hệ số cân bằng bằng 1 xuất hiện, nhưng ta chưa cần phải điềuchỉnh vì hệ số cân bằng chưa vượt quá 1

Hình 11: Chiều cao của cây thay đổi nhưng cây chưa mất cân

bằng

+ TH2: Thay đổi chiều cao và làm mất độ cân bằng

Khi node có giá trị bằng 2 được thêm vào sẽ dẫn đến trongcây xuất hiện một node có hệ số cân bằng bằng 2 Lúc này tacần điều chỉnh để đưa cây về trạng thái cân bằng

Trang 20

Hình 12: Thay đổi chiều cao và làm mất độ cân bằng

Chú ý: ta chỉ thực hiện phép xoay tại nút mất cân bằng

CODE: void insert_node(tree_avl &root, int x)

{ int bal;

if(root==NULL)

root=getnode(x);

else{ if(x< root->data) insert_node(root->left,x);

else insert_node(root->right,x);

Trang 21

left_rotate(root);

else if( bal>1 && x > root->left->data) { left_rotate(root->left);

right_rotate(root); } else if(bal<-1 && x < root->right->data ) { right_rotate(root->right);

left_rotate(root); } }

}

2 Xóa một phần tử

+ Hủy bình thường như trường hợp cây NPTK

+ Nếu cây giảm chiều cao:

Lần ngược về gốc để phát hiện nút bị mất cân bằng

Tiến hành cân bằng lại nút đó bằng thao tác cân bằngthích hợp

Tiếp tục lần ngược lên nút cha…

+Việc cân bằng lại có thể lan truyền lên tận gốc

Một nút bị xóa sẽ giống như nút lá Sau khi xóa một nút,

hệ số cân bằng của các nút sẽ thay đổi Để cân bằng lại hệ sốcân bằng, người ta thực hiện các phép xoay thích hợp

Có ba trường hợp để xóa một nút

Trường hợp 1: Nếu nút cần xóa là nút lá (tức là không có bất kỳcon nào), thì loại bỏ nút cần xóa

Trang 22

Trường hợp 2: Nếu nút cần xóa có một nút con, thì ta sẽ thaythế nội dung của nút cần xóa bằng nội dung của con đó Loại

bỏ nút con

Trường hợp 3: Nếu nút cần xóa có hai nút con, ta sẽ tìm nút kếnhiệm w theo thứ tự inorder của nút cần xóa (tức là Nút có giátrị nhỏ nhất trong cây con bên phải)

Hình 13: Xóa node và cân bằng lại cây

3.Tìm kiếm một phần tử

Việc tìm kiếm cũng tương tự như như việc thêm phần tử, ta cóquy trình như sau:

Trang 23

 Nếu node hiện tại có giá trị bằng giá trị cần tìm, ta trả vềtrue và kết thúc.

 Nếu node hiện tại có giá trị lớn hơn giá trị cần tìm, ta gọi

đệ quy tìm ở cây con bên trái

 Nếu node hiện tại có giá trị nhỏ hơn giá trị cần tìm, ta gọi

đệ quy tìm ở cây con bên phải

 Nếu tìm hết cây mà (Node đó = NULL) không xảy ra thì trả

về false và kết thúc

VD minh họa:

Trang 24

Hình 14:Tìm kiếm

Trang 25

CODE int search(tree_avl root, int x)

{ node *p;

p=root;

if(p!=NULL) { while(p!=NULL) { if(x <p->data) p=p->left;

else if(x> p->data) p=p->right;

else return 1; } }return 0;

Trang 26

Hình 15: Duyệt trước

Ở hình VD minh họa trên, A là nút gốc Đầu tiên ta sẽ truycập chính nút gốc A, sau đó di chuyển tới nút con bên trái B của

nó B cũng được duyệt theo thứ tự tương tự, và tiến trình tiếptục cho tới khi tất cả các nút đều đã được truy cập Cách thứcduyệt cho ra kết quả là: A → B → D → E → C → F → G

b

Phép duyệt giữa:

Trong cách duyệt này, cây con bên trái được truy cập đầu

Trang 27

phân được duyệt theo thứ tự giữa, kết quả tạo ra sẽ là các giátrị khóa được duyệt theo thứ tự tăng dần.

Hình 16: duyệt giữa

Trong hình VD minh họa trên, ta bắt đầu từ nút gốc A, dichuyển đến cây con bên trái B của nút gốc Tại đây, B cũngđược duyệt theo cách tương tự, tiến trình tiếp tục cho tới khi tất

cả các nút đều đã được truy cập Kết quả của cách thức duyệt

giữa cho cây trên sẽ là: D → B → E → A → F → C → G

c

Phép duyệt sau:

Trang 28

Trong cách thức duyệt này, nút gốc của cây sẽ được truycập cuối cùng Đầu tiên ta sẽ duyệt cây con bên trái, sau đóduyệt cây con bên phải và cuối cùng là duyệt nút gốc.

Hình 17:duyệt sau

Trong hình VD minh họa trên, từ nút gốc A ta bắt đầu truycập cây con bên trái B B cũng được duyệt theo cách tương tự.Tiến trình sẽ tiếp tục cho tới khi tất cả các nút đề đã được truy

cập Kết quả của phép duyệt sau cho cây con trên sẽ là: D → E

Trang 29

- Do là 1 cấu trúc dữ liệu nên AVL cũng nhằm mục đích tổchức thông tin

- Cây AVL là một cấu trúc dữ liệu thuộc họ "Cây tìm kiếmnhị phân tự cân bằng" Đặc điểm nổi trội nhất của nó so với cáccấu trúc dữ liệu thông thường như mảng tuyến tính và cây nhịphân tìm kiếm thông thường là độ phức tạp của 3 phép toán cơbản thao tác trên cây là: Chèn, xóa và tìm kiếm đều là O(log n)

Vậy nên một trong những ứng dụng phổ biến của cây AVL

là dùng để lưu trữ thông tin cần truy xuất nhanh: Từ điển (haydùng nhất), cấu trúc dữ liệu dạng văn bản (cây văn bản) nhưOpen Office (trong cơ sở dữ liệu của Open Office) …

- Để lập chỉ số cho các bản ghi lớn trong cơ sở dữ liệu

-Vì cây AVL là dạng cấu trúc dữ liệu thuộc họ “Cây tìmkiếm nhị phân” nên có thể tìm kiếm trong cơ sở dữ liệu lớn

VI Độ phức tạp giải thuật

Tốt nhất Xấu nhất

Trang 30

KẾT LUẬN

Trong phần trình bày trên đã nói rõ các khái niệm cơ bản

về cây cân bằng, hệ số cân bằng và các phép quay trái, phải …

để đưa cây AVL trở lại trạng thái cân bằng khi nó bị phá vỡ bởimột yếu tố nào đó như việc chèn dữ liệu vào cây, xóa node khỏicây AVL Để đưa cây về trạng thái cân bằng sau khi xóa nodephức tạp hơn so với trường hợp chèn node và nó đã được làm rõ

ở trong phần trình bày trên Ngoài ra còn có các thuật toán tìmkiếm phần tử trong cây và các phép duyệt cây Cây AVL cónhiều ưu điểm nổi trội hơn cây nhị phân tìm kiếm do các câytìm kiếm nhị phân được xây dựng theo phương pháp chènthông thường có thể có những biến dạng mất cân đối nghiêmtrọng, chẳng hạn có thể hoàn toàn lệch phải (tất cả các núttrong chỉ có con phải) hoặc lệch trái (tất cả các nút trong chỉ cócon trái) Trong các trường hợp này chi phí cho việc tìm kiếmtrong trường hợp xấu nhất đạt tới n (n là số nút trên cây) Nếu

có một cây tìm kiếm nhị phân cân bằng hoàn toàn, chi phí đóchỉ xấp xỉ log2n Tuy nhiên nhiều khi không thể xây dựng mộtcây tìm kiếm nhị phân như vậy cho mọi dãy khóa G.M.Adelson-Velsky và E.M Landis đã đề xuất một tiêu chuẩn cânbằng (sau này gọi là cân bằng AVL), giảm nhẹ hơn so với cânbằng hoàn toàn Đây là cấu trúc dữ liệu đầu tiên có khả năng tựcân bằng Cây AVL thường được so sánh với cây đỏ-đen vì cảhai đều hỗ trợ cùng một tập hợp các thao tác và mất O(log n)thời gian cho các thao tác cơ bản Đối với các ứng dụng tra cứu

Ngày đăng: 25/03/2024, 10:48

TỪ KHÓA LIÊN QUAN

w