.1 Cỏc trường hợp của phộp chốn vào cõy tứ phõn điểm

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 43)

Để vận dụng thành cụng kỹ thuật xoỏ trong với cõy tứ phõn điểm thỡ khi xoỏ một nỳt trong N ta phải tỡm một nỳt thay thế R từ một trong cỏc cõy con của N (từ một trong N.NW, N.SW, N.NE, N.SE) sao cho mỗi nỳt R1 trong N.NW là ở phớa tõy bắc của R, mỗi nỳt R2 trong N.SW ở phớa tõy nam R, mỗi nỳt R3 trong N.NE ở phớa đụng bắc của R và mỗi nỳt R4 trong N.SE ở phớa đụng nam của R.

Hóy xem xột cõy tứ phõn trờn hỡnh 2.6 và hỡnh 2.7. Giả sử chỳng ta muốn xoỏ Banja Luka từ cõy tứ phõn này. Trong trường hợp này, nỳt thay thế thực tế được tỡm là Teslic. Khụng nỳt nào khỏc thoả món những điều kiện đó đặt ra ở trờn.

Tuy nhiờn, khụng phải luụn cú khả năng tỡm được một nỳt thay thế. Do vậy trong trường hợp xấu nhất việc xoỏ một nỳt N cú thể yờu cầu việc chốn lại một số nỳt trong cõy con trỏ bởi N.NE, N.SE, N.NW và N.SW. Trong phần sau ta sẽ khảo sỏt cõy tứ phõn MX cho phộp xúa nỳt một cỏch dễ dàng hơn.

Trường hợp

N.XLB N.XUB N.YLB N.YUB

N= P.NW P.XLB P.XLB+w0.5 P.YLB+h0.5 P.YUB

N= P.SW P.XLB P.XLB+w0.5 P.YLB P.YLB+h0.5

N= P.NE P.XLB+w0.5 P.XUB P.YLB+h0.5 P.YUB

2.3.3. Truy vấn khoảng trong cõy tứ phõn điểm

Cỏc truy vấn khoảng trong cõy tứ phõn được thực hiện gần như cỏch thức thực hiện trong cõy 2-d. Mỗi nỳt trong một cõy tứ phõn thể hiện một vựng và phương phỏp tớnh túan và truy vấn khoảng trỏnh việc tỡm kiếm cỏc cành bắt nguồn từ những nỳt mà cỏc vựng liờn quan đến chỳng khụng giao với đường trũn định nghĩa bởi truy vấn khoảng. Đại thể như nếu chỳng ta đang tỡm kiếm cõy tứ phõn điểm bắt nguồn từ T với tất cả cỏc điểm trong một đường trũn C, tõm (xc, yc) và cú bỏn kớnh là r, giải thuật được nờu ra như sau:

Giải thuật 2.1

proc RangeQueryPointQuadtree(T: newptnodetype, C: circle) 1. If region(T)  C =  then Halt

2. else

(a) If (T.XVAL, T.YVAL) C then print (T.XVAL, T.YVAL); (b) RangeQueryPointQuadtree(T.NW, C);

(c) RangeQueryPointQuadtree(T.SW, C); (d) RangeQueryPointQuadtree(T.NE, C); (e) RangeQueryPointQuadtree(T.SE, C); End proc

2.4. Cõy tứ phõn matrix MX (MX-Quadtrees)

Trong cả hai trường hợp cõy 2-d và cõy tứ phõn điểm, hỡnh thự của cõy phụ thuộc vào thứ tự cỏc đối tượng được chốn vào cõy. Đặc biệt, thứ tự ảnh hưởng đến chiều cao của cõy, do đú ảnh hưởng đến độ phức tạp của cỏc thao tỏc tỡm kiếm và chốn. Mỗi nỳt N của cõy 2-d và cõy tứ phõn điểm biểu diễn vựng và phõn chia vựng thành 2 (trường hợp cõy 2-d) hoặc 4 (trường hợp cõy tứ phõn) vựng con. Việc phõn chia cú thể khụng đều vỡ nú phụ thuộc vào vị trớ điểm (N.XVAL, N.YVAL) trong vựng biểu diễn bởi N.

Ngược lại, mục tiờu của cõy MX-quadtree là để đảm bảo hỡnh dạng (và chiều cao) của cõy độc lập với số lượng cỏc nỳt của cõy, cũng như thứ tự chốn cỏc nỳt này. Thờm nữa, MX-quadtree tập trung vào việc đem lại cỏc giải thuật xoỏ và tỡm kiếm cú hiệu quả.

