Cấu trúc của một R-tree 45

Một phần của tài liệu tính toán xấp xỉ với các truy vấn liên quan đến khoảng cách trong cơ sở dữ liệu không gian (Trang 45)

2 R– Tree 4

2.2Cấu trúc của một R-tree 45

Một cách tổng quát, R-tree là một cấu trúc chỉ mục cho các đối tượng không gian n-chiều và nó tương tự như B-tree. Cấu trúc chỉ mục này là thực sự linh động, thao tác chèn và xóa có thể kết hợp với phép tìm kiếm và phải tái tổ chức theo chu kỳ.

(MBR, object_ptr) - Trong đó object_ptr tham chiếu đến một bộ dữ liệu trong cơ sở dữ liệu và MBR là một rectangle n-chiều chứa các đối tượng không gian nó biểu diễn.

Các nút không phải lá có khuôn dạng sau:

(MBR, chirld_ptr) - Với chirld_ptr là địa chỉ một nút khác trong cây và

MBR bao gồm các rectangle trong các nút thấp hơn.

Nói cách khác, không gian MBR chứa mọi đối tượng được đánh chỉ mục trong các cây con có gốc là đầu vào của MBR.

Cho M là số lượng tối đa đầu vào có thể vừa đủ với một nút và cho tham số m xác định số lượng tối thiểu đầu vào tại một nút.

Một R-tree thỏa mãn các thuộc tính sau:

™ Mỗi một nút chứa số lượng nút con trong khoảng m và M ngoại trừ nút gốc.

™ Đối với mỗi đầu vào dạng (MBR, object_ptr) tại nút lá, MBR là một rectangle nhỏ nhất có chứa đối tượng dữ liệu n-chiều được biểu diễn bởi

object_ptr.

™ Mỗi nút không phải nút lá có số lượng nút con trong khoảng m và M

ngoại trừ nút gốc.

™ Đối với mỗi đầu vào dạng (MBR, chirld_ptr) tại nút không phải nút lá,

MBR là một rectangle nhỏ nhất có chứa rectangle trong chirld node.

™ Nút gốc có ít nhất là 2 nút con ngoại trừđó là nút lá.

Hình 18: Cây biểu diễn R-Tree

Hình 19: Biểu diễn hai chiều của một R-Tree 2.3 Thuật toán R-Tree

R-tree là một cây cân bằng tương tự như B-tree. Ý tưởng như sau: Các index sẽ nằm tại các nút lá chứa các điểm dữ liệu, khi đó việc tìm kiếm không gian sẽ thực hiện trên một số lượng nhỏ các nút. Một cơ sở dữ liệu không gian bao gồm tập hợp của các bộđại diện cho các đối tượng trong không gian, mỗi bộ có một nhận biết duy nhất ,ta cóthể dùng nhận biết này để truy xuất nó. Các

node lá trong R-Tree chứa các đầu vào mẫu tin chỉ mục (index record entries) (I,

tuple-identifier [4]) với tuple- identifier (nhận dạng bộ dữ liệu) tham khảo đến một bộ trong cơ sở dữ liệu và I là hình chữ nhật n chiều, hình này là khung giới hạn nhỏ nhất - MBR của các index đối tượng không gian.

I = (I0, I1,… In).

n - số chiều không gian

Ii - một khoảng biên khép kín [a,b], mô tả phạm vi của đối tượng cùng với chiều i.

Một node không phải là node lá chứa các entry như sau (I, child-pointer), child-point là địa chỉ của node thấp hơn trong R-Tree và I bao phủ tất cả các hình chữ nhật trong các entry của các node thấp hơn.

Hình 21: Các quan hệ có thể có giữa các MBR (chứa trong, chồng lấn…) 2.3.1 Tìm kiếm trong cấu trúc dữ liệu tổ chức dưới dạng R-Tree Tìm kiếm

