36
1 TS Nguyn Mnh Hùng – BM CNPM CU TRÚC DLIU NÂNG CAO Các kiến thc yêu cu Tóm tt ni dung môn hc • Phương pháp kim tra đánh giá Tài liu tham kho

CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

1TS Nguyễn Mạnh Hùng – BM CNPM

CẤU TRÚC DỮ LIỆU NÂNG CAO

• Các kiến thức yêu cầu• Tóm tắt nội dung môn học• Phương pháp kiểm tra đánh giá• Tài liệu tham khảo

Page 2: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

2TS Nguyễn Mạnh Hùng – BM CNPM

Các kiến thức yêu cầu

• Các thuật toán và cấu trúc dữ liệu cơ bản• Ngôn ngữ lập trình: C++, nhưng không sử

dụng class.• Công cụ: VS C++, ứng dụng dạng console.

Page 3: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

3TS Nguyễn Mạnh Hùng – BM CNPM

Tóm tắt nội dung môn học• Cây cân bằng• Cây đỏ đen (red black tree)• Cây 2-3-4• Interval Heap• Priority Search Tree• B-Tree• Phương pháp phân tích khấu trừ• Cấu trúc đóng nhị thức• Cấu trúc đóng Fibonacci• Cấu trúc các tập rời nhau

Page 4: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

4

Ứng dụng

• Ứng dụng trong đánh chỉ mục các CSDL lớn.

• Ứng dụng xây dựng thuật toán tốc độ cao định tuyến gói tin trong router.

• Ứng dụng khai phá dữ liệu hiện năng cao trong CSDL lớn, nhiều chiều.

• Ứng dụng trong xử lý dữ liệu không gian

• Ứng dụng trong xử lý dữ liệu Multimedia

TS Nguyễn Mạnh Hùng – BM CNPM

Page 5: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

5TS Nguyễn Mạnh Hùng – BM CNPM

Phương pháp kiểm tra đánh giá

• Điểm chuyên cần: 10%• Kiểm tra giữa học phần (bắt buộc): 20%• Thi kết thúc học phần (bắt buộc): 70%

Page 6: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

6TS Nguyễn Mạnh Hùng – BM CNPM

Tài liệu tham khảo

• Slides bài giảng môn học• Advanced Data Structures. Cambridge University

Press - 2008; PETER BRASS.• Introduction to Algorithms. McGraw Hill - 1990;

Thomas H. C., Charles E.L., and Ronald L.R. • Giáo trình thuật toán. Thống kế 2002. Nhóm Ngọc

Anh Thư dịch • Data Structures, Algorithms, and Object-Oriented

Programming; McGraw Hill; Gregory Heilleman -1996.

• Algorithms and Data Structures in C++; Tác giả Alan Parker,1993

Page 7: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

7TS Nguyễn Mạnh Hùng – BM CNPM

Lecture 1: Cây cân bằng• Cây nhị phân tìm kiếm (NPTK) có thể bị suy

biến thành danh sách tuyến tính.• Khi đó thời gian tìm kiếm là O(N). Để tăng

tốc độ tìm kiếm thì chiều cao của cây phải nhỏ.

• Để tăng tốc độ tìm kiếm thì chiều cao của cây NPTK phải là O(log N). Các cây NPTK như thế gọi là balanced binary search trees.

• Examples are AVL tree, red-black tree.

Page 8: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

8TS Nguyễn Mạnh Hùng – BM CNPM

AVL Tree (Adelson-Velskii,Landis 1962 )

Chiều cao của nút:• Chiều cao của nút lá bằng 1• The height of an internal node is the maximum height

of its children plus 1

Page 9: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

9TS Nguyễn Mạnh Hùng – BM CNPM

AVL Tree• Cây AVL là cây NPTK trong đó :

– Mọi nút trên cây thì chiều cao của cây con trái và chiều cao của cây con phải chênh lệch nhau không quá 1

Page 10: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

10TS Nguyễn Mạnh Hùng – BM CNPM