Một cỏch ngắn gọn, cõy MX-quadtree làm việc như sau: Đầu tiờn chỳng ta giả định rằng bản đồ đang được phõn thành một lưới kớch thước (2k

NW SW NE SE

a)

A

b)

A B

phỏt triển ứng dụng tự do lựa chọn k và một khi nú được chọn thỡ nú phải cố định.

MX-quadtree cú cấu trỳc nỳt tương tự như cõy tứ phõn điểm, đú là chỳng cú kiểu newqtnodetype. Cú một sự khỏc biệt là gốc của MX-quadtree miờu tả vựng xỏc định bởi XLB = 0, XUB = 2k

, YLB = 0, YUB = 2k. Hơn nữa, khi một vựng được phõn chia, nú được chia ở giữa. Do vậy, nếu N là một nỳt, khi đú cỏc vựng thể hiện bởi bốn cành của N được mụ tả theo bảng dưới đõy. Trong bảng này, w ký hiệu chiều rộng của vựng được biểu diễn bởi N và được cho bởi w= N.XUB – N.XLB. Do tất cả cỏc vựng được biểu diễn bởi cỏc nỳt trong

MX- quadtree là cỏc vựng vuụng, nờn w = N.YUB – N.YLB.

Con XLB XUB YLB YUB

NW N.XLB N.XLB +w/2 N.YLB +w/2 N.YLB +w

SW N.XLB N.XLB +w/2 N.YLB N.YLB +w/2

NE N.XLB +w/2 N.XLB +w N.YLB +w/2 N.YLB +w

SE N.XLB +w/2 N.XLB +w N.YLB N.YLB +w/2

Bảng 2.2. Mụ tả bốn cành của nỳt N trong cõy tứ phõn MX

2.4.1. Chốn và tỡm kiếm trong MX-Quadtree

Chỳng ta hóy xem xột cỏch chốn điểm vào cõy MX-Quadtree. Mỗi điểm (x, y) trong cõy MX-Quadtree biểu diễn vựng 1x1 mà gúc dưới bờn trỏi là (x, y). Điểm chốn vào nỳt biểu diễn vựng 1x1 tương ứng với điểm này. Giả sử bõy giờ chỳng ta muốn chốn cỏc điểm A, B, C và D như trờn hỡnh 2.8, hóy tiến hành cỏc bước như dưới đõy:

Hỡnh 2.8. Trỡnh tự chốn vào cõy tứ phõn MX

1. Việc chốn điểm A với toạ độ (1, 3) như sau: Là nỳt gốc biểu diễn toàn bộ vựng và A nằm trong NW. Do vậy, cành NW của gốc tương ứng vựng 2x2 mà gúc dưới bờn trỏi của nú là điểm (0, 2). Điểm A nằm trong gúc NE của vựng này. Hỡnh 2.8a chỉ ra kết quả cõy tứ phõn MX sau khi chốn điểm A. Hỡnh 2.9a chỉ ra việc phõn chia vựng. Chỳ ý rằng điểm A được chốn vào mức 2 của cõy và mức này bằng giỏ trị k. Tổng quỏt là điểm luụn được chốn vào mức k trong cõy tứ phõn MX.

2. Việc chốn điểm B với toạ độ (3, 3) sẽ xỏc định được B thuộc nhỏnh NE của gốc. Do vậy cành NE của nỳt gốc tương ứng vựng 2x2 với gúc dưới bờn trỏi là (2, 2). Điểm B lại nằm trong gúc NE của vựng này. Kết quả được thể hiện trờn hỡnh 2.8b và 2.9b.

3. Việc chốn điểm C với tọa độ (3, 1) được tiến hành như sau: C nằm trong gúc SE của toàn vựng. Điều này đũi hỏi tạo nỳt mới là nỳt con SE của gốc. C nằm trong vựng con NE của nỳt này. Hỡnh 2.8c và 2.9c chỉ ra kết quả.

4. Cuối cựng, hỡnh 2.8d và 2.9d biểu diễn kết quả sau khi chốn D.

c)

A B C

d)

a/ b/ c/ d/

Hỡnh 2.9. Mụ tả phộp chốn điểm vào cõy tứ phõn MX

2.4.2. Thao tỏc xoỏ trong MX-Quadtrees