Thuật toán tìm kiếm duyệt cây từ gốc (root) đi xuống theo cách tương tự như B-tree. Tuy nhiên khi thăm một node sẽ có nhiều hơn một cây con dưới node đó cần được tìm kiếm, vì lý do đó thuật toán không thể bảo đảm thực hiện tốt trong các trường hợp xấu nhất. Tuy nhiên với nhiều kiểu của dữ liệu thuật toán cập nhật sẽ duy trì hình dạng của cây cho phép thuật toán tìm kiếm loại đi các vùng không liên quan của không gian được đánh chỉ mục, và kiểm tra duy nhất dữ liệu gần vùng tìm kiếm. Chúng ta sẽ biểu diễn phần hình chữ nhật của một chỉ mục E là EI, và phần nhận dạng dữ liệu hay child-pointer là Ep.

Thuật toán tìm kiếm:

Cho R-tree có root là T, tìm tất cả các mẫu tin chỉ mục mà có các hình chữ nhật chồng lên một hình chữ nhật cần tìm S.

™ S1 [Tìm kiếm trên cây con] Nếu T là một node lá, kiểm tra mỗi mục E để xác định xem Ei có trùng lên S hay không. Với tất cả các mục trùng nhau, thực hiện tìm kiếm trên cây mà node root của nó được chỉ bởi Ep.

™ S2 [Tìm kiếm trên node lá] NếuT là một lá, kiểm tra tất cả các mục E để xác định EI có trùng lên S hay không. Nếu trùng E là một record đủ tiêu chuấn. (adsbygoogle = window.adsbygoogle || []).push({});

2.3.1.1 Chèn (Insertion)

Việc thêm các index cho các bộ dữ liệu mới giống như thêm trong B-tree là các index mới được thêm vào cho các lá, các node chứa quá số lượng sẽ bị

tách ra và quá trình tách này sẽ lan truyền lên phía trên cây.

Thuật toán Chèn (Insert):

Thêm một mục nhập chỉmục mới E vào trong R-tree

™ I1: [Tìm vị trí cho dữ liệu mới] dùng thuật toán chọn lá (ChooseLeaf) để chọn một node lá L để thêm E.

™ I2: [Thêm dữ liệu cho node lá] nếu L có chỗ cho một entry khác, thêm E nếu không thì dùng thuật toán chia node (SplitNode) đểcó được L và LL chứa E và tất cả các mục nhập của L.

™ I3: [Lan truyền các thay đổi lên phía trên] Dùng thuật toán điều chỉnh cây (AdjustTree) trên L, đồng thời bỏ qua LL nếu việc phân chia đã được thực hiện.

™ I4: [Tăng trưởng cây] Nếu việc phân chia node lan truyền làm cho root phân chia, tạo ra một root mới, mà con của root mới này là 2 node kết quả.

2.3.1.2 Thuật toán Chọn lá (ChooseLeaf):

Chọn một node lá mà node lá này đặt một chỉ mục mới E.

™ CL1: [Khởi tạo] cho tập N là node root.

™ CL2: [Kiểm tra lá] Nếu N là một lá, trả về N.

™ CL3: [Chọn cây con] Nếu N không phải là một lá, cho F là entry trong N mà các hình chữ nhật của nó FI cần mở rộng lá để tính EI. Giải quyết các hạn chế bằng cách chọn entry với hình chữ nhật có diện tích nhỏ nhất.

™ CL4: [Đi xuống cho đến khi một node lá được tìm thấy] tập N là node con được chỉđến bởi Fp và lặp lại từ CL2.

2.3.1.3 Thuật toán điều chỉnh cây (AdjustTree):

Đi lên từ một node lá L đến root, điều chỉnh hình chữ nhật bao phủ và lan truyền phân chia các node chia khi cần thiết.

™ AT1: [Khởi tạo] cho tập N=L, nếu L đã được phân chia trước đó, tập NN là kết quả của node thứ hai .

™ AT2: [Kiểm tra nếu thực hiện] Nếu N là root, ngưng.

™ AT3: [Điều chỉnh vùng phủ hình chữ nhật trong mục nhập cha] Cho P là node cha của N và cho EN là các entry của N trong P. Điều chỉnh EN I để cho nó bao sát xung quanh tất cả các hình chữ nhật entry trong N.

™ AT4: [Lan truyền node bị tách lên phía trên] Nếu N có NN (partner) kết quả từ một phân chia mới nhất, tạo một entry mới ENN P trỏ đến NN và ENN I bao quanh tất cả các hình chữ nhật trong NN, thêm ENN vào P nếu có chỗ. Nếu không dùng SplitNode đểtạo ra P và PP chứa ENN và tất cả các entry của P.