AVL Tree• X gốc của cây AVL có chiều cao h.• Nh số nút tối thiểu trên cây chiều cao h.• Theo định nghĩa, ta có

2

2

21

2

12

1

−−

>+≥

++≥

h

h

hhh

N

N

NNN

ihi

h NN *22 −> i=(h-1)/2;

( 1)/22

log ( 1) / 2

(log 1)*2

hN

N h

N h

−>> −+ >

Page 11: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

11TS Nguyễn Mạnh Hùng – BM CNPM

Các phép quay • Khi thực hiện các phép toán (insertion or deletion),

chúng ta cần phải biến đổi cây để đảm bảo tích chất cân bằng.

• Có hai dạng quay single rotations or double rotations.

C

x

y

AB

Before Rotation

y

x

AB C

After Rotation

e.g. Single Rotation

Page 12: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

12TS Nguyễn Mạnh Hùng – BM CNPM

Các phép quay (cont.)• Khi thêm/xóa có thể làm thay đổi chiều cao của

cây.• Khi đó điều kiện cân bằng có thể bị vi phạm.

Chẳng hạn tại nút x sự khác nhau của left(x) và right(x) là 2.

• Áp dụng các phép quay tại nút x để hiệu chỉnh cây.

Page 13: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

13TS Nguyễn Mạnh Hùng – BM CNPM

Case 1: Cây lệch trái

Page 14: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

14TS Nguyễn Mạnh Hùng – BM CNPM

Case 1.1: Quay đơn phải T1 quanh T

Page 15: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

15TS Nguyễn Mạnh Hùng – BM CNPM

Case 1.2: Quay đơn phải T1

Page 16: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

16TS Nguyễn Mạnh Hùng – BM CNPM

Case 1.3: Quay kép Left-Right với T2

Quay trái T2 quanh T1, Quay ph ải T2 quanh T

Page 17: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

17TS Nguyễn Mạnh Hùng – BM CNPM

Case 2: Cây lệch phải

Page 18: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

18TS Nguyễn Mạnh Hùng – BM CNPM

Case 2: Cây lệch phải (Cont.)

• Các trường hợp cây bị lệch phải ta thực hiện các phép quay đơn và quay kép tương tự như trương hợp cây lệch trái nhưng theo chiều ngược lại.

Page 19: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

19TS Nguyễn Mạnh Hùng – BM CNPM

Insertion• Tiến hành tương tự như thêm khóa trong CNPTK.

• Kiểm tra các nút trên đường dẫn từ nút mới thêm đến gốc. Với mỗi nút x bắt gặp trên path kiểm tra left(x) và right(x). Nếu đã thỏa mãn đk cân bằng thì bỏ qua và xét tiếp nút ở trên. Nếu không thỏa mãn thì phải tiến hành quay đơn hoặc kép.

• Với phép thêm nút, phải quay tối đa một lần (hoặc quay đơn hoặc quay kép)

Page 20: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

20TS Nguyễn Mạnh Hùng – BM CNPM

Insertion • Giả sử x là nút có sự chênh lệnh của left(x) và

right(x) lớn hơn 1 (bằng 2).• Giả sử chiều cao của x là h+3• Có 4 TH sau:

– Chiều cao của left(x) là h+2 (height of right(x) is h)• H of left(left(x)) is h+1 ⇒ single rotate with left child• H of right(left(x)) is h+1 ⇒ double rotate with left child

– Chiều cao của right(x) là h+2 (height of left(x) is h)• H of right(right(x)) is h+1 ⇒ single rotate with right child• H of left(right(x)) is h+1 ⇒ double rotate with right child

Page 21: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

21TS Nguyễn Mạnh Hùng – BM CNPM

Single rotationThêm nút mới vào cây con A làm cho chiều cao của cây con A tăng lên 1 (bằng h+1). ĐK cân bằng bị vi phạm tại nút x.� chiều cao của left(x) is h+2� chiều cao của right(x) is h.� quay phải nút y quanh nút x.

Nghiêng trái Nghiêng ph ải

Page 22: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

22TS Nguyễn Mạnh Hùng – BM CNPM

Single rotation