Thao tỏc xoỏ trong một MX-Quadtrees là một thao tỏc tương đối đơn giản bởi vỡ toàn bộ cỏc điểm đều nằm ở cấp cuối (đều là cỏc nỳt lỏ). Lưu ý rằng nếu N là một nỳt khụng phải lỏ trong cõy MX-Quadtrees với gốc là T thỡ khi đú vựng biểu diễn bởi nỳt N cú ớt nhất một điểm thuộc cõy. Nếu chỳng ta muốn xoỏ một điểm (x, y) từ cõy T, việc đầu tiờn là thiết lập liờn kết tương ứng của cha nỳt N tới NIL. Núi cỏch khỏc nếu M là cha của N và M.DIR trỏ tới N thỡ thiết lập M.DIR=NIL và cho lại N để giải phúng vựng nhớ. Bõy giờ tiến hành kiểm tra xem bốn trường liờn kết của M đều là NIL? nếu đỳng ta khảo sỏt cha của M (ta gọi nú là P). Vỡ M là con của P, ta tỡm trường liờn kết DIR1 sao cho P.DIR1=M. Sau đú thiết lập P.DIR1=NIL và tiếp tục kiểm tra xem toàn bộ cỏc trường liờn kết của P cú là NIL? Nếu đỳng, tiếp tục tiến trỡnh. Toàn bộ tiến trỡnh đũi hỏi phải duyệt qua cõy một lần từ đỉnh xuống đỏy (để tỡm nỳt sẽ xúa) và một lần đi ngược cõy. Như vậy toàn bộ tiến trỡnh sẽ là O(k) lần.

Hóy xem xột tiến trỡnh làm việc ra sao với cõy MX trờn hỡnh 2.8d. Giả sử ta muốn xoỏ D. Việc xúa nỳt D khụng khú khăn vỡ ta tỡm ra nú và đặt NIL vào trường liờn kết SE của cha nú (cỏi trỏ đến D). Để xỏc định xem cha của D cú hỏng? ta kiểm tra xem bốn trường liờn kết nú là NIL? Khụng đỳng vậy vỡ C và D cú cựng cha.

Mặt khỏc, xem xột việc huỷ bỏ A từ cõy tứ phõn MX trong hỡnh 2.8d. Khi đặt NIL vào trường NE của cha nỳt A, ta thấy rằng cha của A kết thỳc bởi 4 trường rỗng. Như vậy cha của A bị hỏng. Khi điều đú xảy ra, ta khảo sỏt cha của cha A (là gốc) và đặt NIL vào liờn kết NW của gốc. Khi kiểm tra xem gốc cú toàn bộ bốn trường liờn kết là NIL? Điều đú khụng xảy ra và khụng thể

2.4.3. Truy vấn khoảng trong MX-Quadtrees

Cỏc truy vấn khoảng trong MX-Quadtrees được thực hiện một cỏch hoàn toàn tương tự như cõy tứ phõn điểm. Chỉ cú hai điểm khỏc biệt đú là : Nội dung của cỏc trường XLB, XUB, YLB và YUB là khỏc nhau. Điểm khỏc biệt thứ hai là trong cõy MX-Quadtrees tất cả cỏc điểm nằm ở cỏc nỳt lỏ, do vậy đường trũn định nghĩa bởi truy vấn khoảng cần được thực hiện chỉ ở cấp độ lỏ.

2.5. Cõy R (R-Trees)

Trong phần này chỳng ta sẽ giới thiệu một kiểu cấu trỳc dữ liệu mới gọi là

R-Trees, cấu trỳc này cú thể được sử dụng để lưu trữ cỏc vựng chữ nhật của một hỡnh ảnh hay bản đồ. R-Trees đặc biệt hữu ớch trong việc lưu trữ dữ liệu số lượng lớn trờn đĩa. Do việc truy cập đĩa thường rất chậm, R-Trees cung cấp một cỏch thuận tiện trong việc cực tiểu hoỏ số lần truy cập đĩa.

Mỗi R-Trees kết hợp với một thứ tự là một số nguyờn K. Mỗi nỳt R-Trees

khụng phải là lỏ bao gồm một tập từ K/2 đến K hỡnh chữ nhật. Bằng trực quan thấy rằng mỗi nỳt khụng lỏ trong R-Trees trừ nỳt gốc ớt nhất phải là một nửa. Đặc điểm này làm cho R-Trees thớch hợp với việc truy vấn đĩa bởi vỡ mỗi truy cập đĩa mang lại một trang chứa đựng một vài hỡnh chữ nhật (ớt nhất K/2). Hơn nữa, do việc lưu trữ một số hỡnh chữ nhật trong một trang, chiều cao của R-Trees

