Truy vấn khoảng trong cõy 2-d

Một phần của tài liệu Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian (Trang 37 - 39)

Truy vấn khoảng trờn cõy 2-d cú tờn T là truy vấn theo chỉ định điểm (xc, yc) và khoảng r. Kết quả cho lại là tập điểm (x, y) trong cõy T sao cho (x, y) nằm trong khoảng r của (xc, yc). Núi cỏch khỏc khoảng truy vấn xỏc định vũng trũn bỏn kớnh r cú tõm (xc, yc) và tỡm mọi điểm trong cõy 2-d nằm trong vũng trũn.

Khi xử lý truy vấn khoảng, ta nhớ lại rằng mỗi nỳt N trong cõy 2-d biểu diễn vựng RN, nếu vũng trũn và vựng RN khụng giao nhau thỡ khụng tỡm thấy điểm nào trong cõy con cú gốc là nỳt N. Hóy quan sỏt cỏc vựng trong hỡnh 2.4d.

1. Nỳt cú nhón Banja Luka biểu diễn vựng chứa cỏc điểm (x, y) của cỏc số thực. 2. Nỳt cú nhón Derventa biểu diễn vựng chứa mọi điểm (x, y) với x19; nú cú thể được thu nhận bởi biểu thức {(x, y) | x19}.

3. Nỳt cú nhón Teslic biểu diễn vựng chứa mọi điểm (x, y) với x19 và y<50; nú cú thể được thu nhận bởi biểu thức {(x, y) | x19&y<50}.

4. Nỳt cú nhón Tuzla biểu diễn vựng chứa mọi điểm (x, y) với x38 và y<50; nú cú thể được thu nhận bởi biểu thức {(x, y) | x38&y<50}.

5. Cuối cựng, nỳt nhón Sinj biểu diễn vựng chứa mọi điểm (x, y) với x<19. Tổng quỏt thỡ mỗi nỳt N cú nhiều nhất 4 ràng buộc kết hợp biểu diễn kết nối cỏc vựng:

1. XLB: Ràng buộc này biểu diễn cận dưới (Lower Bound) của x và cú khuụn dạng xc1.

2. XUB: Ràng buộc này biểu diễn cận trờn (Upper Bound) của x và cú khuụn dạng x<c2.

3. YLB: Ràng buộc này biểu diễn cận dưới của y và cú khuụn dạng yc3. 4. YUB: Ràng buộc này biểu diễn cận trờn của y và cú khuụn dạng y<c4. Cú thể mở rộng định nghĩa kiểu dữ liệu nodetype thành newnodetype bằng cỏch gộp cỏc trường vừa mụ tả trờn như sau:

newnodetype = record INFO: infotype;

XVAL, YVAL: real;

XLB, XUB, YLB, YUB: real  {+, -}; LLINK, RLINK: newnodetype;

end

Khi xen nỳt ta chỉ phải làm như sau đõy:

1. Với gốc cõy: đặt - vào XLB và YLB, đặt + vào XUB và YUB. 2. Nếu nỳt N cú nỳt P là cha và mức level(P) là chẵn thỡ

N.XLB=P.XLB nếu N=P.LLINK N.XLB=P.XVAL nếu N=P.RLINK N.XUB=P.XVAL nếu N=P.LLINK N.XUB=P.XUB nếu N=P.RLINK N.YLB=P.YLB

N.YUB=P.YUB

3. Nếu nỳt N cú nỳt P là cha và mức level(P) là lẻ thỡ N.YLB=P.YLB nếu N=P.LLINK

N.YLB=P.YVAL nếu N=P.RLINK N.YUB=P.YVAL nếu N=P.LLINK N.YUB=P.YUB nếu N=P.RLINK N.XLB=P.XLB

Thớ dụ sau đõy xem xột truy vấn khoảng trờn bản đồ Bosnia (hỡnh 2.5). Cho trước vũng trũn tõm (35, 46) và bỏn kớnh 9.5. Cõu trả lời là hai điểm Testic

Derventa sẽ thoả món.

Tiến trỡnh truy vấn như sau. Vựng biểu diễn gốc cõy 2-d khụng cắt vũng trũn, vậy ta kiểm tra xem Banja Luka cú trong vũng trũn? Cõu trả lời là nú khụng nằm trong. Tiếp tục xem xột hai cành của Banja Luka, bờn trỏi biểu diễn mọi điểm (x, y) thoả x<19. Vỡ vựng này khụng cắt vũng trũn nờn ta sẽ khụng xem xột cành này. Mặt khỏc cành phớa phải của Banja Luka biểu diễn mọi điểm (x, y) thoả x19, chắc chắn nú cắt vũng trũn. Kiểm tra xem cành bờn phải (Derventa) cú trong vũng trũn? Cõu trả lời là cú, vậy ta cho lại mó của nú. Sau đú hóy khảo sỏt cành của Derventa. Vựng biểu diễn bởi tập điểm (x, y) thoả x19 và y<50. Vựng này cắt vũng trũn, vậy phải kiểm tra cành cú trong vũng trũn? Cõu trả lời là cú, vậy ta trả lại cành của nú (Testic). Hóy xem xột con của

Testic (Tuzla). Vựng này được biểu diễn bởi tập điểm (x, y) thoả x38 và y<50, và vựng này cắt đường trũn. Vậy cần kiểm tra xem Tuzla trong vũng trũn? Cõu trả lời là khụng, do vậy cú thể dừng tại đõy.

Một phần của tài liệu Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian (Trang 37 - 39)