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

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

Đ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

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

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 Nhóm thực hiện: Nhóm 6 STT Tên thành viên MSV Mức độ hoàn thành 1 Lưu Thảo Ly 23A4040082 20.5% 23A4040080 20.25% 2 Lê Thị Hiền Lương 23A4040071 19.75% 23A4040138 20% 3 Phạm Thùy Linh 23A4040072 19.5% 4 Lê Anh Thư 5 Tô Thị Linh NHẬN XÉT CỦA GIẢNG VIÊN ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………… 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ân thà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ải thuậ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ìn sâu sắc và hoàn thiện hơn về bộ môn này Thông qua bài tập lớ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ồn tại những hạn chế nhất định Chính vì thế trong quá trình hoàn thành bài tập lớn lần này, bọn em sẽ không thể tránh khỏi nhữ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 DANH MỤC TỪ VIẾT TẮT CTDL> Cấu trúc dữ liệu và giải thuật hL Chiều cao cây con trái hR Chiều cao cây con phải Nhị phân tìm kiếm NPTK 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 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 MỞ ĐẦU Định dạng của một cấu trúc cây thay đổi phụ thuộc vào thứ 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ác trường hợp trung bình ta có độ phức tạp thời gian của các thao tác chèn, xóa, và tìm kiếm phần tử trên cây là O(logn), và trong trường hợp xấu nhất là O(n) Năm 1962, P.M Adelson-Velski E.M Landis đã mở đầu phương hướng giải quyết này bảng cách đưa ra một dạng cây cân đối mới mà sau này được mang tên họ, đó là cây nhị phân tì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ằng ngay dưới đây 1 NỘI DUNG I.Định nghĩa 1 Định nghĩa Cây AVL là cây nhị phân tìm kiếm mà sự khác biệt về chiều cao giữa cây con trái và cây con bên phải không vượt quá 1 Các thao tác cơ bản với cây AVL là thêm node hoặc xóa node khỏi cây cũng giống với cây nhị phân tìm kiếm, chỉ có sự khác biệt là ta cần duy trì sự cân bằng của cây (sự khác biệt về chiều cao giữa cây con bên trái và cây con bên phải của các node không được vượt quá 1) 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 đầu tiê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ây thứ ba, cây con bên phải của A có độ cao là 2 và cây con bên trái có độ cao là 0, do đó hiệu số cũng là 2 Trong khi cây AVL chỉ chấp nhận hiệu số (hay Nhân tố cân bằng) là 1 2 Nếu hiệu số giữa độ cao của các cây con bên trái và cây con bên phải là lớn hơn 1 thì cây được cân bằng bởi sử dụng mộ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ều cao cây phải của một nút: Các giá trị hợp lệ : + CSCB(p) = 0 - Độ cao cây trái (p) = Độ cao cây phải (p) + CSCB(p) = 1 - Độ cao cây trái (p) < Độ cao cây phải (p) 3 + CSCB(p) = -1 - Độ cao cây trái (p) > Độ cao cây phả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; }AVLNode; typedef AVLNode *AVLTree; III Cân bằng 1 Các trường hợp mất cân bằng TH1: Mất cân bằng phải phải (R-R) 4 Sau phép quay kết hợp, cây đã có trạng thái cân bằng Hình 10: Phép quay phải – trái 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ằng thí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 + Tất cả các cây con (bao gồm bên trái và phải) cũng đều phải đảm bảo 2 tính chất trên 12 Mỗi nút đưa thêm 1 thông tin là hệ số cân bằng có thể nhận 3 giá 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ều chỉ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 trong cây xuất hiện một node có hệ số cân bằng bằng 2 Lúc này ta cần điều chỉnh để đưa cây về trạng thái cân bằng 13 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); root->height=max(height(root- >left),height(root->right))+1; bal=getbalance(root); if(bal>1 && x < root->left->data) right_rotate(root); else if(bal root->right->data) 14

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

Tài liệu cùng người dùng

Tài liệu liên quan