sử dụng để lưu trữ tập hợp cỏc hỡnh chữ nhật, thường rất nhỏ. Do vậy số lần truy cập đĩa giảm bớt so với cỏc cõy mụ tả trờn.

Một hỡnh chữ nhật hoặc là “thực” hoặc là một hỡnh bao hàm một nhúm hỡnh chữ nhật. Cỏc nỳt lỏ bao gồm một hỡnh chữ nhật “thực” trong khi cỏc nỳt khụng lỏ bao gồm cỏc hỡnh chữ nhật nhúm từ một tập cỏc hỡnh chữ nhật. Hỡnh 2.10 chỉ ra cỏch nhúm cỏc hỡnh chữ nhật như sau. Nhúm Cỏc chữ nhật G1 R1, R2, R3 G2 R4, R5, R6, R7 G3 R8, R9

Hỡnh 2.10. Bản đồ mẫu mụ tả cỏch nhúm cỏc hỡnh chữ nhật minh họa cõy R R

Hỡnh 2.10 chỉ ra cõy R bậc 4 liờn kết với cỏc chữ nhật trờn hỡnh 2.10. Cấu trỳc của một R-Trees được định nghĩa như sau:

rtnodetype = record

Rect1, ..., Rectk: Rectangle; P1, ..., Pk : rtnodetype; end

2.5.1. Chốn và tỡm kiếm trong R-Trees

Khi chốn một hỡnh chữ nhật mới vào một R-Trees ta làm theo những bước dưới đõy:

1. Chỳng ta xem xột trong số cỏc hỡnh chữ nhật liờn quan với nỳt gốc hỡnh nào cần được mở rộng ớt nhất (về mặt diện tớch) để chứa hỡnh chữ nhật được chốn. Vớ dụ nếu chỳng ta chốn hỡnh chữ nhật R10 (hỡnh 2.12) vào cõy R trờn hỡnh 2.11 thỡ cỏch dễ nhất là mở rộng nhúm G1 bởi vỡ việc mở rộng cỏc nhúm khỏc thỡ diện tớch bị bao phủ bởi nhúm này sẽ tăng đỏng kể.

R1 R2 R3 R4 R5 R6 R7 R8 R9

R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 2. Do đú từ những liờn kết của G1 (từ gốc, hỡnh 2.11) chỳng ta sẽ chốn R10 vào khe cú sẵn. Hỡnh 2.11. Trỡnh tự chốn vào cõy R

3. Bõy giờ chỳng ta xem xột việc chốn R11. Nhúm mà diện tớch của nú phải được mở rộng tối thiểu trong trường hợp này là G2. Tuy nhiờn, con G2 của gốc đó đầy. Do vậy cú một vài lựa chọn khỏc như trờn hỡnh 2.13.

4. Từ 2 lựa chọn trờn hỡnh 2.13, ta muốn cú giải phỏp trong hỡnh 2.13b vỡ diện tớch tổng thể của cỏc chữ nhật nhúm là nhỏ nhất.

Hỡnh 2.12. Bản đồ mẫu mụ tả phộp chốn trong cõy R

5. Hỡnh 2.14 chỉ ra cỏch làm khụng đỳng khi chốn chữ nhật R11. Tiếp cận này khụng khả thi vỡ nỳt biểu diễn nhúm chứa chữ nhật R11 cú thể là chỉ chứa duy nhất một chữ nhật.

Nỳt lỏ

G1 G2 G3

R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R1 R2 R3 R4 R5 R6 R 7 R8 R9 R10 R11

Hỡnh 2.13. Bản đồ mẫu mụ tả phộp chốn trong cõy R

2.5.2. Xoỏ trong cõy R-Trees

Việc xúa cỏc đối tượng từ cõy R-Trees cú thể gõy ra một nỳt trong cõy R- Tree trở nờn thiếu hụt (underflow). Nhắc lại rằng một R-Tree bậc k phải bao gồm ớt nhất K/2 hỡnh chữ nhật trong nú. Khi chỳng ta xoỏ một hỡnh chữ nhật từ một R-Tree, chỳng ta phải đảm bảo rằng nỳt đú khụng bị thiếu hụt. Vớ dụ, xem xột R-Trees như hỡnh 2.11 trỡnh bày trờn. Giả thiết chỳng ta muốn xoỏ chữ nhật R9.

