Tải bản đầy đủ (.ppt) (35 trang)

B tree cây tìm kiếm nhiều đường

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 (245.24 KB, 35 trang )

1
B-CÂY
B-CÂY
Chương 4
2
Cây tìm kiếm nhiều đường
Cây tìm kiếm nhiều đường

Cây tìm kiếm nhiều đường (Multiway Search
Trees):

Cây tìm kiếm cấp m (m > 2) là sự mở rộng
của cây nhị phân tìm kiếm BST, trong đó
mỗi nút có tối đa m con

Một ứng dụng của cây tìm kiếm nhiều
đường là được sử dụng để truy xuất bộ
nhớ ngoài theo nguyên tắc: “Số lần truy
xuất càng ít càng tốt”

Để thực hiện điều này thì nếu một phần tử
trên bộ nhớ ngoài được truy xuất thì toàn
bộ một nhóm phần tử cũng được truy
xuất theo
3
Cây tìm kiếm nhiều đường
Cây tìm kiếm nhiều đường

Điều nầy dẫn đến một cây được chia
thành các cây con (gọi là trang) và các
phần tử trong một trang sẽ được truy


xuất đồng thời

Ví dụ, cây nhị phân được chia thành các
trang, mỗi trang có 3 nút:
4
Cây tìm kiếm nhiều đường
Cây tìm kiếm nhiều đường

Giả sử mỗi trang có 100 nút và cây này có
1 triệu phần tử thì trung bình chỉ cần
lần truy xuất thay vì
lần ở cây BST
5
B-cây (
B-cây (
Bayer tree)
Bayer tree)

Ta nhận thấy cây cân bằng đòi hỏi phải cân
bằng lại trong quá trình cây bị biến đổi

Việc cân bằng này bao gồm nhiều thao tác
phức tạp và tốn thời gian

Một tiêu chuẩn được R. Bayer đưa ra năm
1970 là mọi trang (trừ trang gốc) chứa ít
nhất là n nút và nhiều nhất là 2*n nút, với n
là hằng số cho trước và được gọi là cấp
của B-cây


Cấu trúc dữ liệu của B-cây cấp n có đặc
tính như sau:
6
B-cây
B-cây

Mỗi trang có tối đa 2*n phần tử

Mỗi trang, ngoại trừ trang gốc chứa ít
nhất n phần tử. Trang gốc được phép
chứa 1, 2, ... , 2*n phần tử

Mỗi trang hoặc là trang lá (không có
con) hoặc có m + 1 trang con, với m là số
phần tử của trang này

Tất cả các trang lá phải có cùng mức

Mỗi phần tử trên một trang có thứ tự
theo khoá tăng dần từ trái qua phải
7
B-cây
B-cây

Ví dụ: B-cây cấp 2 có ba mức sau:

Tất cả các trang chứa 2, 3, hay 4 phần tử
ngoại trừ trang gốc chỉ chứa 1 phần tử

Tất cả các trang lá xuất hiện ở cùng mức 3

8
B-cây
B-cây

Nếu dồn B-cây lại thành một mức duy nhất
bằng cách chèn các trang con vào giữa các
nút trong trang cha của chúng thì được các
giá trị sắp theo thứ tự tăng dần

Đây là sự mở rộng tự nhiên của cây tìm
kiếm nhị phân
9
Cài đặt B-cây
Cài đặt B-cây
const int N = 2; // cấp của B-cây
const int NN = 4; // kích thước trang
typedef struct Page* ref;
struct Node
{
int key; // giá trị của nút
ref pR;// trỏ đến trang con bên phải
int count; // số lần xuất hiện của khóa
// có giá trị bằng key
};
10
Cài đặt B-cây
Cài đặt B-cây
struct Page
{
int m; // số phần tử của trang

ref pL;// trỏ đến trang con bên trái
Node e[NN]; // các nút (phtử) của trang
};
ref root; // trỏ đến trang gốc
11
Các phép toán trên B-cây
Các phép toán trên B-cây

Tìm kiếm và thêm vào B-cây:

Nếu một nút được thêm vào trang chưa
đầy (< 2*n) thì nút đó được thêm vào
trang này

Ngược lại, phải cấp thêm trang mới

Ví dụ, có B-cây cấp 2 như sau:
12
Các phép toán trên B-cây
Các phép toán trên B-cây

Nếu thêm vào nút 22, thực hiện các bước
sau:

Không thể thêm 22 và trang C vì trang này
đã đầy (4 nút)

Do đó, trang C được tách thành hai trang
là C và D (trang mới)


Các nút được phân bố đều vào C và D, nút
giữa (30) được chuyển lên trang cha A
13
Các phép toán trên B-cây
Các phép toán trên B-cây

Cấu trúc mới này vẫn giữ được các tính
chất của B-cây. Các trang tách chứa đúng
n nút

Nút được chuyển lên trang cha có thể làm
nó trang này bị tràn và gây ra sự tách
trang lan truyền
14
Các phép toán trên B-cây
Các phép toán trên B-cây

Giải thuật tìm kiếm và thêm vào như sau:

Gọi x là khóa cần tìm

a là trang hiện tại đang tìm x

h là chiều cao của cây (h = 0: chiều cao
không tăng, h = 1: chiều cao tăng)

v là nút tạm có kiểu Node
void search(int x, ref a, int &h,
Node &v)
{

if(a == NULL)
{

×