Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
220,5 KB
Nội dung
Cấutrúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
1
NỘI DUNG
CÂY NHỊPHÂNTÌMKIẾMCÂN BẰNG
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
2
Ðịnh nghĩa
Cây nhịphântìmkiếmcânbằng là cây mà tại mỗi nút
của nó độ cao của cây con trái và của cây con phải
chênh lệch không quá một
Ví dụ:
44
23
88
13 37
59
108
15 30 40 55 71
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
3
Tổ chức dữ liệu
Chỉ số cânbằng = độ lệch giữa cây trái và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)
CSCB(p) = -1 ⇔ Độ cao cây trái (p) > Độ
cao cây phải (p)
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
4
Tổ chức dữ liệu(tt)
#define LH -1 //cây con trái cao hơn
#define EH 0 //cây con trái bằngcâ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;
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
5
Các trường hợp mất cânbằng do lệch trái
T
R
T1
R1
L1
T
R
T1
T2
L1
R21
L21
Cây mất cânbằng tại nút T
TH1: Left-Left
TH2: Left-Right
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
6
Các trường hợp mất cânbằng do lệch phải
T
T1
L
R1L1
T
T1
L
R1T2
R21
L21
Cây mất cânbằng tại nút T
TH3: Right-Right TH4: Right-Left
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
7
Các thao tác trên câycân bằng
Khi thêm hay xoá 1 nút trên cây, cĩ thể làm cho cây
mất tính cân bằng, khi ấy ta phải tiến hành cân
bằng lại.
Cây có khả năng mất cânbằng khi thay đổi chiều
cao:
Lệch nhánh trái, thêm bên trái
Lệch nhánh phải, thêm bên phải
Lệch nhánh trái, hủy bên phải
Lệch nhánh phải, hủy bên trái
Cân bằng lại cây : tìm cách bố trí lại cây sao cho
chiều cao 2 cây con cân đối:
Kéo nhánh cao bù cho nhánh thấp
Phải bảo đảm cây vẫn là Nhịphântìm kiếm
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
8
Cân bằng lại trường hợp 1
T
R
T1
R1
L1
T
R
T1
R1
L1
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
9
Cài đặt cânbằng lại cho trường hợp 1
void LL(AVLTree &T)
{
AVLNode *T1=T->pLeft;
T->pLeft = T1->pRight;
T1->pRight=T;
switch(T1-> balFactor)
{ case LH: T-> balFactor =EH;
T1->balFactor=EH; break;
case EH: T->balFactor=LH;
T1->balFactor =RH; break;
}
T=T1;
}
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
10
Cân bằng lại trường hợp 2
T
R
T1
T2
L1
R21
L21
T2
T
T1
L21
L1
RR21
[...]... T 1-> balFactor=EH; break; case RH: T->balFactor =EH; T 1-> balFactor= LH; break; }T 2-> balFactor =EH; T=T2} 11 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤU trúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Cân bằng lạiEdit Master 3 Click To trường hợp Title Style T T1 L T1 T L1 L 12 R1 R1 L1 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤU trúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Cài đặt cân bằng. ..CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤU trúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Cài đặt cânbằng Mastertrường hợp 2 Click To Edit lại cho Title Style void LR(AVLTree &T) { AVLNode *T1=T->pLeft; AVLNode *T2=T 1-> pRight; T->pLeft=T 2-> pRight; T 2-> pRight=T; T 1-> pRight= T 2-> pLeft; T 2-> pLeft = T1; switch(T 2-> balFactor) { case LH: T->balFactor=RH; T 1-> balFactor=EH; break; case EH: T->balFactor... nút đó bằng thao tác cânbằng thích hợp Việc cânbằng lại chỉ cần thực hiện 1 lần nơi mất cânbằng 16 Hủy 1 nút Edit Master Title Style Click To Hủy bình thường như trường hợp cây NPTK Nếu cây giảm chiều cao: CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤUtrúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Lần ngược về gốc để phát hiện nút bị mất cânbằng Tiến hành cânbằng lại nút đó bằng thao... *T1= T->pRight; T->pRight=T 1-> pLeft; T 1-> pLeft=T; switch(T 1-> balFactor) { case RH: T-> balFactor = EH; T-> balFactor = EH; break; case EH: T-> balFactor = RH; T 1-> balFactor = LH; break; } T=T1 13 } CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤU trúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Cân bằng lạiEdit Master 4 Click To trường hợp Title Style T T2 L T1 T T2 L L21 R21 14 T1 R1 L21 R21 R1 CẤU TRÚC... TRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤU trúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Cài đặt cânbằng Mastertrường hợp 4 Click To Edit lại cho Title Style void RR(AVLTree &T) { AVLNode *T1= T->pRight; AVLNode *T2=T 1-> pLeft; T->pRight = T 2-> pLeft; T 2-> pLeft = T; T 1-> pLeft = T 2-> pRight; T 2-> pRight = T1; switch(T 2-> balFactor) { case RH: T-> balFactor = LH; T 1-> balFactor = EH; break; case EH: T->... T 1-> balFactor = EH; break; case LH: T-> balFactor = EH; T 1-> balFactor = RH; break; } T 2-> balFactor =EH; T=T2;} 15 Thêm 1 nút Edit Master Title Style Click To Thêm bình thường như trường hợp cây NPTK CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 11 CẤUtrúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT 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ânbằng Tiến hành cân bằng. .. THUẬT 11 CẤUtrúcdữliệuvàthuậtgiảiCấuTRÚCDỮLIỆUVÀGIẢITHUẬT Lần ngược về gốc để phát hiện nút bị mất cânbằng Tiến hành cânbằng lại nút đó bằng thao tác cânbằng thích hợp Tiếp tục lần ngược lên nút cha… Việc cânbằng lại co thể lan truyền lên tận gốc 17 . PHÂN TÌM KIẾM CÂN BẰNG
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1
Click To Edit Master Title Style
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT. Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1
Click To Edit Master Title Style
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1
1
NỘI DUNG
CÂY NHỊ PHÂN