Nhiệm vụ truy vấn là tìm ra các đối tượng mà nó giao với đối tượng truy vấn. Đối tượng truy vấn được đại diện bởi chữ nhật bao nhỏ nhất (MBR – Minimum Bounding Rectangle). Khi chèn một hình chữ nhật mới vào một R - Tree ta làm theo những bước dưới đây:
Bắt đầu từ gốc cây nếu nút hiện hành không phải là lá. Xét từng đầu vào E, nếu chữ nhật E cắt chữ nhật câu truy vấn Q, hãy tìm theo cành con được trỏ bởi con trỏ. Nếu nút hiện hành là lá, với mỗi đầu vào E, nếu chữ nhật E cắt chữ nhật Q thì con trỏ lá trỏ đến đối tượng có thể cắt Q. Có thể phải tìm vài cành con trong một nút. Đầu vào là hình chữ nhật tìm kiếm (hộp truy vấn). Quá trình tìm kiếm bắt đầu từ nút gốc của cây. Mọi nút bên trong tập hợp các hình chữ nhật và con trỏ đến nút con tương ứng và mỗi nút lá chứa hình chữ nhật của đối tượng không gian (con trỏ đến một số đối tượng không gian có thể). Mỗi hình chữ nhật trong nút được chọn nếu nó chồng lấp hình chữ nhật cần tìm kiếm. Nếu đúng, nút con tương ứng được tìm thấy. Tìm kiếm đã xong và đệ quy cho đến tất cả nút chồng lấp đã được duyệt qua. Khi nút lá được duyệt hình chữ nhật bao được kiểm tra lại lần nữa với hình chữ nhật tìm kiếm cùng với đối tượng của chúng (nếu có) được đặt vào danh sách kết quả nếu chúng nằm trong hình chữ nhật tìm kiếm. Tìm kiếm ưu tiên là tìm kiếm cận kề, truy vấn gần nhất bao gồm điểm hoặc hình chữ nhật. Nút gốc được chèn vào trong hàng đợi ưu tiên. Cho đến hàng đợi rỗng hoặc số kết quả đã trả về, tìm kiếm
tiếp tục bằng xử lý mục gần nhất trong hàng đợi. Các nút của cây được mở rộng và con của chúng được chèn vào lại. Các mục nút lá sẽ được gọi khi có trong hàng đợi.
Thuật toán tìm kiếm với R – tree [4], [5]
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ếu T 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. Để chèn đối tượng, cây được đệ quy từ nút gốc. Ở mỗi bước, hình chữ nhật trong nút hiện hành kiểm tra hình được chọn, nó sử dụng tìm kiếm heuristic để chọn hình chữ nhật đòi hỏi sự mở rộng ít nhất. Tìm kiếm thực hiện cho đến nút lá. Nếu nút lá đầy, nó phải tách trước khi chèn. Tìm kiếm heuristic để chia nút thành hai. Thêm nút mới được tạo ra vào mức trên nó, mức này có thể tràn bộ nhớ việc này có thể lan truyền lên đến nút gốc khi nút này cũng tràn bộ nhớ, nút gốc mới đã được tạo lập và cây đã gia tăng ở độ cao. Ta minh họa tiến trình như sau:
Cho M = 4. Số 15 trước tiên đã được chèn vào nút lá d. dr của d phải mở rộng để đính kèm đối tượng mới này, và mục d trong gốc phải được điều chỉnh. Số 16 sẽ là chèn vào nút lá b. Vì b đã chứa bốn mục { 3, 4, 7, 10 }, việc tràn bộ nhớ xảy ra (gọi độ lớn của M là 4), b bị tách. Nút lá mới được tạo và 5 mục được phân phối giữa b và e. Mục 10 được di chuyển đến e (nơi mục 16 đã được chèn). Mục 3, 4, và 7 duy trì ở b. Bây giờ mục mới phải được thêm vào trong cha của b. Vì R đã chứa bốn con, nó phải lần lượt được chia tách. Quy trình giống mô tả cho nút lá b. Một nút mới f đã được tạo lập, a và b ở lại R; e, c, d được gắn vào f. Cuối cùng, nút mới R’ được tạo chứa hai con là R và f. [4], [5], [6]
Thuật toán chèn [4], [5]
I1 [Tìm vị trí cho dữ liệu mới]: Dùng thuật toán chọn lá (ChooseLeaf) dể
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 dổ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 truở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ả.
Hình 2.14: Trình tự chèn vào cây R
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 ENI để 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 ENNP trỏ đến NN và ENNI 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 E và tất cả các entry của P.
AT5 [Di chuyển đến mức kế 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.
Hình 2.15: Bản đồ mô tả phép chèn trong cây R