Tải bản đầy đủ (.pptx) (26 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 - Trần Minh Thái (2016)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (210.44 KB, 26 trang )

Chương 6. Cây nhiều nhánh: B-Tree
Trần Minh Thái
Email:
Website: www.minhthai.edu.vn

1


Nội dung

1.
2.
3.
4.

Khái niệm
Đặc điểm và cấu trúc
Chèn phần tử vào cây
Xóa phần tử khỏi cây

2


Cây nhiều nhánh: M-Phân

Mỗi node có tối đa M node con
Một cây M-Phân đầy đủ có chiều cao logMN
 Ví dụ cây 5-Phân đầy đủ:

3



Khái niệm

 Thứ tự các khóa tương tự cây nhị phân tìm kiếm
 Mỗi node có M-1 khóa
 M càng lớn cây càng thấp
 Giữ tính chất cân bằng trên cây tìm kiếm M-Phân: B-Cây

4


B-Tree
B-Tree bậc M là cây M-Phân tìm kiếm có các tính chất:






Mỗi node (ngoại trừ gốc) có ít nhất M/2 node con
Node gốc (nếu khơng phải nút lá) có ít nhất 2 nút con
Mọi nút lá đều nằm cùng một mức
Các khóa và cây con được sắp xếp theo cây tìm kiếm

5


B-Tree






Hạn chế số thao tác đọc mỗi lần tìm kiếm trên cây
Thích hợp cho việc tìm kiếm trên bộ nhớ ngoài
Chiều cao cây = logMN, tăng M chiều cao cây giảm rất nhanh

6


Chèn node vào cây

Ý tưởng: Tìm vị trí khóa có thể thêm vào cây. Việc tìm kiếm sẽ kết thúc tại một lá. Khóa mới sẽ
được thêm vào nút lá:

1.

Nếu chưa đầy  Việc thêm hoàn tất

2.

Nếu đầy  Phân đôi nút lá cần thêm:



Tách nút lá ra làm hai nút cạnh nhau trong cùng một mức



Chuyển phần tử giữa lên nút cha


Q trình phân đơi các nút có thể được lan truyền ngược về gốc và kết thúc khi có một nút cha nào
đó cần được thêm một khóa từ dưới lên mà chưa đầy

7


Ví dụ

 Cho B-tree bậc 5 rỗng
 Hãy xây dựng B-Tree theo thứ tự từ trái sang phải cho dãy số sau:

1

12

8

2

25

5

14

28

17


7

52

16

48

68

3

8

26

29

53

55

45


1

12

8


2

25

5

14

28

17

7

Chèn 1

1

Chèn 12

1

12

Chèn 8

1

8


Chèn 2

1

2

52

16

48

68

3

12

8

12

9

26

29

53


55

45


1

12

8

2

25

5

14

28

17

7

52

16


48

68

3

26

29

53

55

45

Do nút gốc đã đầy (4 phần tử)  Chèn 25 vào nút gốc sẽ tách nút gốc thành 2 nút và đưa khóa ở giữa
lên trên tạo thành nút gốc mới

1

2

8

12

25

8


1

2

12

25

10


1

12

8

2

25

5

14

28

17


7

52

16

48

68

3

26

29

53

55

Thêm 5
8

1

2

5

12


25

Thêm 14
8

1

2

5

12

14

11

25

45


1

12

8

2


25

5

14

28

17

7

52

16

48

68

3

26

29

53

55


45

Thêm 28
8

1

2

5

12

14

25

28

Thêm 17, do nút lá bên phải đã đầy nên phân đôi và đưa nút giữa lên trên nút cha (nút gốc)

8

1

2

5


17

12

14

25
12

28


1

12

8

2

25

5

14

28

17


7

52

16

48

68

3

26

29

53

55

45

Thêm 7
8

1

2

5


17

12

7

14

25

28

Thêm 52
8

1

2

5

7

17

12

14


25

13

28

52


1

12

8

2

25

5

14

28

17

7

52


16

48

68

3

26

29

53

55

45

Thêm 16
8

1

2

5

17


12

7

14

16

25

28

52

Thêm 48
8

1

2

5

7

12

17

14


16

25

14

28

48

52


1

12

8

2

25

5

14

28


17

7

52

16

48

68

3

26

29

53

55

45

Thêm 68, do nút lá bên phải đã đầy nên phân đôi nút lá và đưa nút giữa lên nút cha (nút gốc)

1

2


5

7

8

17

12

14

48

16

25

28

52

68

52

68

Thêm 3, do nút lá bên trái đã đầy nên phân đôi nút lá và đưa nút giữa lên nút cha (nút gốc)


3

1

2

5

7

12

8

17

14

48

16

25
15

28


1


12

8

2

25

5

14

28

17

7

52

16

48

68

3

26


29

53

55

45

Thêm 26

3

1

2

5

8

12

7

17

14

48


16

25

26

28

52

68

28

29

52

68

Thêm 29
3

1

2

5

7


12

8

14

17

16

48

25

26
16


1

12

8

2

25

5


14

28

17

7

52

16

48

68

3

26

29

53

55

45

Thêm 53

3

1

2

5

12

7

8

14

17

16

48

25

26

28

29


28

29

52

52

53

68

Thêm 55
3

1

2

5

7

12

14

8

16


17

25

48

26

17

53

55

68


1

12

8

2

25

5


14

28

17

7

52

16

48

68

3

26

29

53

55

45

Thêm 45, do nút lá thứ 3 đầy nên phân đôi và đưa nút giữa lên trên nút cha, nút cha cũng đầy nên
phân đôi tiếp nút cha và đưa nút giữa lên trên, tạo thành nút gốc mới


17

1

2

5

7

3

8

12

14

16

25

26

29

18

28


48

45

52

53

55

68


Bài tập áp dụng

Cho dãy số: 1, 3, 9, 2, 4, 10, 25, 30, 11, 40, 21, 8, 7, 6, 19, 5, 30, 12, 15, 16
Hãy trình bày từng bước vẽ cây B-Tree bậc 4

19


Xóa khóa trên cây

1.
2.

Nếu khóa cần xóa nằm ở nút lá  Xóa
Nếu khóa cần xóa khơng nằm ở nút lá  Xóa khóa cần xóa, đưa khóa có giá
trị gần nhất từ nút lá lên thay thế cho khóa đã xóa


20


Xóa khóa trên cây
Nếu trong trường hợp (1) hay (2), nút lá cịn lại q ít khóa thì xét các nút anh em
kế cận nút đang xét:

3.
4.

Nếu một trong các nút anh em kế cận nút đang xét có số lượng khóa nhiều
hơn số lượng tối thiểu, đưa một khóa của nút anh em lên nút cha và đưa
khóa ở nút cha xuống nút lá có khóa q ít
Nếu tất cả các nút anh em kế cận nút đang xét đều có số lượng khóa vừa đủ
số lượng tối thiểu, chọn một nút anh em kế cận và hợp nhất nút anh em này
với nút lá có khóa q ít.
Nếu nút cha trở nên thiếu khóa, lặp lại q

trình này

21


17

Xóa 68

1


2

5

7

3

8

12

14

16

25

26

29

28

48

45

52


53

55

17
Nút lá

Trường hợp 1

1

2

5

7

3

8

12

14

16

25

26


29

28

48

45

52

Vẫn cịn đủ lượng theo u
22

cầu

53

55

68


17

Khơng phải nút lá

Xóa 8

1


2

5

7

3

8

12

14

16

25

26

29

28

48

45

52


28

48

45

52

53

55

53

55

17
Trường hợp 2

3

1

2

5

12


Cịn q ít khóa

7

14

16

25

26

29

23


17

Xóa 8
Trường hợp 4

3

7

28

48


45

52

Hợp nhất

1

5

2

12

14

16

25

29

26

53

55

17


Cịn q ít khóa

7

1

2

3

5

12

14

16

25

26

29
24

28

48

45


52

53

55


17

Xóa 8
Trường hợp 4

7

28

48

45

52

Hợp nhất

1

2

3


5

12

14

7

1

2

3

5

12

14

16

25

17

16

26


28

25

26

29

53

55

48

29

25

45

52

53

55


×