™ AT5: [Di chuyển đến mức kết tiếp]. Cho tập N=P và tập NN=PP nếu có sự phân chia xảy ra. Lặp lại bước AT2.

2.3.2 Xóa (Deletion) Thuật toán xóa

Thay đổi vị trí index của record E từ R-tree

™ D1: [Tìm node chứa record] thực hiện thuật toán FindLeaf để xác định vị trí node lá L chứa E. Ngưng nếu record được tìm thấy.

™ D2: [Xóa record] Xóa E từ L.

™ D3: [Lan truyền thay đổi] dùng thuật toán CondenseTree bỏ qua L.

™ D4: [Rút ngắn cây] Nếu root có duy nhất một con sau khi cây đã được điều chỉnh, tạo con cho root mới.

2.3.2.1 Thuật toán tìm lá (FindLeaf):

Cho R-tree có root là T, tìm node lá chứa đầu vài chỉ mục E. (adsbygoogle = window.adsbygoogle || []).push({});

™ FL1: [Tìm cây con] nếu T không phải là node lá, kiểm tra mỗi entry F trong T để xác định, nếu FI chồng lấp với EI. Với mỗi entry thực hiện thuật toán FindLeaf trên cây mà root của nó được trỏđến bởi Fp cho đến

khi E được tìm thấy hay tất cả các entry đã được kiểm tra.

™ FL2: [Tìm node lá cho mục cho record] Nếu T là lá, kiểm tra mỗi entry để xem nếu nó phù hợp với E, nếu E được tìm thấy trả về T.

2.3.2.2 Thuật toán Gom cây (CondenseTree):

Cho một node lá L, mộtentry được xóa từ node lá này, loại ra node này nếu nó có quá ít các chỉ mục và xây dựng lại các entry của nó. Lan truyền việc loại node này lên trên khi cần thiết. Điều chỉnh các hình chữ nhậtbao phủ trên đường dẫn đến root, làm cho các hình chữ nhật này nhỏ hơn nếu có thể.

™ CT1: [khởi tạo] cho tập N=L, tập Q là tập của các node bịloạibỏ, Q là tập rổng.

™ CT2: [Tìm entry cha] nếu N và root, nhảy tới bước CT6. Nếu không thì cho P là cha của N, và cho EN là các entry của N trong P.

™ CT3: [Loạinode không đủ(Eliminate under-full node)] Nếu N có ít hơn m entry, xóa EN khỏi P và thêm N vào tập Q.

™ CT4: [Điều chỉnh hình chữ nhật bao phủ] Nếu N không bị loại bỏ, điều chỉnh EN I để chứa sát lại các entry trong N.

™ CT5: [Di chuyển lên trên mộtmức trong cây] Cho tập N=P và lặp lại từ CT2.

™ CT6: [Chèn lại các entry bị mồi côi (Re-insert orphaned entries)]

Chèn lại vào tất cà các entry của các node trong tập Q. Các entry từ các node lá bị loại bỏ được chèn lại vào trong các lá của cây như đã được mô tả trong thuật toán Insert, nhưng các entry từ các node có mức cao hơn phải được đặt cao hơn trong cây, vì vậy các lá của các cây con phụ thuộc vào chúng sẽ nằm trên cùng mức như các lá của cây mẹ.

2.3.3 Cập nhật

Nếu một bộ dữ liệu được cập nhật để cho hình chữ nhật bao phủ nó bị thay đổi, bản ghi chỉ mục của nó phải bị xóa, cập nhật và chèn lại, vì vậy nó sẽ phải

tìm cách đểđặt đúng vị trí trong cây.

Một cách tìm kiếm khác so với cách được mô tả ở trên có thể hữu ích hơn, ví dụđể tìm tất cả các đối tượng dữ liệu được chứa hoàn toàn trong một vùng tìm kiếm, hoặc tất cả các đối tượng chứa vùng tìm kiếm.

Các bước thực hiện có thể được thực hiện bằng các biến đổi dễ hiểu trên thuật toán đã cho. Tìm một entry cụ thể mà nhận dạng của nó đã được biết trước cần đến thuật toán xóa và được thực hiện bằng thuật toán FindLeaf. Các biến đổi của phạm vi xóa, trong phạm vi này, tất cả các đối tượng dữliệu trên diện tích liên quan được xóa đi, cũng được R-tree cung cấp khá tốt.

