1. Trang chủ
  2. » Luận Văn - Báo Cáo

PHÂN TÍCH THIẾT KẾ THUẬT TOÁN B-TREES

49 1,9K 10

Đ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 49
Dung lượng 1,39 MB

Nội dung

Vì trong hầu hết các hệ thống, thời gian thực thi của thuật toán cây B-tree được quyết định chính bởi số lượng các thao tác DISK-READ và DISK-WRITE được thực hiện, điều này cho thấy việc

Trang 1

Trần Hữu Tấn

GVHD: TS HOÀNG QUANG

Trang 2

NỘI DUNG TRÌNH BÀY

3.Thủ tục tìm kiếm, tạo: Lê Thị Thanh Thủy

Trang 3

TỔNG QUAN

- B-tree là cấu trúc dữ liệu phù hợp cho việc lưu trữ ngoài do R.Bayer và E.M.McCreight đưa ra năm 1972

- B-tree là cây tìm kiếm cân bằng

- B-tree tương tự như cây đỏ đen

Trang 4

So sánh giữa B-tree và cây Đỏ Đen:

Trang 5

TỔNG QUAN (tt)

Thời gian tìm kiếm trên B-Tree rất nhanh, cho nên cây này thường được dùng để quản lý cơ sở dữ liệu và công

cụ tìm kiếm như Google đều dùng B-Tree

- Sự quay của đĩa

- Sự chuyển động của cần điều khiển

Rãnh từ Trục xoay

Trang 6

TỔNG QUAN (tt)

Có hai thao tác chính mà B-Tree thường sử dụng là:

- Thao tác DISK-READ(x) để đọc đối tượng x vào bộ nhớ

chính trước khi chúng ta yêu cầu những trường của nó

- Thao tác DISK-WRITE(x) được sử dụng để lưu trữ bất cứ thay đổi nào tác động đến các trường của đối tượng x

Vì trong hầu hết các hệ thống, thời gian thực thi của thuật toán cây B-tree được quyết định chính bởi số lượng các thao tác DISK-READ và DISK-WRITE được thực hiện, điều này cho thấy việc sử dụng những thao tác trên càng hiệu quả sẽ dẫn đến việc đọc và ghi thông tin càng nhiều Vì vậy, một nút của B-tree thường có kích thước rộng bằng với toàn bộ một trang trên đĩa Do đó số lượng nút con của nó có thể bị giới hạn bởi kích thước một trang trên đĩa

Trang 7

VÍ DỤ MINH HỌA

 Một B-Tree có khóa là các phụ âm tiếng anh

root[T]: Con trỏ trỏ đến nút gốc

Trang 8

ĐỊNH NGHĨA B-TREE

 Một B-Tree có gốc T có các tính chất:

– Một nút x trên cây có các trường sau:

• n[x] : Số các khóa hiện tại được lưu tại nút x.

• key i [x] : Một khóa thứ i được lưu tại nút x.

(với 1<=i<j<=n[x], thì keyi [x]<=keyj [x])

• leaf[x] : nhận giá trị TRUE nếu x là nút lá, nhận giá trị FALSE nếu x không là nút lá (nút thường).

key1[x]

key2[x]

leaf[x]=false

Trang 9

TÍNH CHẤT B-TREE

- Mỗi nút thường x chứa n[x] + 1 con trỏ: c 1 [x], c 2 [x], ,

c n[x]+1 [x] trỏ tới các nút con của nó Các nút lá không có

nút con do vậy trường ci của nó không được định nghĩa

c1[x]

Trang 10

TÍNH CHẤT B TREE (tt)

– Các khoá key i [x] tách thành các vùng khóa và được lưu trữ thành mỗi cây con tương ứng: nếu k i là một

khoá bất kỳ được lưu trữ trong cây con có gốc là c i [x] thì

k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤··· ≤ key n[x] [x] ≤ k n[x]+1

– Tất cả các nút lá có cùng chiều cao h

k1 = C

key1[x]=D

Trang 11

TÍNH CHẤT B-TREE (tt)

– Số lượng các khoá của một nút nằm trong một biên giới hạn được diễn tả bằng một số nguyên có giá trị không đổi t (t ≥ 2) được gọi là mức tối thiểu của B-

Tree:

• Các nút không phải là nút gốc phải có ít nhất t-1 khoá.

• Mỗi nút thường trừ nút gốc có ít nhất t nút con.

