1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu và giải thuật cây cân bằng

11 357 1

Đ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 11
Dung lượng 594,51 KB

Nội dung

www.kenbon.net CÂY CÂN BẰNG 1.CÂY NH PHÂN CÂN B NG HOÀN TOÀN 1.1 Đ nh nghĩa Cây cân hoàn toàn nhị phân tìm kiếm mà nút nó, số nút trái chênh lệch không so với số nút phải 1.2 Đánh giá Một khó đạt trạng thái cân hoàn toàn dễ cân thêm hay hủy nút làm cân bằng, chi phí cân lại cao phải thao tác toàn Đối với cân hoàn toàn, trường hợp xấu ta phải tìm qua log2N phần tử (N số nút cây) Sau ví dụ cân hoàn toàn (CCBHT): CCBHT có N nút có chiều cao h ≈ log2N Đây lý cho phép bảo đảm khả tìm kiếm nhanh CTDL Do CCBHT cấu trúc ổn định nên thực tế sử dụng Nhưng ưu điểm lại quan trọng Vì vậy, cần đưa CTDL khác có đặc tính giống CCBHT ổn định www.kenbon.net CÂY NH PHÂN CÂN B NG (AVL Tree) 2.1 Đ nh nghĩa: Cây nhị phân tìm kiếm cân mà nút độ cao trái phải chênh lệch không Dưới ví dụ nhị phân cân : Dễ dàng thấy CCBHT cân Điều ngược lại không không 2.2 L ch s cân b ng (AVL Tree) AVL tên viết tắt tác giả người Nga đưa định nghĩa cân Adelson-Velskii Landis (1962) Vì lý này, người ta gọi nhị phân cân băng AVL Từ AVL, người ta phát triển thêm nhiều loại CTDL hữu dụng khác đỏ-đen (Red-Black Tree), B-Tree, … 2.3 Chi u cao c a AVL www.kenbon.net Một vấn đề quan trọng, đề cập đến phần trước, ta phải khẳng định AVL có N nút phải có chiều cao khoảng log2(n) Để đánh giá xác chiều cao AVL, ta xét toán: AVL có chiều cao h phải có tối thiểu nút ? Gọi N(h) số nút tối thiểu AVL có chiều cao h Ta có N(0) = 0, N(1) = N(2) = Cây AVL có chiều cao h có AVL chiều cao h-1 AVL chiều cao h-2 Như vậy: N(h) = + N(h-1) + N(h-2) (1) Ta lại có: N(h-1) > N(h-2) Nên từ (1) suy ra: N(h) > 2N(h-2) N(h) > 22N(h-4) … N(h) > 2iN(h-2i) i =h/2 N(h)>2h/2 h < 2log2(N(h)) Như vậy, AVL có chiều cao O(log2(n)) Ví dụ: AVL tối thiểu có chiều cao h=4 www.kenbon.net 2.4 C u trúc d li u cho AVL Chỉ số cân nút: Chỉ số cân nút hiệu chiều cao phải trái Đối với cân bằng, số cân (CSCB) nút nhận ba giá trị sau đây: CSCB(p) = Độ cao trái (p) = Độ cao phải (p) CSCB(p) = Độ cao trái (p) < Độ cao phải (p) CSCB(p) =-1 Độ cao trái (p) > Độ cao phải (p) Xét nút P, ta dùng ký hiệu sau: P->balFactor = CSCB(P); Độ cao trái P ký hiệu hleft Độ cao phải P ký hiệu hright Để khảo sát cân bằng, ta cần lưu thêm thông tin số cân nút Lúc đó, cân khai báo sau: typedef struct tagAVLNode www.kenbon.net { char balFactor; //Chỉ số cân Data key; struct tagAVLNode* pLeft; struct tagAVLNode* pRight; } AVLNode; typedef AVLNode *AVLTree; Để tiện cho việc trình bày, ta định nghĩa số hăng số sau: #define LH -1 //Cây trái cao #define EH -0 //Hai #define RH //Cây phải cao 2.5 Đánh giá AVL Cây cân CTDL ổn định CCBHT thêm, hủy làm thay đổi chiều cao trường hợp cân có khả xảy Cây AVL với chiều cao khống chế cho phép thực thi thao tác tìm, thêm, hủy với chi phí O (log2(n)) bảo đảm không suy biến thành O(n) CÁC THAO TÁC C B N TRÊN CÂY AVL Ta nhận thấy trường hợp thêm hay hủy phần tử làm tăng hay giảm chiều cao, phải cân lại Việc cân lại phải thực cho ảnh hưởng tối thiểu đến nhằm giảm thiểu chi phí cân Như nói trên, cân www.kenbon.net cho phép việc cân lại xảy giới hạn cục nên thực mục tiêu vừa nêu Như vậy, thao tác bình thường CNPTK, thao tác đặc trưng AVL gồm: Thêm phần tử vào AVL Hủy phần tử AVL Cân lại vừa bị cân 3.1 CÁC TR NG H P M T CÂN B NG Ta không khảo sát tính cân nhị phân mà quan tâm đến khả cân xảy thêm hủy nút AVL Như vậy, cân bằng, độ lệch chiều cao Ta có khả sau: Tr ng h p 1: T l ch v bên trái (có kh năng) www.kenbon.net Tr ng h p 2: T l ch v bên ph i Ta có khả sau: Ta thấy trường hợp lệch bên phải hoàn toàn đối xứng với trường hợp lệch bên trái Vì ta cần khảo sát trường www.kenbon.net hợp lệch bên trái Trong trường hợp lệch bên trái, trường hợp T1 lệch phải phức tạp Các trường hợp lại giải đơn giản Sau đây, ta s kh o sát gi i quy t t ng tr ng h p nêu T/h 1.1: T1 lệch bên trái Ta thực phép quay đơn Left-Left T/h 1.2: T1 không lệch Ta thực phép quay đơn Left-Left www.kenbon.net Ttoán quay đơn Left-Left: B1: T gốc; T1 = T->pLeft; T->pLeft = T1->pRight; T1->pRight = T; B2:// đặt lại số cân Nếu T1->balFactor = LH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T1->balFactor = EH thì: T->balFactor = LH; T1->balFactor = RH; break; B3:// T trỏ đến gốc T = T1; T/h 1.3: T1 lệch bên phải Ta thực phép quay kép Left-Right Do T1 lệch bên phải ta áp dụng phép quay đơn áp dụng trường hợp T từ trạng thái cân lệch trái thành cân lệch phải Hình vẽ minh họa phép quay kép áp dụng cho trường hợp này: www.kenbon.net Ttoán quay kép Left - Right B1: gốc T; T1 = T->pLeft; T2 = T1->pRight; T->pLeft = T2->pRight; T2->pRight = T;T1->pRight = T2->pLeft;T2->pLeft = T1; B2: //đặt lại số cân Nếu T2->balFactor = LH thì: T->balFactor = RH; T1->balFactor = EH; break; Nếu T2->balFactor = EH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T2->balFactor = RH thì: T->balFactor = EH; T1->balFactor = LH; break; B3: T2->balFactor = EH; T = T2; 10 www.kenbon.net Lưu ý rằng, trước cân T có chiều cao h+2 trường hợp 1.1, 1.2 1.3 Sau cân bằng, trường hợp 1.1 1.3 có chiều cao h+1; trường hợp 1.2 có chiều cao h+2 Và trường hợp trường hợp sau cân nút T cũ có số cân khác Thao tác cân lại tất trường hợp có độ phức tạp O(1) Với xem xét trên, xét tương tự cho trường hợp T lệch bên phải, ta xây dựng hàm quay đơn hàm quay kép sau: 3.2.THÊM M T PH N T TRÊN CÂY AVL: Việc thêm phần tử vào AVL diễn tương tự CNPTK Tuy nhiên, sau thêm xong, chiều cao thay đổi, từ vị trí thêm vào, ta phải tìm ngược lên gốc để kiểm tra nút bị cân không Nếu có, ta phải cân lại nút TToán: Giả sử cần thêm vào nút mang thông tin X Tìm kiếm vị trí thích hợp để thêm nút X (đưa thông báo có nút X rồi) Thêm nút X vào Cân lại 3.3 H Y M T PH N T TRÊN CÂY AVL: Cũng giống thao tác thêm nút, việc hủy phần tử X khỏi AVL thực giống CNPTK Chỉ sau hủy, tính cân bị vi phạm ta thực việc cân lại Tuy nhiên việc cân lại thao tác hủy phức tạp 11 [...]...www.kenbon.net Lưu ý rằng, trước khi cân bằng cây T có chiều cao h+2 trong cả 3 trường hợp 1.1, 1.2 và 1.3 Sau khi cân bằng, trong 2 trường hợp 1.1 và 1.3 cây có chiều cao h+1; còn ở trường hợp 1.2 cây vẫn có chiều cao h+2 Và trường hợp này cũng là trường hợp duy nhất sau khi cân bằng nút T cũ có chỉ số cân bằng khác 0 Thao tác cân bằng lại trong tất cả các trường hợp đều có độ phức... thêm nút X (đưa ra thông báo nếu đã có nút X rồi) 2 Thêm nút X vào cây 3 Cân bằng lại cây 3.3 H Y M T PH N T TRÊN CÂY AVL: Cũng giống như thao tác thêm một nút, việc hủy một phần tử X ra khỏi cây AVL thực hiện giống như trên CNPTK Chỉ sau khi hủy, nếu tính cân bằng của cây bị vi phạm ta sẽ thực hiện việc cân bằng lại Tuy nhiên việc cân bằng lại trong thao tác hủy sẽ phức tạp hơn 11 ... hợp cây T lệch về bên phải, ta có thể xây dựng 2 hàm quay đơn và 2 hàm quay kép sau: 3.2.THÊM M T PH N T TRÊN CÂY AVL: Việc thêm một phần tử vào cây AVL diễn ra tương tự như trên CNPTK Tuy nhiên, sau khi thêm xong, nếu chiều cao của cây thay đổi, từ vị trí thêm vào, ta phải tìm ngược lên gốc để kiểm tra các nút bị mất cân bằng không Nếu có, ta phải cân bằng lại ở nút này TToán: Giả sử cần thêm vào ...www.kenbon.net CÂY NH PHÂN CÂN B NG (AVL Tree) 2.1 Đ nh nghĩa: Cây nhị phân tìm kiếm cân mà nút độ cao trái phải chênh lệch không Dưới ví dụ nhị phân cân : Dễ dàng thấy CCBHT cân Điều ngược lại... tối thiểu có chiều cao h=4 www.kenbon.net 2.4 C u trúc d li u cho AVL Chỉ số cân nút: Chỉ số cân nút hiệu chiều cao phải trái Đối với cân bằng, số cân (CSCB) nút nhận ba giá trị sau đây: CSCB(p)... #define LH -1 / /Cây trái cao #define EH -0 //Hai #define RH / /Cây phải cao 2.5 Đánh giá AVL Cây cân CTDL ổn định CCBHT thêm, hủy làm thay đổi chiều cao trường hợp cân có khả xảy Cây AVL với chiều

Ngày đăng: 08/01/2016, 11:45

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN