1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 3 PGS.TS. Trần Cao Đệ

54 733 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 54
Dung lượng 1,22 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cây tìm kiếm nhị phân binary search tree  Cây tìm kiếm nhị phân TKNP là cây nhị phân mà khoá tại mỗi nút lớn hơn khoá của tất cả các nút thuộc cây con bên trái và nhỏ hơn khoá của tất

Trang 1

Phần 2: Các giải thuật nâng cao

Chương 3: Cây cân bằng Balanced trees

PGS TS TRẦN CAO ĐỆ Đại Học Cần Thơ

2013

Trang 2

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

binary search tree

 Cây tìm kiếm nhị phân

(TKNP) là cây nhị phân mà khoá tại mỗi nút lớn hơn khoá của tất cả các nút thuộc cây con bên trái và nhỏ hơn khoá của tất cả các nút thuộc cây con bên phải.

typedef <kiểu dữ liệu của khoá> KeyType;

typedef struct Node{

15

35

37

Trang 3

thêm một khoá vào cây TKNP

void InsertNode(KeyType x,Tree& Root ){

/* thêm nút mới chứa khoá x */

15

35

37

Trang 4

15

Trang 5

Xóa một nút trên cây TKNP

KeyType DeleteMin (Tree& Root ){

else if (x > Root->Key) DeleteNode(x,Root->Right);

else if ((Root->Left==NULL) && (Root->Right==NULL)) Root=NULL; else

if (Root->Left == NULL) Root = Root->Right;

else if (Root->Right==NULL) Root = Root->Left;

else Root->Key = DeleteMin(Root->Right);

}

Trang 6

Phân tích BST

 Tìm kiếm một nút trên cây TKNP

– Mất O(1) duyệt trên mỗi nút

– Mỗi lần duyệt đi sâu xuống một mức

– Vậy thời gian tìm kiếm là O(h) với h là chiều cao của cây

 Thời gian tìm kiếm 1 nút, thêm một nút, xóa một nút trên cây TKNP là O(h), với h là chiều cao của cây TKNP

 Chiều cao của cây TKNP có n nút: Logn ≤ h ≤ n

Trang 7

Cây AVL

 Trong trường hợp xấu nhất

thời gian thực hiện các phép toán trên BST là O(n)

 Cân bằng AVL

– Do Adelson Velski và Landis

– AVL: Cây TKNP mà chiều cao của hai cây con của mọi nút chênh lệch nhiều nhất là 1

 Trên cây AVL các phép tìm

kiếm, thêm, xoa một nút là

2 h/2+1 – 1 < n h/2 +1 < log 2 (n + 1)

h < 2 log 2 (n + 1)

 Phân tích sâu sắc theo số Fibonacci, giới

hạn trên là 1.44 log(n + 2)

Trang 8

Thêm một nút vào cây AVL

 Đầu tiên thêm một nút vào cây TKNP Cây có thể mất cân bằng.

 Cân bằng lại

– Xét cây AVL: tree T=(r,Tl,Tr) trong đó Tl có chiều cao hl và

Tr có chiều cao hr

– Giả sử nút thêm vào trên Tr.

 Nếu hl=hr+1: sau khi thêm vẫn cân bằng

 Nếu hl=hr : sau khi thêm vẫn cân bằng

 Nếu hl=hr-1 thì sau khi thêm sẽ mất cân bằngcân bằng lại

– Tương tự nếu thêm nút vào Tl

Trang 9

Single Rotation-RR

RR rotation

Trang 10

Single rotation

LL

LL

Trang 11

Double rotation-LR

LR

Trang 12

Double rotation-RL

RL

Trang 13

Các định lý

 4 phép quay LL, RR, LR, và RL phủ toàn bộ các trường hợp cần phải cân bằng lại

 Trường hợp cây AVL trở nên mất cân bằng khi thêm một nút chỉ cần một phép quay để làm cho cây cân bằng lại.

 Trường hợp cây AVL trở nên mất cân bằng

khi Xóa một nút có thể cần tới O(log n) phép

quay để làm cho cây cân bằng lại (từ nút mất cân bằng đến gốc).

Trang 15

Xóa nút 4

4

Trang 16

AVL Trees Implementation in java

 See 3.6.1 chapter 3, Algorithm design, Goodrich

Trang 17

d-cây

 Cây đa phân: là cây mỗi nút có

từ hai con trở lên

 Cây có thứ tự: các nút có tt

 Nút v là d-nút: V có d≥2 nút con

 Cây tìm kiếm đa phân

(multi-way search tree) là cây có thứ

tự với các tính chất sau:

– Mỗi nút trong là một d-nút có ít nhất 2 nút con.

– Mỗi nút lưu trữ một tập hợp các phần tử dạng (k,x),

 k là khóa

 x là giá trị kết hợp với khóa

 Mỗi d-nút (có các nút con

v1, ,vd) sẽ lưu d-1 phần tử dạng (k1,x1), …, (kd-1,xd-1) và mỗi phần tử (k,x) lưu trong cây con gốc vi phải thỏa mãn: ki-1 ≤ k < ki

( k0= -∞ còn kd = +∞)

 Định lý: cây tìm kiếm đa phân chứa n phần tử

có (n+1) nút ngoài

Trang 18

B-Cây trong giáo trình GT của Nguyễn Văn Linh

Trang 19

Cây 2-3-4 hoặc cây (2,4)

 Cây (2,4) là 4-cây cân

bằng:

– Mỗi nút có tối đa 4 nút con

– Các nút lá cùng một độ sâu

Trang 20

3, 4

5, 12

156,10

Trang 21

 Ta luôn có thể giả sử phần tử bị xóa nằm tại nút v là lá

 Nếu phần tử bị xóa là pt thứ i của nút z, tức là (ki,xi), là nút trong, ta đổi (ki,xi) với một phần tử thích hợp:

– Tìm nút cực phải trên cây con thứ i của z, gọi đó là nút v

– Đổi chổ (ki,xi) với phần tử cuối cùng của v

 Việc xóa như trên:

– bảo toàn độ sâu

– Không bảo toàn điều kiện về số phần tử

 chuyển phần tử từ anh em (3-nút, 4-nút) sang, hoặc

 Kết hợp 2 nút

Trang 24

Hiệu quả của cây (2,4)

 Thêm, xóa, tìm một phần tử với thời gian O(logn)

Trang 25

Cây đỏ-đen

red – black trees

 Cây đỏ đen là cây TKNP với các nút được tô màu

số nút đen tiền bối)

 Định lý: Cây đỏ-đen chứa n nút sẽ có độ cao O(Logn)

Trang 27

Tương đương giữa cây đỏ đen và cây (2,4)

Trang 29

Thêm một phần tử vào cây đỏ đen

 Thêm phần tử có khóa x vào cây đỏ đen

– Tìm kiếm và thêm vào cây TKNP

– Tô màu: Đen nếu là ROOT, Đỏ ngược lại

– Như vậy:

Tính chất cân bằng “đen” bảo toàn

Tính chất nút đỏ có thể bị vi phạm : Cha nút mới có thể

là nút đỏ (double red)

– Gọi z là nút mới thêm, v là cha của z: Nếu v là nút

đỏ thì cha của v là u phải là nút đen Gọi w là sibling của v.

Trang 30

double red: Tô màu lại

Trường hợp 1: w là nút đen

10z

a,b,c là 3 nút theo thứ tự duyệt trung tự

Trang 31

double red: Tô màu lại

Trường hợp 1: w là nút đỏ

10z

u

3020

Trang 34

Ví dụ: đưa các nút 4,7,12, 15, 3, 5, 14, 18, 16,

17 vào cây đỏ đen

74

Trang 36

17

Trang 37

17

Trang 38

RB-INSERT(T, x){

BST-TREE-INSERT(T, x)

color[x] ← RED //only RB property 3 can be violated

while (x ≠ root[T] and color[p[x]] = RED) do {

Trang 39

Case 1

Là một cây đỏ đen hợp lệ (Gốc đen, các nhánh đều có cùng số nút đen)

Trang 40

Case 2, 3

Trang 41

Định lý

 Thêm một phần tử vào cây đỏ đen chứa n nút cần O(logn) phép recoloring và O(1) phép quay để cấu trúc lại cây.

Trang 42

Xóa một nút trên cây đỏ đen

 Tìm kiếm và xóa phần tử trên cây TKNP

– Ta luôn xóa nút lá hoặc nút chỉ có 1 nút con

– Gọi v là nút bị xóa, w là nút con ngoài của v, r là nút anh em của w, x là nút cha của v

 Xóa v và w, cho r là con của x

Trang 44

 Nếu v đen và r cũng đen:

– Sau khi xóa thì r được đặt màu “giả” double-black)

– Cấu trúc lại bộ 3 nút ( 3-nodes restructuring)

Trang 45

Trường hợp 1: nút y anh em của r là đen, nút y có một con màu đỏ (z) Gọi a,b,c là ba nút x,y,z theo thứ tự duyệt trung tự

Trang 46

Trường hợp 2: nút y anh em của r là đen, nút y có hai

Trang 47

Nếu x đen, tô màu lại thì x trở thành double

Trang 48

Trường hợp 3: nút y anh em của r màu đỏ

Adjustment: IF (y == right(x)) THEN z=right(y)

Then, apply case 1 or case 2 without reappearing double black

Trang 53

14

54

714

54

7

recoloring

Trang 54

Red Black Trees Implementation in java

 See 3.6.1 chapter 3, Algorithm design,

Goodrich

Ngày đăng: 17/04/2015, 15:23

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm