Tải bản đầy đủ (.pdf) (72 trang)

Xử lý hiệu quả câu truy vấn hỗn hợp giá trị khoảng và giá trị đơn trong CSDL quan hệ

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 (1.49 MB, 72 trang )

Thanh Nga Pisces - HHX

MỤC LỤC
LỜI NÓI ĐẦU .......................................................................................... 3
NỘI DUNG ............................................................................................... 4
CHƢƠNG 1. TÌM HIỂU BÀI TOÁN XỬ LÝ TRUY VẤN TRONG CƠ
SỞ DỮ LIỆU .......................................................................................... 4
1.1.Giới thiệu bài toán xử lý truy vấn ................................................. 4
1.2.Vấn đề .......................................................................................... 5
1.3.Cách giải quyết ............................................................................. 5
1.4.Nghiên cứu trước đây ................................................................... 5
1.5.Cách giải quyết, cách khắc phục bất cập, ưu điểm........................ 6
1.6.Cơ sở lý luận ................................................................................ 6
CHƢƠNG 2. TÌM HIỂU CẤU TRÚC CÂY KHOẢNG ........................... 7
2.1.Sơ lược về khoảng ........................................................................ 8
2.2.Cây khoảng – định nghĩa của James Stewart .............................. 11
2.2.1 Định nghĩa ................................................................................... 11
2.2.2.Cấu trúc lƣu trữ khoảng ................................................................ 12
2.2.3.Truy vấn khoảng .......................................................................... 16
2.2.4.Thêm một khoảng ........................................................................ 17

2.3.Cây khoảng – định nghĩa của Edelsbrunner ............................... 19
2.3.1.Định nghĩa ................................................................................... 19
2.3.2.Cấu trúc dữ liệu ............................................................................ 20
2.3.3.Stabbing Query – Truy vấn điểm .................................................. 21

2.4.Phân loại cây khoảng ................................................................. 22
CHƢƠNG 3.TÌM HIỂU CẤU TRÚC CÂY KHOẢNG QUAN HỆ VÀ
ỨNG DỤNG CỦA NÓ TRONG XỬ LÝ TRUY VẤN .......................... 26
3.1.Việc quản lý khoảng trong cơ sở dữ liệu ..................................... 26
3.1.1.Cấu trúc bộ nhớ chính .................................................................. 26


3.1.2.Cấu trúc lƣu trữ thứ cấp................................................................ 26
3.1.3.Cấu trúc lƣu trữ quan hệ ............................................................... 27

3.2.Dữ liệu khoảng và dữ liệu quan hệ ............................................. 27
3.3.Tìm hiểu cấu trúc cây khoảng quan hệ........................................ 29
3.3.1 Tổng quan cây khoảng quan hệ .................................................... 29
3.3.2 Cấu trúc dữ liệu động ................................................................... 29
3.3.3 Cấu trúc cây khoảng quan hệ ........................................................ 31
3.3.5 Sự tăng cƣờng động của không gian dữ liệu ................................. 36

1


Thanh Nga Pisces - HHX

3.3.6 Phân tích chiều cao cây ................................................................ 39

3.4.Ứng dụng của cây khoảng quan hệ trong xử lý truy vấn ............. 40
3.4.1.Mối quan hệ giữa các khoảng thông thƣờng ................................. 41
3.4.2.Quản lý dữ liệu khoảng và dữ liệu giá trị sử dụng cây RI ............. 42
3.4.3.Thuật toán xử lý truy vấn ............................................................. 43
3.4.4.Một số kỹ thuật mới nâng cao thuật toán RI-tree .......................... 53

CHƢƠNG 4. CÀI ĐẶT THUẬT TOÁN .................................................. 57
4.1.Cài đặt cây khoảng quan hệ trên SQL và truy vấn khoảng.......... 57
4.2.Tích hợp cây khoảng quan hệ trên ứng dụng, truy vấn duyệt cây 61
4.3.Đánh giá thuật toán .................................................................... 64
KẾT LUẬN ............................................................................................. 67
5.1.Kết quả đạt được ........................................................................ 67
5.2.Hướng phát triển ........................................................................ 67

TÀI LIỆU THAM KHẢO...................................................................... 68
PHỤ LỤC................................................................................................ 69

2


Thanh Nga Pisces - HHX

LỜI NÓI ĐẦU
Trong những năm gần đây, nhiều kiểu dữ liệu với những mục đích
đặc biệt có sẵn trong cơ sở dữ liệu quan hệ. Thay vì cung cấp những hệ
thống với những ứng dụng cụ thể, chẳng hạn nhƣ cơ sở dữ liệu không gian,
đa phƣơng tiện hay cơ sở dữ liệu XML cho mỗi vùng xác định, sự thực thi
cơ sở dữ liệu giới thiệu ngày càng nhiều kiểu dữ liệu mới và nhiều chức
năng quản lý tƣơng ứng trực tiếp vào hệ quan hệ, hoặc bằng sự tích hợp
trực tiếp vào nhân CSDL hoặc cung cấp giao diện có thể mở rộng cho phép
ngƣời dùng định nghĩa các kiểu yêu cầu phức tạp cùng với các thao tác
thích hợp.
Các ứng dụng cơ sở dữ liệu hiện đại thể hiện nhu cầu ngày càng tăng
đối với sự quản lý khoảng một cách hiệu quả và có tính động, đặc biệt đối
với dữ liệu thời gian và không gian hay đối với các điều khiển ràng buộc.
Tuy nhiên, các cách tiếp cận thông thƣờng đòi hỏi sự tăng cƣờng của cấu
trúc chỉ mục lại không đƣợc hỗ trợ bởi hệ cơ sở dữ liệu quan hệ hiện có.
Cây khoảng quan hệ (RI-tree) tận dụng đƣợc những chỉ mục sẵn có
trong CSDL quan hệ, do đó có thể thực thi truy vấn khoảng một cách hiệu
quả và dễ dàng . Trong báo cáo ĐATN với đề tài là “Xử lý hiệu quả câu
truy vấn hỗn hợp giá trị khoảng và giá trị đơn trong CSDL quan hệ”, em
xin trình bày tóm tắt về cấu trúc cây khoảng, cây khoảng quan hệ và ứng
dụng của nó trong xử lý truy vấn giao khoảng và xử lý truy vấn hỗn hợp
khoảng với giá trị đơn. Báo cáo gồm 4 nội dung chính:

- Tìm hiểu bài toán xử lý truy vấn trong CSDL
- Tìm hiểu cấu trúc cây khoảng
- Tìm hiểu cấu trúc cây khoảng quan hệ và ứng dụng của nó trong
xử lý truy vấn
- Cài đặt thuật toán
3


Thanh Nga Pisces - HHX

NỘI DUNG
Chƣơng 1. TÌM HIỂU BÀI TOÁN XỬ LÝ TRUY VẤN TRONG CƠ
SỞ DỮ LIỆU
1.1.Giới thiệu bài toán xử lý truy vấn
* Mục đích của xử lý truy vấn:
 Giảm thiểu thời gian xử lý
 Giảm vùng nhớ trung gian
 Giảm chi phí truyền thông giữa các trạm
* Chức năng của xử lý truy vấn:
 Biến đổi một truy vấn ở mức cao thành một truy vấn tƣơng
đƣơng ở mức thấp hơn
 Phép biến đổi này phải đạt đƣợc cả về tính đúng đắn và hiệu
quả.
 Mỗi cách biến đổi dẫn đến việc sử dụng tài nguyên máy tính
khác nhau, nên vấn đề đặt ra là lựa chọn phƣơng án nào dùng
tài nguyên ít nhất.
* Các phương pháp xử lý truy vấn đơn giản
 Phƣơng pháp biến đổi đại số: đơn giản hóa câu lệnh truy vấn
nhờ các phép biến đổi đại số tƣơng đƣơng, nhằm giảm thiểu
thời gian thực hiện các phép toán, phƣơng pháp này không

quan tâm đến kích thƣớc và cấu trúc dữ liệu.
 Phƣơng pháp ƣớc lƣợng chi phí: xác định kích thƣớc dữ liệu,
thời gian thực hiện mỗi phép toán trong truy vấn. Phƣơng
pháp này phải xác định kích thƣớc dữ liệu và chi phí thời gian
thực hiện mỗi phép toán trong câu truy vấn.

4


Thanh Nga Pisces - HHX

1.2.Vấn đề
Số lƣợng của các loại dữ liệu không gian và thời gian trong các cơ sở
dữ liệu nói chung và cơ sở dữ liệu thời gian gần đây ngày càng tăng. Để hỗ
trợ hiệu quả cho việc truy vấn nội dung dữ liệu có chứa điều kiện khoảng
thời gian đƣợc tốt nhƣ những dữ liệu có đặc tính thông thƣờng trong cùng
thời điểm thì cấu trúc chỉ mục dùng để truy vấn phải hỗ trợ đƣợc cả hai loại
thuộc tính này. Dựa trên cấu trúc cây khoảng quan hệ (Relational Interval
Tree), chúng ta sẽ tạo ra đƣợc một chỉ mục hỗ trợ cho các câu truy vấn
phức hợp và có thể tích hợp trong hệ cơ sở dữ liệu quan hệ với kết quả tối
ƣu. Tham khảo các kỹ thuật trƣớc đây thì phƣơng pháp RI- tree đƣợc thực
hiện tốt hơn đối nếu so sánh với phƣơng pháp truy cập thông thƣờng.
1.3.Cách giải quyết
Dùng phƣơng pháp RI-tree (Relational Interval Tree)
1.4.Nghiên cứu trƣớc đây
Phƣơng pháp Interval-Spatial Transformation [1] dựa trên mã hoá
các khoảng bằng đƣờng cong lắp đầy gọi là trật tự D-, V- và H- ánh xạ các
biên vào không gian tuyến tính. Cấu trúc này tỏ ra thích ứng với các chỉ
mục phức hợp. Nhƣng phƣơng pháp này có thể không hiệu quả nếu nhƣ
câu chọn lựa trả về kết quả sai đƣờng bao hoặc thuộc tính.

Phƣơng pháp Window-List [2] của Ramaswamy là một giải pháp tĩnh
cho vấn đề quản lý khoảng và tận dụng B+tree. Nhƣng không may là việc
cập nhật các cận trên của biên thì không đƣợc tốt. Việc thêm vào cũng nhƣ
xoá các khoảng cũng có thể làm tổn hại đến câu truy vấn trong cấu trúc
này.
Segment R-tree (SR-tree) [3] của Kolovson and Stonebraker là sự
kết hợp của cây memory-based segment với cây lƣu trữ đối tƣợng thứ cấp
(secondary storage-oriented R-tree). Tuy vậy, phƣơng pháp này trở nên
5


Thanh Nga Pisces - HHX

kém hiệu quả khi mà có quá nhiều khoảng bị xoá đi. Hơn nữa, để thực hiện
đƣợc SR- tree thì yêu cầu phải có cấu trúc tƣơng thích R-tree.
1.5.Cách giải quyết, cách khắc phục bất cập, ƣu điểm
- Phân chia các câu truy vấn thành các loại khác nhau và tạo từng chỉ
mục tối ƣu cho mỗi loại nhất định. Truy vấn giá trị điểm (Value-Stabbing
Queries); Truy vấn khoảng giá trị (Value-Interval Queries); Truy vấn một
dãy các điểm (Range-Stabbing Queries); Truy vấn một dãy các khoảng
(Range-Interval Queries).
- Không có loại chỉ mục tổng quát nào là tốt nhất cho tất cả các loại dữ
liệu, nên việc phân loại đã giải quyết đƣợc các nhƣợc điểm của các phƣơng
pháp trƣớc.
Ƣu điểm: Ứng với mỗi loại câu truy vấn khác nhau sẽ có một chỉ mục
tƣơng ứng để cho việc thực hiện truy vấn đạt kết quả cao nhất.
1.6.Cơ sở lý luận
- Interval Tree
- Relational Interval Tree (RI-tree).
- Cây nhị phân.


6


Thanh Nga Pisces - HHX

Chƣơng 2.

TÌM HIỂU CẤU TRÚC CÂY KHOẢNG

Trong một số bài toán, việc giải quyết thông thƣờng là rất khó khăn,
không phải về mặt giải thuật mà về độ phức tạp của thuật toán. Độ phức tạp
càng cao, chƣơng trình chạy càng mất nhiều thời gian. Để giải quyết vấn đề
này, ngƣời ta nghĩ ra những cấu trúc dữ liệu đặc biệt, một trong số đó là
cây khoảng - Interval Tree.
Xét một số bài toán quen thuộc sau:
Một số bài toán:
Bài toán dãy số:
Cho một dãy số có độ dài N gồm các số nguyên ( đánh số từ 0 → N1). Ngƣời ta có M yêu cầu gồm 2 loại sau:
+ C i j : Thay phần tử thứ i bằng giá trị j.
+ Q i j : xuất ra tổng các phần tử trong dãy số, từ vị trí i đến vị trí j.
Yêu cầu : Cho trƣớc dãy số và các yêu cầu trong file DAYSO.INP.
Hãy làm phép biến đổi trên dãy và viết các kết quả ra file DAYSO.OUT
Giới hạn : 1<= N <= 10000, |ai| <= 1000, M <= 100000
Input : Dòng đầu tiên chứa 2 số nguyên N và M. Dòng thứ 2 chứa
các phần tử của dãy. M dòng cuối chứa các yêu cầu.
Output : Gồm một số dòng tƣơng ứng là kết quả của các yêu cầu Q
trong file input.
Bài toán hình chữ nhật:
Cho N hình chữ nhật có tọa độ nguyên nằm trên mặt phẳng tọa độ và

có các cạnh song song với các trục. Mỗi hình chữ nhật đƣợc cho bởi tọa độ
đỉnh trái trên và đỉnh phải dƣới.
Yêu cầu: Hãy tính diện tích mà tất cả các hình chữ nhật này phủ lên.
7


Thanh Nga Pisces - HHX

Input: COVER.INP
 Dòng đầu là số N – số hình chữ nhật (1 <= N <= 2000)
 N dòng tiếp theo, dòng thứ i gồm 4 số Xi, Yi, Ai, Bi thể hiện tọa
độ đỉnh trái trên và đỉnh phải dƣới của hình chữ nhật thứ i (20000 <= Xi, Yi, Ai, Bi <= 20000)
Output: COVER.OUT
 Gồm một dòng duy nhất là đáp số của bài toán
Nhận xét:
Đối với lọai bài này, ta có thể giải một cách thô với độ phức tạp lên
đến Q(NM). Đối với cách cài đặt sơ đẳng này, các yêu cầu C sẽ thực hiện
trong O(1) và các yêu cầu Q sẽ thực hiện trong Q(N)
Vì vậy, ta cần phải tìm một phƣơng pháp nào đó hiệu quả hơn ,có độ
phức tạp nhỏ hơn NM. Và cây khoảng (Interval Tree) sẽ cung cấp cho ta
một thuật toán nhƣ vậy. Ứng dụng cây khoảng vào giải quyết 2 bài toán
trên đƣợc nêu trong phần PHỤ LỤC.
2.1.Sơ lƣợc về khoảng
Một khoảng là một cặp số nguyên [a,b] sao cho a < b.
Các điểm đầu cuối a và b của mỗi khoảng [a,b] chia trục số nguyên
(integer line) thành những phần gọi là các khoảng sơ cấp.
Khoảng x = [10, 20] đƣợc thêm vào trục số nguyên. Lƣu ý rằng một
khoảng cắt trục số nguyên tại 2 điểm:

8



Thanh Nga Pisces - HHX

Khi chúng ta thêm vào một khoảng mới. Chú ý xem có bao nhiêu
khoảng sơ cấp mới đƣợc tạo ra.
Thêm khoảng y = [15, 25]:

Hình II.1.2
Thêm khoảng z = [18, 22]:

9


Thanh Nga Pisces - HHX

Có n khoảng [ai, bi], với i = 1..n, chính xác có bao nhiêu khoảng sơ
cấp đƣợc tạo ra, giả sử rằng không có khoảng [ai, bi] nào có chung điểm
đầu cuối?
Chúng ta lấy 2n + 1 khi có n khoảng trên trục số nguyên không cùng
chung điểm đầu cuối.
Mỗi khoảng có thể đƣợc diễn tả nhƣ một sự tổng hợp của nhiều
khoảng con mà nó bao trùm:
Interval

Spans Sub-Intervals

x

[10, 20]


[10, 15], [15, 18], [18-20]

y

[15, 25]

[15, 18], [18, 20], [20-22], [22, 25]

z

[18, 22]

[18, 20], [20, 22]
Bảng 1

Hai phần tiếp theo sẽ trình bày hai cách tiếp cận khác nhau về xây
dựng cây khoảng.

10


Thanh Nga Pisces - HHX

2.2.Cây khoảng – định nghĩa của James Stewart
2.2.1 Định nghĩa
Với các khoảng đƣợc định nghĩa nhƣ vậy, làm thế nào chúng ta lƣu
trữ những khoảng này trong một cấu trúc dữ liệu?
Ý tƣởng chúng ta là lƣu trữ chúng trong một cây khoảng. Đây là một
sự mở rộng của cấu trúc dữ liệu BST (binary search tree).

BST thƣờng có 1 trong 2 dạng:
a) dạng 1: mọi nút là nút dữ liệu => nếu có M mẫu tin dữ liệu thì
tổng số nút trong cây sẽ là M. Ở dạng này, khi giải bài toán tìm xem 1 giá
trị v có ở trong cây: có thể dừng ở 1 nút trong (internal node) (nếu nút đó là
v) hoặc dừng ở 1 nút lá (tìm thấy hoặc không tìm thấy)
b) dạng 2: chỉ nút lá mới là nút dữ liệu, các nút trong (internal node)
chỉ là để hƣớng dẫn sự tìm kiếm => nếu có M mẫu tin dữ liệu thì tổng số
nút lá trong cây sẽ là M (tổng số nút trong cây sẽ là 2M-1). Ở dạng này, khi
giải bài toán tìm xem 1 giá trị v có ở trong cây: luôn dừng ở 1 nút lá (tìm
thấy hay không tìm thấy đều vậy)
Interval Tree đƣợc trình bày trong tài liệu ở dạng 2
Một cây khoảng có một nút lá chứa mỗi khoảng sơ cấp. Trên đỉnh
của những lá này đƣợc xây một cây nhị phân hoàn chỉnh. Mỗi nút bên
trong của cây, key của chúng, lƣu trữ số nguyên mà chia các khoảng sơ cấp
thành cây con bên trái và cây con bên phải của nó. Nút lá không lƣu trữ bất
kỳ key nào, và tƣợng trƣng cho các khoảng sơ cấp. Trong cây khoảng dƣới
đây, key đƣợc biểu diễn trên đỉnh của mỗi nút.

11


Thanh Nga Pisces - HHX

Chú ý rằng mỗi lá đáp ứng chính xác với 1 khoảng sơ cấp.
2.2.2.Cấu trúc lưu trữ khoảng
Làm thế nào chúng ta lưu trữ các khoảng thật sự (không sơ cấp)
trên cây này?
Mỗi nút của cây (cả nút bên trong và nút lá) có thể lƣu trữ một tập
khoảng. Ở cây trên, tập khoảng này đƣợc biểu diễn tại đáy của mỗi nút.
Chúng ta có thể lƣu trữ những tập này nhƣ danh sách liên kết. Mỗi lá

(tƣơng xứng với một khoảng sơ cấp) sẽ chứa một con trỏ trỏ tới một danh
sách các khoảng không sơ cấp mà mở rộng tới (span) khoảng sơ cấp của lá.
Ví dụ:

12


Thanh Nga Pisces - HHX

Có gì hạn chế với mô tả này?
Nó tốn khá nhiều không gian: nếu mỗi khoảng rất dài, nó có thể
đƣợc lƣu trữ trong mọi lá. Vì có n lá, chúng ta có thể có O(n2) sự lƣu trữ.
Vì thế chúng ta cải thiện sự lưu trữ trên như thế nào?
Một nút bên trong đƣợc gọi là “span” sự kết hợp của nhiều khoảng
sơ cấp thành cây con của nó. Cho ví dụ, node 18 spans khoảng từ 15 đến
20. Viết gọn: span(18)=[15, 20].
Giả sử rằng, thay vì lƣu trữ một khoảng trong mỗi lá riêng lẻ, chúng
ta sẽ lƣu trữ nó trong các nút bên trong với quy tắc:
Một khoảng [a, b] đƣợc lƣu trữ trong một nút x nếu và chỉ nếu:
1) Span(x) hoàn toàn nằm bên trong [a, b] và
2) Span(parent(x)) không hoàn toàn chứa trong [a, b].
Áp dụng quy tắc này vào cây của chúng ta:

13


Thanh Nga Pisces - HHX

Mỗi khoảng có thể đƣợc lƣu trữ nhiều nhất 2 lần tại mỗi mức. Điều
này cho chúng ta O(nlogn) lƣu trữ - thực sự là 2nlogn, là một hệ số rất thấp.

Một ví dụ phức tạp hơn
Giả sử chúng ta có một tập hợp các nhà soạn nhạc và tuổi thọ của họ;
mỗi tuổi thọ là một khoảng thời gian giữa năm sinh và năm chết của nhà
soạn nhạc. Ví dụ:
Interval

Composer

Birth

Death

A

Stravinsky

1888

1971

B

Schoenberg

1874

1951

C


Grieg

1843

1907

D

Schubert

1779

1828

E

Mozart

1756

1791

F

Schuetz

1585

1672


Bảng 2

14


Thanh Nga Pisces - HHX

Các khoảng đƣợc biễu diễn trên trục số nguyên. Mỗi khoảng đƣợc
gán với một ký tự tƣơng ứng với một trong những nhà soạn nhạc trong
bảng:

Hình II.2.3
Chú ý rằng các điểm đầu cuối a và b của mỗi khoảng [a, b] chia trục
số nguyên thành các khoảng sơ cấp. Các khoảng sơ cấp nhƣ sau:
[-infty, 1585], [1585, 1672], [1762, 1756], [1756, 1779],…, [1951,
1971], [1971, +infty].
Đây là cây khoảng cho các nhà soạn nhạc của chúng ta:

Chú ý rằng nút 1828 spans 4 khoảng sơ cấp giữa 1779 và 1874.
Trong trƣờng hợp này, chúng ta nói span(1828) = [1779, 1874]. Một nút lá
chỉ spans một khoảng sơ cấp.

15


Thanh Nga Pisces - HHX

Và đây là cây với các khoảng đƣợc lƣu trữ trong mỗi nút dựa vào
quy tắc trên đây:


Ví dụ, khoảng C = [1843, 1907] tƣơng ứng với thời gian sống của
Grieg. Khoảng này đƣợc lƣu trữ trong nút 1888 vì:
1. Span(1888) = [1874, 1907] hoàn toàn đƣợc chứa trong [1843,
1907] và,
2. Span(parent(1888)) = [1874, 1951] không hoàn toàn chứa
trong [1843, 1907].
Khoảng C cũng đƣợc lƣu trữ trong nút lá phía bên phải của 1843 vì
nút này cũng thỏa mãn điều kiện (1) và (2).
2.2.3.Truy vấn khoảng
Vấn đề đặt ra: Làm thế nào chúng ta trả lời đƣợc truy vấn dạng
“Nhà soạn thảo nào còn sống trong một năm nào đó”. Ví dụ, nhà soạn nhạc
còn sống trong suốt năm 1910 là Stravinsky (A) và Schoenberg (B).

16


Thanh Nga Pisces - HHX

Trong minh họa, thuật toán truy vấn phải làm đƣợc: đƣa ra một số
nguyên k và một cây khoảng T, liệt kê tất cả các khoảng lƣu trữ trong T có
chứa k. Một khoảng [a, b] chứa k nếu a ≤ k ≤ b.
Thuật toán truy vấn đơn giản phải liệt kê những khoảng lƣu trữ trên
lá chứa k. Nó cũng phải đếm các khoảng lƣu trữ trong những nút bên trong
mà span của chúng chứa k. Do đó, thuật toán truy vấn đơn giản là di dọc
theo đƣờng từ gốc tới lá để tìm lá tƣơng xứng với khoảng sơ cấp chứa k, và
liệt kê tất cả các khoảng đƣợc lƣu trữ trong nút trên đƣờng từ gốc tới lá đó.
Mỗi nút lƣu trữ con trỏ left và right. Ngoài ra, nó lƣu trữ separator,
là giá trị phân chia các khoảng sơ cấp thành cây con trái và phải của nó. Nó
cũng lƣu trữ intervals, là một con trỏ trỏ tới một danh sách liên kết của các
khoảng.

/* listIntervals( k, x )
* Liệt kê tất cả các khoảng chứa k trong cây con có gốc tại x.
* Khởi tạo: listIntervals( k, root ).
*/

listIntervals( k, x )
while x != NULL
output intervals(x)
if (k < separator(x))
x = left(x)
else

x = right(x)

endif
endwhile
2.2.4.Thêm một khoảng
Đây là vấn đề thêm [a, b] vào cây, giả sử rằng các điểm đầu cuối a và
b có ở trong cây rồi; nghĩa là, a và b đã phân chia các khoảng sơ cấp ở đâu
đó trên cây rồi.
17


Thanh Nga Pisces - HHX

Quá trình tiến hành thêm khoảng [a, b]:
- Đi từ gốc cây xuống cho đến khi chúng ta tìm thấy một nút x mà
span(x) hoàn toàn nằm trong [a, b] (quy tắc 1 đƣợc thỏa mãn) =>
chúng ta lƣu trữ khoảng trong x và dừng lại. Chú ý rằng, quy tắc
2 thỏa mãn tại x bởi vì chúng ta không dừng tại cha của x (chúng

ta không thể tiến tới x) và chúng ta đã bảo đảm là dừng tại nút lá.
- Nhƣng nếu span(x) không hoàn toàn nằm trong [a, b] => điều
kiện 1 không đƣợc thỏa mãn tại x, nhƣng nó sẽ thỏa mãn tại một
vài nơi theo chiều giảm của x.
/* addInterval( I, a, b, min, max, x )
*Khoảng được chèn vào là [a,b] và tên là I. Chúng ta giả sử rằng giá trị a
*và b phân chia các khoảng thành phần ở nơi nào đó trên cây. [min,max]
là *span của cây con hiện tại có gốc tại node x.
*Khởi tạo: ( I, a, b, -infinity, +infinity, root ).

*/
addInterval( I, a, b, min, max, x )
if (a <= min and max <= b)
/* span(x) hoàn toàn nằm trong [a,b], vì thế lưu trữ khoảng và dùng lại
*/

store I in intervals(x)
else
/* span(x) chứa một số khoảng sơ cấp không thuộc [a,b].
* Chúng ta phải đệ quy cho đến khi tìm ra mộ cây con hoàn toàn nằm
* trong [a,b]. Phải đệ quy trong cả 2 cây con. */

if (a < separator(x))
addInterval( I, a, b, min, separator(x), left(x) );
endif
if (separator(x) < b)
18


Thanh Nga Pisces - HHX


addInterval( I, a, b, separator(x), max, left(x) );
endif
endif

2.3.Cây khoảng – định nghĩa của Edelsbrunner
2.3.1.Định nghĩa
Nếu theo định nghĩa của James Stewart, chúng ta tiếp cận cây
khoảng từ trên xuống, xây dựng cây khoảng bằng cách thêm vào cây rỗng
ban đầu lần lƣợt từng khoảng. Còn theo định nghĩa của Edelsbrunner mà
chúng ta sắp tiếp cận dƣới đây, cây khoảng đƣợc xây dựng dựa trên tập
khoảng sẵn có, xây dựng đệ quy.
Định nghĩa:
Một cây khoảng lƣu trữ một tập khoảng trên trục số thực (real line).
Tập I = {[x1, x1‟], [x2, x2‟],…, [xn, xn‟] } là 1 tập gồm n khoảng đóng
(closed intervals).
Xây dựng cây đệ quy trên tập I nhƣ sau:
- Sắp xếp 2n điểm đầu cuối
- Cho xmid là trung vị của 2 điểm đầu cuối của khoảng của các
khoảng trong I

Hình II.3.1: Ví dụ tập khoảng
19


Thanh Nga Pisces - HHX

Cho xmid là trung vị của 2 điểm đầu cuối của khoảng của các khoảng
trong I
Imid

Iright

Ileft

xmid
Hình II.3.2
Ileft = {[xj, xj‟]

I: xj‟ < xmid}

Imid ={[xj, xj‟]

I: xj ≤ xmid ≤ xj‟}

Iright ={[xj, xj‟]

I: xmid < xj‟}

Imid đƣợc lƣu trữ tại gốc của cây khoảng. Cây con bên trái là một cây
khoảng của Ileft và cây con bên phải là một cây khoảng của Iright.
2.3.2.Cấu trúc dữ liệu
Cây khoảng đƣợc xây dựng theo Edelsbrunner có cấu trúc dữ liệu đệ
quy:
- Các khoảng với xj‟ < xmid đƣợc lƣu trữ trong cây con trái của v.
- Các khoảng với xmid < xj‟ đƣợc lƣu trữ trong cây con phải của v
- Cấu trúc dữ liệu thích hợp của các khoảng [xj, xj‟] đƣợc lƣu trữ tại
node v nhƣ sau:
Một danh sách ML chứa các khoảng đƣợc sắp xếp
theo chiều tăng dần của các điểm mút bên trái xj và
Một danh sách MR chứa các khoảng đƣợc sắp xếp