Hỡnh 2.14. Bản đồ mẫu mụ tả phộp chốn trong cõy R

Nỳt chứa R9 chỉ cũn lại một nỳt trong nú nếu thực hiện xoỏ R9, kết quả là nỳt này sẽ phản ỏnh một điều kiện hụt. Trong trường hợp này chỳng ta phải tạo ra nhúm logic mới. Một khả năng là sắp xếp lại cỏc nhúm như sau:

Nỳt lỏ G1 G2 G3 R1 R2 R3 R4 R6 R7 R5 R8 Group Rectangles G1 R1, R2, R3 G2 R4, R6, R7 G3 R5, R8

Cõy R mới là kết quả của việc xúa nỳt R9, nú được thể hiện trờn hỡnh 2.15

Hỡnh 2.15. Mụ tả phộp xúa trong cõy R

2.6. So sỏnh cỏc cấu trỳc dữ liệu

Trong chương này ta đó khảo sỏt 4 loại cấu trỳc dữ liệu: cõy k-d, cõy tứ phõn điểm, cõy tứ phõn MX và cõy R. Mỗi chỳng đều cú ưu điểm và nhược điểm nhất định.

- Cõy tứ phõn điểm rất dễ cài đặt. Tuy nhiờn, cõy tứ phõn điểm cú k nỳt thỡ cú thể cú độ cao là k, như vậy làm tăng độ phức tạp cho chốn và tỡm kiếm (nú cú thể là O(k)). Hơn nữa mỗi so sỏnh đũi hỏi so sỏnh hai tọa độ.Việc xúa nỳt trong cõy loại này là khỏ khú khăn. vỡ việc tỡm kiếm nỳt ứng viờn thay thế cho nỳt đang xúa thụng thường là khụng đơn giản. Cuối cựng truy vấn khoảng trong cõy này cần O(2n), n là tổng số bản ghi trong cõy.

- Cõy k-d rất dễ cài đặt. Tuy nhiờn, cõy k-d chứa k nỳt cú thể cú độ cao k, do vậy chốn và tỡm kiếm cú thể phức tạp. Trong thực tế đường dẫn từ gốc tới lỏ của cõy loại này dài hơn trong cõy tứ phõn điểm bởi vỡ cõy này là cõy nhị phõn. Độ phức tạp tồi nhất của tỡm kiếm dải trong cõy k-d là: 

       k kxn O 1 1 . Khi k=2, thỡ độ phức tạp cũn O 2 n như cõy tứ phõn điểm.

- Cõy tứ phõn MX đảm bảo cú độ cao nhất là O(n), trong đú vựng được biểu diễn cú (2n

loại này cần thời gian là O(n). Tỡm kiếm dải của cõy này rất hiệu quả - O(N+2h ), trong đú N là tổng số điểm kết quả truy vấn và h là độ cao của cõy.

- Tương tự với cõy R. Tuy nhiờn, cõy R cú thể cú nhiều chữ nhật lưu trong cựng nỳt, nú phự hợp với xõm nhập đĩa từ bằng giảm độ cao của cõy.

- Một bất lợi của cõy R là cỏc chữ nhật bao kết hợp với cỏc nỳt khỏc nhau cú thể phủ lờn nhau. Như vậy, việc tỡm kiếm trong cõy R thay vỡ đi theo một vết như cỏc cõy khỏc, là phải đi theo nhiều vết trong cõy. Trường hợp này lại làm tăng số lần thõm nhập đĩa.

- Tổng thể, cõy R hiệu quả hơn cõy k-d và cõy tứ phõn điểm trong cỏc ứng dụng đũi hỏi dung lượng đĩa rất lớn phải xõm nhập. Tuy nhiờn nếu chỉ số nhỏ thỡ sử dụng cõy tứ phõn MX sẽ hiệu quả hơn.

Chương 3.

CÀI ĐẶT VÀ THỬ NGHIỆM

3.1. Bài toỏn

3.1.1. Phỏt biểu bài toỏn

- Input: + Dữ liệu bản đồ định dạng bằng shapefile, trong đú cú 2 lớp bản đồ: lớp đường và lớp điểm được tổ chức bởi cỏc tệp:

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 43)

Tải bản đầy đủ (PDF)

(70 trang)