Single rotation takes O(1) time.Insertion takes O(log N) time.

Thêm nút vào cây con C. ĐK cân bằng bị vi phạm tại nút x.

Page 23: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

23TS Nguyễn Mạnh Hùng – BM CNPM

5

3

1 4

Insert 0.8

AVL Tree

8

0.8

5

3

1 4

8

x

y

A

B

C

3

51

0.8 4 8After rotation

Page 24: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

24TS Nguyễn Mạnh Hùng – BM CNPM

Double rotationThêm nút vào cây con B1 or B2. ĐK cân bằng bị vi phạm tại nút x.Quay trái z quanh y; quay phải z quanh x

also called left-right rotate

Page 25: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

25TS Nguyễn Mạnh Hùng – BM CNPM

Double rotationThêm nút vào cây con B1 or B2. ĐK cân bằng bị vi phạm tại nút x.Quay phải z quanh y; quay trái z quanh x

also called right-left rotate

Page 26: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

26TS Nguyễn Mạnh Hùng – BM CNPM

5

3

1 4

Insert 3.5

AVL Tree

8

3.5

5

3

1 4

8

4

5

1

3

3.5After Rotation

x

y

A z

B

C

8

Page 27: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

27TS Nguyễn Mạnh Hùng – BM CNPM

An Extended Example

Insert 3,2,1,4,5,6,7, 16,15,14

3

Fig 1

3

2

Fig 2

3

2

1

Fig 3

2

1 3Fig 4

2

1 3

4Fig 5

2

1 3

4

5

Fig 6

Single rotation

Single rotation

Page 28: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

28TS Nguyễn Mạnh Hùng – BM CNPM

2

1 4

53

Fig 7 6

2

1 4

53

Fig 8

4

2 5

61 3

Fig 9

4

2 5

61 3

7Fig 10

4

2 6

71 3

5 Fig 11

Single rotation

Single rotation

Page 29: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

29TS Nguyễn Mạnh Hùng – BM CNPM

4

2 6

71 3

5 16

Fig 12

4

2 6

71 3

5 16

15Fig 13

4

2 6

151 3 5

167Fig 14

Double rotation

Page 30: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

30TS Nguyễn Mạnh Hùng – BM CNPM

5

4

2 7

151 3 6

1614

Fig 16

4

2 6

151 3 5

167

14

Fig 15

Double rotation

Page 31: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

31TS Nguyễn Mạnh Hùng – BM CNPM

Deletion • Xóa nút x như trong CNPTK.• Kiểm tra các nút trên path từ nút thay thế đến nút

gốc. Với mỗi nút x bắt gặp trên path, kiểm tra left(x) và right(x). Nếu thõa mãn ĐK cân bằng thì xét tiếp nút ở trên, nếu không thõa mãn thì thực hiện phép quay tương ứng.

• Với phép xóa nút thì sau khi thực hiện phép quay ở nút x, chúng ta vẫn có thể phải thực hiện phép quay ở các nút trên của x. Vì vậy sau khi quay chúng ta vẫn phải tiếp tục xét các nút ở phía trên

Page 32: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

32TS Nguyễn Mạnh Hùng – BM CNPM

Single rotations in deletion

rotate with left child

Xóa nút trên cây con C.

Page 33: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

33TS Nguyễn Mạnh Hùng – BM CNPM

Single rotations in deletion

rotate with right child

Xóa nút trên cây con A.

Page 34: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

34TS Nguyễn Mạnh Hùng – BM CNPM

Double rotationXóa nút trên cây con C.

also called left-right rotate

Page 35: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

35TS Nguyễn Mạnh Hùng – BM CNPM

Double rotationXóa nút trên cây con A.

also called right-left rotate

Page 36: CẤU TRÚC DỮ LI ỆU NÂNG CAO - WordPress.com• Ki ểm tra các nút trên đường d ẫn t ừ nút mới thêm đế n g ốc. Với mỗi nút x b ắt g ặp trên path

36TS Nguyễn Mạnh Hùng – BM CNPM

Ví dụ xóa nút X

X