theo chiều giảm dần của các điểm mút bên phải xj‟
20


Thanh Nga Pisces - HHX

Hình II.3.3
Cây khoảng của một tập khoảng trống là một lá trống.
Ví dụ:

Hình II.3.4
Định lý: Một cây khoảng cho một tập n khoảng sử dụng O(n) lƣu trữ và có
chiều cao O(logn). Nó có thể tạo thành trong thời gian O(nlogn).
2.3.3.Stabbing Query – Truy vấn điểm
Cho x, liệt kê tất cả các khoảng chứa x
Thuật toán:
1. Nếu x < xmid thì:
21


Thanh Nga Pisces - HHX

a. Quét trên M L theo chiều tăng dần, và liệt kê tất cả các khoảng
chứa x. Cho đến khi khoảng hiện tại không chứa x nữa, dừng
lại.
b. Đệ quy trên SL
2. Nếu x >= xmid thì: tƣơng tự, nhƣng về phía bên phải
Phân tích:
- Thời gian truy vấn:
o Kích thƣớc của mỗi cây con đƣợc chia ít nhất thành hai tại

mỗi mức
o Quét qua M L và MR : tƣơng ứng với số các khoảng đƣợc
tìm thấy
o Tóm lại: thời gian truy vấn là O(k + logn), với k là số
khoảng đƣợc tìm thấy
- Không gian sử dụng: O(n) (mỗi segment đƣợc lƣu trữ trong hai
danh sách và cây là cân bằng)
- Thời gian tiền xử lý: O(nlogn)
Định lý: Sử dụng một cây khoảng, chúng ta có thể liệt kê tất cả k khoảng
chứa 1 điểm truy vấn x, trong thời gian O(k + logn).
2.4.Phân loại cây khoảng
2.4.1.Trường hợp một chiều

22


Thanh Nga Pisces - HHX

1 Định nghĩa
Đầu vào: tập n khoảng dọc theo trục x và ta có một đƣờng dọc không
giới hạn và một giá trị cụ thể x nhƣ trên. Đầu ra: tập các khoảng giao với
đƣờng dọc này.
2 Thuật toán và cấu trúc dữ liệu

Thuật toán:
Nếu q ≤ xmid thì đƣa những điểm trên mảng sắp xếp bên trái mà có
điểm cuối bên trái đó về phía trái của q. Sau đó recurse cây con trái
23



Thanh Nga Pisces - HHX

Nếu không, đƣa những điểm trên mảng sắp xếp bên phải mà có điểm
cuối bên phải đó về phía phải của q. Sau đó recurse cây con phải.
3 Phân tích
Vì các mảng lƣu trữ tại nút đối với xmid, thời gian tiêu tốn tại một nút
là ≤ (1 + số khoảng tìm đƣợc). Do đó, thời gian chạy là O(k +logn), trong
đó, k là số khoảng đƣợc liệt kê. Chúng ta cũng có: Không gian: O(n). Thời
gian tiền xử lý: O(nlogn)
2.4.2.Trường hợp 2 chiều

1.Định nghĩa
Đầu vào là một tập n khoảng hoặc nằm ngang hoặc nằm dọc. Một
truy vấn đƣa ra một hình chữ nhật, với các cạnh song song với các trục và
câu hỏi là các khoảng giao với hình chữ nhật này.
2.Thuật toán và cấu trúc dữ liệu

24


Thanh Nga Pisces - HHX

Thuật toán:
Nếu q ≤ xmid thì thực hiện truy vấn phạm vi trên cây phạm vi đối với
những điểm cuối bên trái. Sau đó, recurse cây con trái.
Ngƣợc lại, thực hiện truy vấn vùng (range) trên cây phạm vi đối với
những điểm cuối bên phải nhƣ hình vẽ. Sau đó, nt.
Truy vấn phạm vi đƣợc thực hiện đối với hình chữ nhật không giới
hạn (infinite) nhƣ sau:


Hình II.4.5
3.Phân tích
Chiều cao của cây phạm vi và cây khoảng là O(logn). Do đó thời
gian chạy đối với một truy vấn là O(log2(n) + k), trong đó k là kích thƣớc
output. Yêu cầu không gian là O(nlogn).
25


×