2.3.3.1 Thuật toán tách node (Node Splitting)

Để thêm một một entry mới để một node đầy chứa M các chỉ mục, cần phải phân chia tập hợp của M+1 các entry thành hai node. Sự phân chia nên được thực hiện theo cách làm cho nó không chắc có thể thực hiện được việc phân chia cả hai node mới sẽ cần được kiểm tra trên việc tìm kiếm thứ tự. Khi đó sự quyết định thăm một node phụ thuộc vào hình chữ nhật bao phủ nó có chồng lên diện tích tìm kiếm. Tổng số diện tích của hai hình chữ nhật bao phủ sau khi tách có thểđược giảm đến mức tối thiểu. Hình dưới đây minh họa điều này. Diện tích của các hình chữ nhật trong trường hợp “bad split”lớn hơn nhiều so với trường hợp “good split”.

Hình 22: Trường hợp phân chia node

Cùng tiêu chuẩn đã được dùng trong thủ tục ChooseLeaf để quyết định xem nơi nào có thể chèn một chỉ mục mới vào tại mỗi mức trong cây, cây con được chọn là một cây mà hình chữ nhật bao phủ của nó phải được mở rộng ít

Good Bad split

nhất khi chèn chỉ mục mới vào.

Chúng ta quay lại thuật toán phân chia tập M+1 entry thành hai nhóm cho mỗi node mới.

Hình 23: Phân chia entry thành các nhóm node mới Thuật toán A Quadractic-Cost

Thuật toán này cố gắng tìm một vùng được tách ra có diện tích nhỏ, nhưng không bảo đảm là có thể tìm được một vùng có thể có diện tích nhỏ nhất. Chi phí là bậc hai theo M và tuyến tính theo số lượng của các chiều.

Thuật toán chọn hai trong M+1 entry làm phần tử đầu tiên của hai nhóm mới bằng cách chọn hai entry này, hai entry này có thể làm lãng phí diện tích lớn nhất nếu cả hai được đặt trong cùng một nhóm. Như vậy diện tích hình chữ nhật bao phủ cả hai entry, trừ đi diện tích của chính các entry, sẽ là lớn nhất. Các entry còn lại được gán vào các nhóm cùng lúc. Tại mỗi bước, việc mở rộng diện tích đòi hỏi phải thêm mỗi entry còn lạicho mỗi nhóm được tính toán, và entry được gán thì sẽ xuất hiện một sự khác biệt lớn nhất giữa hai nhóm.

Thuật toán Quadratic Split

Phân chia một tập M+1 các chỉ mục thành hai nhóm.

™ QS1: [chọn entry đầu tiên cho mỗi nhóm] Áp dụng thuật toán PickSeeds để chọn hai entry làm các phần tử đầu tiên của các nhóm. Gán mỗi entry cho một nhóm. (adsbygoogle = window.adsbygoogle || []).push({});

™ QS2: [Kiểm tra nếu đã thực hiện] Nếu tất cả các entry đã được gán, ngưng. Nếu một nhóm có một vài entry mà tất cả những entry còn lại

phải được gán vào nó theo thứ tựđể cho nhóm này có m nhỏ nhất, gán các entry và ngưng.

™ QS3: [Chọn entry để gán] Thực hiện thuật toán PickNext để chọn entry kế tiếp để gán. Thêm entry này vào nhóm mà hình chử nhật bao phủcủa nó sẽ phải mở rộng ít nhất để chứa entry này. Giải quyết các hạn chế bằng cách thêm entry vào nhóm có diện tích nhỏ nhất, khi đó nhóm này có các entry ít hơn nhóm khác. Lặp lại QS2.

Thuật toán PickSeeds

Chọn hai entry làm phần tửđầu tiên của các nhóm.

™ PS1: [Tính toán sự thiếu hiệu quảcủa việc nhóm các entry với nhau] Cho mỗi cặp các entry E1 và E2 , tạo một hình chữ nhật J bao gồm E1I và E2I Tính d = area(J) – area (E1I) - area(E2I).