• Nếu cây không rỗng thì nút gốc phải có ít nhất 1 khoá.

• Mỗi nút có thể chứa tối đa 2t-1 khoá (được gọi nút

đầy).

Trang 12

ĐỊNH LÝ

 Nếu n ≥ 1 thì với bất kỳ B-Tree T n khóa, có mức tối

thiểu t ≥ 2 thì có chiều cao:

) 2

1 (

Trang 13

CÁC PHÉP TOÁN CƠ BẢN TRÊN B-TREE.

Trong phần này, ta trình bày các chi tiết của các phép toán B-TREE-SEARCH, B-TREE-CREATE, và B-TREE-INSERT Trong các thủ tục này, ta chấp nhận 2 quy ước:

 Gốc của B-Tree luôn nằm trong bộ nhớ chính, để không bao giờ cần thực hiện một DISK-READ trên gốc; tuy nhiên, ta cần một DISK-WRITE của gốc, mỗi khi nút gốc thay đổi

 Mọi nút được chuyền dưới dạng các tham số phải

có sẵn một phép toán DISK-READ được thực hiện trên chúng

Trang 14

TÌM KIẾM KHÓA TRONG B-TREE

Tìm kiếm trong một B-Tree cũng giống như tìm kiếm trong một cây tìm kiếm nhị phân, thay vì thực hiện rẽ nhánh “2-chiều” tại mỗi nút, ta thực hiện rẽ nhánh đa chiều theo số lượng các con của nút.Tại mỗi nút trong x, ta thực hiện rẽ nhánh (n[x] + 1) chiều

 B-TREE-SEARCH chấp nhận dưới dạng nhập liệu một biến trỏ đến nút gốc x của một cây con và một khóa k để tìm kiếm trong cây con đó

 Như vậy lệnh gọi trên cùng có dạng SEARCH (root[T], k) Nếu k nằm trong B-Tree, B-TREE-SEARCH trả về cặp có thứ tự (y, i) bao gồm một nút y và một chỉ số i sao cho key[y] = k Ngược lại, giá trị NIL được trả về

Trang 15

B-TREE-TÌM KIẾM KHÓA TRONG B-TREE

Trang 16

Ví dụ: Cho B-Tree có độ cực tiểu t=2 Tìm khóa 35?

Trang 17

2 B-TREE-SEARCH(C, 35) i=2, DISK-READ(c 2 [C])

3 B-TREE-SEARCH(H, 35) i=2, return (H, 2)

TÌM KIẾM KHÓA TRONG B-TREE

Trang 18

Nhận xét:

 Số lượng các trang đĩa mà B-TREE-SEARCH truy cập

là O(h) = O(log t n), ở đó h là chiều cao của B-Tree, t là độ

cực tiểu và n là số lượng khóa trong B-Tree

 Do n[x] < 2t, nên thời gian mà vòng lặp while của các dòng 2-3 trải qua trong mỗi nút là O(t), và tổng thời gian CPU là O(th) = O(t logt n).

TÌM KIẾM KHÓA TRONG B-TREE

Trang 19

 Để xây dựng một B-Tree, trước tiên ta dùng CREATE để tạo một nút gốc trống rồi gọi B-TREE-INSERT để

B-TREE-bổ sung các khóa mới

 Cả hai thủ tục này dùng một thủ tục phụ NODE, phân bổ một trang đĩa sẽ được dùng làm một nút mới trong O(1) thời gian

ALLOCATE- Ta có thể mặc nhận một nút mà ALLOCATE-NODE tạo không yêu cầu DISK-READ

TẠO MỘT B-TREE TRỐNG

Trang 21

CHÈN MỘT KHÓA VÀO B-TREE

 Tách một nút đầy

 Chèn một khoá vào B-tree

Trang 22

TÁCH MỘT NÚT ĐẦY

 Khi chèn khóa vào một lá của cây, để tránh trường hợp

chèn khóa vào một lá đã đầy, ta cần một thao tác tách (split) một nút đầy y Thao tác này gồm các bước:

– Xác định khoá giữa (trung tuyến) của nút đầy y là khoá

key t [y].

– Tách nút đầy y tại khóa giữa của nó thành hai nút, mỗi nút có t - 1 khóa và t nút con.

– Di chuyển khóa trung tuyến lên nút cha của y là x (x phải

là nút không đầy) vào một vị trí “thích hợp”

Trang 23

VÍ DỤ TÁCH MỘT NÚT ĐẦY

 Bậc tối thiểu của cây là t =4

 Số nút tối đa của một nút là 7

 Tách nút đầy y là con của nút không đầy x

Trang 25

5 do key j [z] key j + t [y]

6 if not leaf [y]

khóa lớn hơn và t nút con của y

Điều chỉnh số khóa của y

Trang 26

 B-TREE-SPLIT-CHILD cần:

Θ(t) thời gian chiếm CPU (do các vòng lặp 4-5 và 7-8) – O(1) lần đọc đĩa

TÁCH MỘT NÚT ĐẦY (TT)

Trang 27

 Chèn vào nút lá

 Để chèn khoá mà chỉ cần một lượt đi từ gốc tới một lá, cần phải tách mọi nút đầy trên đường đi từ gốc tới nút lá Nhằm đảm bảo việc tách một nút đầy y thì nút cha của nó là một nút không đầy

 Thủ tục B-TREE-INSERT(T, k) để chèn một khoá k vào một cây B T Gồm có các bước sau:

– Nếu nút gốc của T đầy, thủ tục này sẽ gọi thủ tục

B-TREE-SPLIT-CHILD để tách nút gốc đầy

– Gọi thủ tục chèn khoá vào cây mà nút gốc không đầy

CHÈN MỘT KHÓA VÀO B-TREE

Trang 29

 Các trường hợp xảy ra khi chèn một khoá vào một B-tree

– Chèn khoá k vào một nút không đầy

– Chèn khoá k vào một nút mà trên đường đi gặp:

• Nút gốc đầy (nút gốc tại thời điểm gọi đệ quy)

• Nút lá đầy

CHÈN MỘT KHÓA VÀO CÂY B

Trang 30

 B-tree có mức tối thiểu t=3 :

 Chèn B vào nút không đầy: Đây là một phép chèn đơn giản vào một nút lá

Trang 31

 Chèn Q vào cây: Nút R-S-T-U-V được tách thành hai nút chứa R-S và U-V, khóa T được dời lên đến gốc, và Q được chèn vào nút trái của hai nửa (nút R-S)

Trang 32

 Chèn L vào cây: Gốc được tách ngay, bởi nó đầy và cây B tăng trưởng theo chiều cao lên 1 Khóa L được chèn vào lá chứa J-K

x

L

VÍ DỤ CHÈN KHI NÚT GỐC ĐẦY

Trang 35

CHÈN MỘT KHÓA VÀO CÂY CON MÀ NÚT GỐC

KHÔNG ĐẦY

1 i n[x]

2 if leaf [x]

3 then while i 1 and k < key i [x]

4 do key i+1 [x] key i [x]

gọi đệ quy đi xuống để chèn k

đầy sử dụng thủ tục tách.

nút nào trong 2 nút vừa tách.

Trang 36

ĐỘ PHỨC TẠP KHI CHÈN MỘT KHÓA

VÀO MỘT B-TREE

 Thủ tục B-TREE-INSERT cần:

– O(h) số lần truy cập đĩa

– Thời gian chiếm CPU là O(t h) = O(t log t n)

Trang 40

MỘT SỐ ĐẶC ĐIỂM CỦA THAO TÁC XÓA

 Có thể xóa ở bất cứ nút nào

 Việc xóa đòi hỏi các nút có thể được bố trí lại

 Thủ tục B-TREE-DELETE được yêu cầu xóa k ra khỏi cây con có gốc tại nút x Lúc đó thủ tục xóa yêu cầu

trước khi đệ qui xuống một nút con thì nút con đó phải

có số khóa ≥ t

Trang 44

B-TREE-DELETE(x, k)

Trường hợp 2c:

Nếu cả nút con trái

và nút con phải của

xóa và nút con phải

vào nút con trái

Trang 46

E L P T X

J K

Trang 48

B-TREE-DELETE(x, k)

Thủ tục B-TREE-DELETE cần

 Số truy cập lên đĩa là O(h) vì có O(1) lần gọi

DISK-READ và DISK-WRITE giữa các lời gọi đệ quy của thủ tục

 Thời gian CPU của thủ tục là

Trang 49

Cảm ơn thầy và các đồng chí đã

lắng nghe!

Ngày đăng: 11/04/2015, 22:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w