™ PS2: [Chọn cặp gây lãng phí nhất] Chọn cặp có d lớn nhất.

Thuật toán PickNext

Chọn một mục còn lại để phân loại vào một nhóm.

™ PN1: [Xác định giá trị của việc đặt mỗi entry trong mỗi nhóm] Cho mỗi entry E chưa được phân nhóm, tính d1 = diện tích được yêu cầu tăng trong hình chữ nhật bao phủ của nhóm 1 để bao gồm EI, tính toán

d2 tương tự như trên cho nhóm 2.

™ PN2: [Tìm entry thích hợp nhất cho một nhóm] Chọn bất kỳ entry nào có sự khác biệt lớn nhất giữa d1 và d2.

Thuật toán LinearPickSeeds

Chọn hai entry làm các phần tửđầu tiên của các nhóm.

™ LPS1: [Tìm các hình chữ nhật xa nhất theo tất cả các chiều] Theo mỗi chiều, tìm các entry mà hình chữ nhật của nó có cạnh dưới cao nhất và có cạnh trên thấp nhất. Ghi lại việc phân chia.

™ LPS2: [Điều chỉnh hình dạng của cụm hình chữ nhật] Chuẩn hóa việc phân chia bằng cách chia chiều rộng của toàn bộ các tập theo chiều

tương ứng.

™ LPS3: [Chọn cặp cách xa nhất] Chọn cặp có sự phân chia được chuẩn hóa lớn nhất theo bất kỳ chiều nào.

Trên đây đề tài đã trình bày thuật toán R-tree, chúng ta có thể áp dụng phương pháp này để tạo index cho cụm. Ta xem các cụm như là các không gian mà chúng ta cần truy xuất, các vùng dữ liệu của cụm sẽ được phân chia để nằm trong các hình chữ nhật nhỏ (không gian 2 chiều), ta sẽ có các hình chữ nhật lớn hơn bao ngoài các hình chữ nhật nhỏ chứa dữ liệu này áp dụng

R-tree để tạo cây, khi đó nếu cần truy xuất một vùng dữ liệu nào đó trong cụm ta sẽ dùng thuật toán tìm để xác định địa chỉ vùng dữ liệu này đang nằm ở lá nào trong cây hay nói cách khác là lá nào đang chứa thông tin về vị trí của vùng dữ liệu mà ta đang cần, khi biết các thông tin vềvịtrí trong không gian của vùng dữ liệu đang tìm ta sẽ truy xuất đến rất nhanh cụm dữ liệu này. Như vậy từ nếu tạo được index cho cụm thì việc tìm kiếm tương tự sẽ được giảiquyết nhanh chóng. Ta chỉ cần tìm xem vị trí không gian của đối tượng cần tìm tương tự nằm trong vùng địa chỉ không gian tại lá nào, truy xuất tất cả các dữ liệu nằm trong vùng không gian đó ra để xét tương tự. Nếu không có index cụm ta sẽ phải vét cạn các điểm trong cụm mới xác định được vị các vị trí không gian cần tìm. Index cụm cũng cho phép xây dựng thuật toán tăng trưởng cho gom cụm, từ index ta có thể xác định rất nhanh các vùng dữ liệu bị ảnh hưởng khi thêm hay xóa dữ liệu mà không phải xác định lại tất cả các cụm từđầu.

Tuy nhiên R-tree vẩn còn hạn chế về hiệu xuất và nó chưa tối ưu các vùng không gian của hình chữ nhật thư mục như: Diện tích bao phủ, vùng chồng lấn, lề. Thuật toán R*-tree đã đưa ra các phương pháp cải tiến các khuyết điểm này của R-tree.

3 Các kỹ thuật tính toán xấp xỉ khoảng cách 3.1 Thu nhỏ không gian tìm kiếm 3.1 Thu nhỏ không gian tìm kiếm

Thu nhỏ không gian tìm kiếm - Search space reduction - bằng những kỹ thuật xấp xỉ không gian tìm kiếm tiêu biểu nhất

Phương pháp xấp xỉ ε

Một phần của tài liệu tính toán xấp xỉ với các truy vấn liên quan đến khoảng cách trong cơ sở dữ liệu không gian (Trang 45)