DANH SÁCH HÌNH VẼ Hình 1.1 Thứ tự giữacácđoạnthẳng với đườngthẳngquétdọc 9 Hình 1.3 Thuật toán chỉ cần kiểm tra7 điểm trong mảng 16 Hình 2.1 Giải thíchtruy vấncơ sở dữ liệu một cách hình
Trang 3MỤC LỤC
DANH SÁCH THUẬT NGỮ VÀ GIẢI THÍCH 2
DANH SÁCH HÌNH VẼ 3
MỞ ĐẦU 5
Chương 1 - TỔNG QUAN VỀ HÌNH HỌC TÍNH TOÁN 6
1.1 Các bài toán của hình học tính toán 6
1.2 Các đối tượng hình học 8
1.3 Một số bài toán hình học và thuật toán 8
1.3.1 Bài toán xác định cặp đoạn thẳng bất kỳ cắt nhau 8
1.3.2 Bài toán tìm bao lồi 11
1.3.3 Bài toán tìm cặp điểm gần nhất 14
1.4 Kết luận 17
Chương 2 - KIỂU DỮ LIỆU TRỪU TƯỢNG TRONG HÌNH HỌC TÍNH TOÁN 18
2.1 Tìm kiếm phạm vi trực giao 18
2.1.1 Mô hình quản lí đối tượng một chiều 19
2.1.2 Mô hình quản lí đối tượng hai chiều 22
2.1.3 Mô hình quản lí đối tượng nhiều chiều 30
2.2 Cấu trúc dữ liệu hình học 35
2.2.1 Interval trees 36
2.2.2 Priority search trees 41
2.2.3 Segment trees 45
2.3 Biến thể của các cấu trúc dữ liệu hình học 51
2.3.1 Partition trees 52
2.3.2 Multi-level partition trees 57
2.3.3 Cutting trees 60
2.4 Kết luận 66
Chương 3 - CÀI ĐẶT VÀ ĐÁNH GIÁ 68
3.1 Cài đặt Kd-trees 68
3.2 Cài đặt Range trees 70
3.3 Cài đặt Interval trees 72
3.4 Cài đặt Segment trees 74
3.5 Kết luận 76
KẾT LUẬN 77
TÀI LIỆU THAM KHẢO 78
Trang 4DANH SÁCH THUẬT NGỮ VÀ GIẢI THÍCH
1 Canonical subset Tập con chính qui
2 -Dimensional Kd-trees Kd-trees chiều
3 -Dimensional Range trees Range trees chiều
4 Interval trees Cây quản lí khoảng
5 Multi-level partition trees Cây phân vùng nhiều mức
7 Priority search trees Cây tìm kiếm ưu tiên
10 Segment trees Cây quản lí đoạn thẳng
11 Stabbing queries Truy vấn stabbing
12 Windowing queries Truy vấn cửa sổ
Trang 5DANH SÁCH HÌNH VẼ
Hình 1.1 Thứ tự giữacácđoạnthẳng với đườngthẳngquétdọc 9
Hình 1.3 Thuật toán chỉ cần kiểm tra7 điểm trong mảng 16 Hình 2.1 Giải thíchtruy vấncơ sở dữ liệu một cách hình 18 Hình 2.2 Truy vấn phạm vi một chiều trong cây nhị phân tìm kiếm 20 Hình 2.3 Kd-trees: mặt phẳng được chia và cây nhị phân 23
Hình 2.7 Tăng tốc độ tìm kiếm bằng cách thêm các con trỏ 33
Hình 2.9 Các mảngliên kếtvớicác núttrongcây chính 34 Hình 2.10 Truy vấn cửa sổ trong bản đồ của U.S 36 Hình 2.11 Phân loại các đoạn thẳng liên quan với 38
Hình 2.13 Các đoạn thẳngcắt bởi qcóđiểm đầu mút trái 40
Hình 2.14 Heap của tập hợp {1,3,4,8,11,15,21,22,36} 42 Hình 2.15 Một tập hợp các điểm và cây tìm kiếm ưu tiên tương ứng 43
Hình 2.17 Đoạn thẳng lưu tại v thay vì lưu trữ tại và 47 Hình 2.18 Segment trees: mũi têntừcácnúttrỏtới tập con chính qui 48 Hình 2.19 Tập con chính qui chứacác đoạnthẳng màbao
trùmsàncủamột nút, nhưng không phải làsàncủacha nó 49
Hình 2.21 Trả lời truy vấn nửa đường thẳng với cây nhị phân 53
Hình 2.23 Phân vùng mặt phẳng đơn hình và cây tương ứng 54
Trang 6Số Tên hình Trang
Hình 2.24 Trả lời truy vấn phạm vi nửa mặt phẳng với partition trees 56 Hình 2.25 Đếm phạm vi nửa mặt phẳngtrongmặt phẳng đối ngẫu 60 Hình 2.26 (1/2) - cutting kích thước 10 cho tập hợp 6 đường thẳng 61
Hình 2.27 Cáctập con chính quivàtập conđiquatam giác 62
Hình 3.1 Sơ đồ các lớp trong thực hiện Kd-trees 68 Hình 3.2 Sơ đồ các lớp trong thực hiện Range trees 70 Hình 3.3 Sơ đồ các lớp trong thực hiện Interval trees 72 Hình 3.4 Sơ đồ các lớp trong thực hiện Segment trees 74
Trang 7MỞ ĐẦU
Hình học tính toán xuất hiện từ lĩnh vực phân tích và thiết kế thuật toán trong cuối những năm 1970 và lớn mạnh trở thành một môn học với tạp chí riêng, hội nghị riêng và có một cộng đồng lớn các nhà nghiên cứu hoạt động Hình học tính toán là một chuyên ngành khoa học máy tính nghiên cứu các thuật toán giải quyết các bài toán hình học Hình học tính toán có ứng dụng trong nhiều lĩnh vực khác nhau như đồ họa máy tính, hệ thống thông tin địa lí, người máy, thống kê và những lĩnh vực khác mà trong đó các thuật toán hình học đóng vai trò cơ bản Vấn đề hình học tính toán với đầu vào là mô tả kiểu của tập hợp các đối tượng hình học, ví dụ như tập hợp các điểm, tập hợp các đoạn thẳng, hoặc tập hợp các đỉnh của một đa giác theo thứ tự ngược chiều kim đồng Đầu ra
là đáp ứng với truy vấn về các đối tượng như các đường thẳng cắt nhau, hoặc có thể là một đối tượng hình học mới, ví dụ như bao lồi của tập hợp các điểm
Các đối tượng hình học như điểm, đường thẳng và đa giác là cơ sở của một loạt các ứng dụng quan trọng và làm tăng tính thú vị của tập hợp các vấn đề
về thuật toán Ngày nay, máy tính được sử dụng ngày càng nhiều hơn để giải quyết các bài toán hình học với quy mô lớn hơn Lời giải tốt cho các bài toán thuật toán có tính chất hình học chủ yếu dựa trên hai thành phần Một là sự hiểu biết thấu đáo các tính chất hình học của bài toán, hai là ứng dụng các kỹ thuật thuật toán và cấu trúc dữ liệu thích hợp
Trong luận văn sẽ trình bày một số kiểu dữ liệu trừu tượng và cấu trúc dữ liệu trong hình học tính toán Những ứng dụng của các cấu trúc dữ liệu này không chỉ giới hạn trong các đối tượng hình học mà còn cho phép thiết kế những thuật toán hiệu quả, có thể xử lí các loại dữ liệu khác nhau của nhiều bài toán khác nhau
Luận văn được tổ chức thành 3 chương như sau:
Chương 1 – Trình bày tổng quan về hình học tính toán như các đối tượng
của hình học, một số bài toán hình học và thuật toán
Chương 2 – Mô tả kiểu dữ liệu trừu tượng trong hình học tính toán như
mô hình quản lí đối tượng một chiều, hai chiều và nhiều chiều
Chương 3 – Cài đặt các cấu trúc dữ liệu, kết quả cài đặt thử nghiệm, đánh
giá hiệu suất của thuật toán và chương trình
Trang 8Chương 1 - TỔNG QUAN VỀ HÌNH HỌC TÍNH TOÁN
1.1 Các bài toán của hình học tính toán
Hình họctính toánlà mộtchuyên ngành củakhoa họcmáy tínhnghiên cứucácthuật toáncó nội dung hình học Một sốbài toánhình họcphát sinh hoàn toàntừviệc nghiên cứu cácthuật toánhình học tính toánvà cácbài toánnàycũng đượcxemlà một phần củahình học tính toán Hình học tính toán nghiên cứusự phức tạpcủa cácbài toánhình học, xây dựngcấu trúc dữ liệuđểlưu trữcác loại dữ liệuhình học, thiết kếthuật toáncho cácbài toánhình học và khám phácác tính chấthình học Những vấn đề cốt lõi trong hình học tính toán có thể được chia với nhiều cách khác nhau, theo nhiều tiêu chí khác nhau Ở đây, có thể phân loại các bài toántrong hình học tính toán thành các lớp bài toán như dưới đây[1]
Trang 9vàkhông gian cần thiết để giải quyếtmột trường hợp bài toánnhất định
1.1.2Bài toán động
Thêm một lớpchínhlà các bài toánđộng,vớimục tiêu là đểtìmthuật toánhiệu quảcho việc tìm lời giảinhiều lầnsau mỗi lầnsửa đổigia tăng dữ liệu đầu vào Các thuật toáncho bài toánthuộc loại nàythườngliên quan đếncấu trúcdữ liệu động Bất kỳcác bài toánhình họctính toáncó thể đượcchuyển đổi thành mộtbài toán động.Bài toántìm kiếmphạm vicó thểđược chuyển đổi thànhbài toántìm kiếmphạm vi động,bằng cách cung cấpbổ sunghoặcxóacác điểm.Cácbài toánbao lồi độnglà đểlưu vết cácbaolồi,chẳng hạn như đối với tập hợp các điểmthay đổi động, khicác điểmđầu vàođược chènhoặcxóa
1.1.3Bài toán truy vấn hình học
Bài toán truy vấn hình họcthường gọi làbài toántìm kiếmhình học,đầu vàobao gồm hai phần: không gian tìm kiếmvà truy vấn với thay đổitrongcác trường hợpbài toán.Không giantìm kiếmthườngphải đượcxử lí trước, trong cùng một cách mànhiều truy vấn có thể đượctrả lờimột cách hiệu quả.Một sốbài toántruy vấnhình họccơ bảnlà:
Range Searching: Xử lí trướctập hợp các điểm và yêu cầuđếm số lượng cácđiểmnằm trong vùngtruy vấn một cách hiệu quả
Points Location: Cho phân vùngcủa không gianthành các ô và yêu cầu tạo racấu trúcdữ liệuhiệu quảchoô nơi điểmtruy vấnđược định vị
Nearest neighbor:Cho tập hợp các điểm và yêu cầutìmđiểm nằm gần nhất vớiđiểmtruy vấn một cách hiệu quả
Raytracing: Cho tập hợp các đối tượngtrong không gian và yêu cầu tạo racấu trúcdữ liệuhiệu quảchođối tượngcó tiatruy vấncắtđầu tiên
Nếu không gian tìm kiếm là cố định, độ phức tạp tính toán cho bài toán truy vấn hình họcđược ước tính bởi thời gian và không gian cần thiết để xây dựng các cấu trúc dữ liệu tìm kiếm và thời gian trả lời các truy vấn
1.1.4Các biến thể
Một số bài toáncó thểđược xem làthuộcmột trong cácloại trên,tùy thuộcvào bối cảnh.Chẳng hạn xét bài toán: Point in polygon – Xác định một điểm nằm trong hay nằm ngoài đa giác cho trước.Trong một vài tình huống của bài toán truy vấn có thể kỳ vọng hợp lí vào thứ tự các truy vấn, hoặc có thể được
Trang 10khai thác với cấu trúc dữ liệu hiệu quả hoặc ước tính độ phức tạp chặt chẽ hơn
1.2.2 Đoạn thẳng
Một tổ hợp lồi của hai điểm phân biệt và là
Đoạn thẳng là tập hợp mọi tổ hợp lồi của và , kí hiệu , với
và các điểm đầu mút của đoạn thẳng Đoạn thẳng có hướng là đoạn thẳng được định hướng từ đến , kí hiệu [13]
1.2.3 Vectơ
Vectơ là một đoạn thẳng có hướng Vectơ có điểm đầu và điểm cuối , được kí hiệu Khi không cần chỉ rõ điểm đầu, điểm cuối ta kí hiệu [13]
1.3 Một số bài toán hình học và thuật toán
1.3.1 Bài toán xác định cặp đoạn thẳng bất kỳ cắt nhau
Thuật toánxác định cặp đoạn thẳng bất kỳtrong tập hợp các đoạn thẳng cắt nhau sử dụng “kỹ thuật quét” Trongkỹ thuật quét, đường thẳngquétdọcđiquatập hợp các đối tượng hình họctừtráisangphải vàxem xét tất cảcácđiểm đầu mút củađoạn thẳng theo thứ tự từtráisangphải vàkiểm trasự cắt nhau mỗi khichạmmộtđiểm đầu mút
1.3.1.1 Phát biểu bài toán
Cho tập hợp các đoạn thẳng trong mặt phẳng và yêu cầu xác định có tồn tại cặp đoạn thẳng nào cắt nhau hay không Giả sử rằng không có các đoạn thẳng
Trang 11dọc và không có ba đoạn thẳng nào giao nhau tại một điểm
Hình 1.1 -Thứ tự giữa cácđoạnthẳng vớiđườngthẳngquétdọc
Với bất kỳ cho trước, mối quan hệ là một thứ tự hoàn toàn của đoạn thẳng cắt đường thẳng quét tại Những mối quan hệ , ,
, và ; Đoạn thẳng không so sánh được với các đoạn thẳng khác, hình 1.1a Khi đoạn thẳng và giao nhau, nhưng ; mọi đường thẳng quét đi qua vùng bóng mờ đều có và nằm liên tiếp nhau trong quan hệ thứ tự , hình 1.1b
Khi di chuyển đường thẳng quét, thuật toán thường phải quản lí hai tập hợp dữ liệu sau:
- Tình trạng đường thẳng quét cho biết thứ tự giữa các đoạn thẳng được cắt bởi đường thẳng quét
- Lịch các điểm biến cố là một dãy các tọa độ của các điểm đầu mút được sắp thứ tự từ trái sang phải để xác định vị trí dừng của đường thẳng quét
Gọi mỗi vị trí dừng như một điểm biến cố Tình trạng của đường thẳng quét thay đổi tại các vị trí dừng của đường thẳng quét
Trang 12Các thao tác của trình trạng đường thẳng quét để duy trì truy vấn
- INSERT( ): chèn đoạn thẳng vào
- DELETE( ): xóa đoạn thẳng khỏi
- ABOVE( ): trả về đoạn thẳng ở ngay trên trong
- BELOW( ): trả về đoạn thẳng ở ngay dưới s trong
Cấu trúc dữ liệu cho lịch điểm biến cố (event-point schedule)
- Mỗi điểm đầu mút của các đoạn thẳng trong là một điểm biến cố, là vị trí đường thẳng quét nơi thứ tự thay đổi
- Lịch điểm biến cố là tĩnh và được xây dựng bằng cách sắp xếp các điểm đầu mút của các đoạn thẳng theo thứ tự từ trái sang phải
Nếu khi sắp xếp các điểm đầu mút của các đoạn thẳng trong từ trái sang phải nếu có nhiều điểm có cùng tọa độ thì phân giải trùng hợp như sau:
- Các điểm đầu mút trái được sắp xếp trước các điểm đầu mút phải
- Tiếp theo, các điểm đầu mút có tọa độ y nhỏ hơn được xếp trước
Sắp xếp các điểm đầu mút (x, y) theo thứ tự (x, e, y) trong đó xvàylàtọa độvới e = 0 cho điểm đầu mút trái và e = 1 cho điểm đầu mút phải
Thuật toán xác định cặp đoạn thẳng bất kỳ cắt nhaunhư sau[13]
độ nhỏ hơn được sắp xếp trước
3 for mỗi điểm trong danh sách được sắp xếp của các điểm đầu mút do
4 if là điểm đầu mút trái của đoạn thẳng then
5 INSERT
6 if (ABOVE tồn tại và cắt ) hoặc
(BELOW tồn tại và cắt s) then
7 return TRUE
Trang 138 if là điểm đầu mút phải của đoạn thẳng then
9 if (ABOVE và BELOW đều tồn tại)
và (ABOVE cắt BELOW ) then
10 return TRUE
11 DELETE
12 return FALSE
1.3.1.3 Phân tích độ phức tạp
Định lí 1.1 Gọi là tậphợp gồm đoạn thẳng, thuật toán
ANY-SEGMENTS-INTERSECT thực hiện trong thời gian [13]
Thật vậy, dòng1thực hiện mấtthời gian là Dòng2thực hiện mất thời gian là , bằng cách sử dụngsắp xếp trộn (merge sort) hoặcheapsort Khicó điểm biến cố, vòng lặp forcủadòng3-11thực hiện nhiều nhất là Mỗilần lặpmất thời gian , vìmỗihoạt động cây đỏđen mấtthời gian vàbằng cách sử dụngcácphương phápkiểm tra mỗigiao điểmcần thời gian Vì vậy, thời gianthực hiện thuật toán là
1.3.2 Bài toán tìm bao lồi
Một tập hợp trong mặt phẳng được gọi là lồi nếu cho trước bất kỳ
tổ hợp lồi của và nằm trong , hoặc tương đương với đoạn thẳng được chứa hoàn toàn trong [26]
Bao lồi của tập hợp bất kỳ là giao của tất cả các tập lồi chứa , hay bằng trực quan hơn, tập lồi nhỏ nhất chứa , kí hiệu [26]
1.3.2.1 Phát biểu bài toán
Cho là tập hợp các điểm trong mặt phẳng và yêu cầu tìm bao lồi
của nó, tức là tìm đa giác lồi nhỏ nhất mà mỗi điểm của hoặc nằm trên biên của hoặc nằm trong phần trong của
p lồi
p
q
không lồi
Trang 14Hình 1.2 -Tập hợp gồm các điểm và bao lồi
Thuật toán quét GRAHAM [13, 17]
Thuật toán quét Grahamgiải quyết bài toántìm bao lồibằng cách khởi tạongăn xếp gồm cácđiểm ứng viên Mỗiđiểmcủatập hợp đầu vàotrong được đẩylênđầu ngăn xếpvàcác điểmkhông phải làđỉnhcủa được loại bỏ khỏi ngăn xếpsau cùng Khithuật toánkết thúc, ngăn xếp chứachính xáccácđỉnhcủa theo thứ tự ngược chiều kimđồng hồ vớisự xuất hiệncủa các điểm trên biên.Thuật toángọihàmTOP( ) - trả vềđiểmtrên cùng củangăn xếp
mà không thay đổithứ tự Svàhàm NEXT-TO-TOP( ) - trả vềđiểmtiếp theo
trong các điểmdướicùng củangăn xếp mà khôngthay đổithứ tự của
Algorithm GRAHAM-SCAN( )
Input Tập hợp gồm điểm trong mặt phẳng với
Output Bao lồi của là
1 Gọi là điểm nằm trong có tọa độ nhỏ nhất hoặc điểm ngoài cùng bên trái trong trường hợp đồng hạng
2 Gọi là các điểm còn lại trong , sắp xếp theo góc nhọn (polar angle) theo thứ tự ngược chiều kim đồng hồ quanh (nếu có nhiều hơn một điểm có cùng góc thì loại bỏ tất cả nhưng lấy điểm xa nhất từ )
Trang 153 PUSH
4 PUSH
5 PUSH
6 for to do
7 while góc tạobởi các điểm NEXT-TO-TOP , TOP
và là góc không quay trái do
8 POP
9 PUSH
10 return
Thuật toán bước Jarvis [12, 13, 19]
Thuật toán bước Jarvis tính toán bao lồi của tập hợp các điểm bởi một
kỹ thuật được biết như bọcgói Trước hết chọn một điểm chắc chắn thuộc bao lồi, giả sử chọn điểm có tọa độ nhỏ nhấttrong Điểm này là một đỉnh của bao lồi.Sau đótừ kéo cao hơnsang phải cho đến khi chạm vàomột điểm, điểm nàycũng là mộtđỉnhcủabaolồi.Cứ thực hiệntiếp tụcnhư thếtrên tập hợp
cácđỉnhcho đến khigặp lạiđỉnhban đầu
Algorithm JARVIS'S MARCH
Input Tập hợp gồm điểm trong mặt phẳng
Output Bao lồi của
1 Chọn là một điểm trong tập hợp có tọa độ nhỏ nhất
2 Chọn là một điểm trong tập hợp mà góc giữa đoạn thẳng với trục hoànhlà nhỏ nhất
Định lí 1.2 Cho tập hợp gồm điểm trong mặt phẳng Thời gianthực hiện
thuật toán quétGrahamlà , trong đó n là số điểm trong [13]
Thật vậy, dòng1chi phíthời gian Dòng2chi phíthời gian là
Trang 16, bằng cách sử dụngmegersort hoặcheapsortđểsắp xếpcác góc giữa vàphương pháptích có hướng để so sánh các góc Dòng3-5chi phí thời gian
là Vì , vòng lặp forcủa dòng6-9được thực hiệnnhiều nhất
lần Khi đó thao tác PUSHchi phí thời gian , mỗi lần lặpchi phíthời gian độc lập vớimất thời gian cho vòng lặpwhile của dòng7-8vàvì thếtoàn
bộ vònglặp for mấtthời gian chỉ có mộtvòng lặp while lồng nhau
Với mỗiđiểm được đẩyvàongăn xếp đúng một lần, cónhiều nhất một toán tử POPứng vớimỗitoán tử PUSH Có ít nhấtbađiểm và -là không bao giờlấy rakhỏi ngăn xếp, trongthực tế nhiều nhất toán tử POPđược thực hiệntrong tổng số Mỗilần lặpwhilemộtPOPthực hiệnvàdo đócónhiều nhất lần lặpwhile Khithực hiệndòng7với chi phí thời gian , mỗilần gọiPOPvới chi phíthời gian là vàkhi tổng thời gianđược thực hiện bởivòng lặpwhile là Như vậy, thời gianthực hiệnthuật
Định lí 1.3 Cho là tập hợp gồm điểm trong mặt phẳng Thời gian thực hiện
thuật toán bước Jarvis là , trong đó là số đỉnh của bao lồi [13]
Thật vậy, với đỉnh của , tìm đỉnhvớigócgiữa nhỏ nhất.Mỗilần so sánhcác góc giữavới chi phí thời gian là Ta có thểtính toánít nhất giá trịtrong thời gian nếumỗi lần so sánhchi phí thời gian là Như vậy,thuật toán bướcJarvisđược thực hiện với chi phí thời gianlà
1.3.3 Bài toán tìm cặp điểm gần nhất
Bài toán cặp điểm gần nhất tìm hai điểm gần nhất trong tập hợp điểm cho trước.Khoảng cách giữa các điểm thường được xét trong các bài toán hình học - khoảng cáchEuclide:khoảng cáchgiữa các điểm và
xéttất cả cặpđiểm với chi phí về thời gian là Trongphần nàysẽmô tảthuật toán chia để trị với chi phí vềthời gian là
1.3.3.1 Phát biểu bài toán
Cho trước tập hợp gồm điểm trong mặt phẳng với và yêu cầu đưa ra cặp điểm có khoảng cách nhỏ nhất
1.3.3.2 Thuật toán
Trang 17Mỗilời gọiđệ quycủa thuật toáncóđầu vàonhư là tập con và các mảng và ,mỗi mảng có chứatất cả các điểmcủa tập conđầu vào Các điểm trongmảng được sắp xếptăng dần theo tọa độ , mảng được sắp xếp tăng dầntheotọa độ
Divide:Chiatập hợp các điểm thành hai tập con và với điểm giữa của
các điểmtrong nằm trênhoặcbên trái củađường thẳng và tất cả các điểm trong nằm trênhoặc bên phải của Mảng được chia thànhcác mảng và ,chứacác điểm của và tương ứng,sắp xếp tăng dần theo tọa độ Tương tự,mảng được chia thànhcác mảng và , chứa cácđiểmcủa và tương ứng,sắp xếp tăng dần theotọa độ
Conquer:Tập hợp các điểm được chia thànhhai tập con và ,tạo ra hai lời gọiđệ quymột lời gọi đệ quy tìm cặpđiểmgần nhấttrong vàlời gọi đệ quy khác tìmcặpđiểmgần nhấttrong Cácđầu vào củalời gọi đầu tiênlà tập con , mảng và ; lời gọi thứ hainhận các đầu vào , và Gọicác khoảng cáchcặp điểm gần nhấttrả lạicủa và tương ứng là và ;gọi
Combine:Cặp điểmgần nhất hoặc làhaicặpkhoảng cách tìm thấybởimột
trong các lời gọi đệ quy,hoặc cặp điểm gần nhất là cặpđiểm vớimột điểm nằm trong và một điểm khácnằm trong Thuật toánxác địnhkhi cócặpđiểm màkhoảng cáchnhỏ hơn Nếu có cặpđiểm vớikhoảng cáchnhỏ hơn , cả hai điểmcủa cặpđiểm đó phải đượcnằm trong đơn vị củađường thẳng
- Tạo ra mảng , đó là mảng với tất cả các điểm không nằm trong dải dọc rộng được loại bỏ Mảng được sắp xếp theo tọa độ , cũng như
- Với mỗi điểm trong mảng , tìm các điểm trong được nằm trong đơn
vị của Chỉ có 7 điểm trong sau cần được xem xét Thuật toán tính
khoảng cách từ đến mỗi điểm trong 7 điểm đó và theo dõi những khoảng cách
cặp điểm gần nhất đã tìm trên các cặp điểm trong mảng
- Nếu thì dải dọc thực tế không có một cặp điểm gần hơn đã được tìm thấy bởi các lời gọi đệ quy Cặp điểm này và khoảng cách của nó được trả
về Ngược lại, cặp gần nhất và khoảng cách của nó được tìm bởi các lời gọi đệ quy được trả về
Trang 18Hình1.3 - Thuật toán chỉ cần kiểm tra điểm trong mảng
Algorithm CLOSEST_PAIR( )
Input Tập hợp gồm các điểm trong mặt phẳng
Output Cặp điểm gần nhất (cặp điểm có khoảng cách Eulide nhỏ nhất)
1 Chia thành hai tập con và với điểm giữa tọa độ trong bởi đường thẳng dọc ; chia thành và ; chia thành và
4 Tính khoảng cách giữa các điểm mà một điểm nằm trong ( )và một điểm nằm trong thực hiện như sau:
4.1 Mảng - các điểm của nằm trong dải dọc , sắp xếp theo tọa độ
4.2 Với mỗi điểm trong , chỉ có điểm trong được so sánh, khoảng cách cặp điểm gần nhất
4.3 Nếu thì dải dọc thực tế không có một cặp điểm gần hơn đã được tìm thấy bởi các lời gọi đệ quy Cặp điểm này và khoảng cách của nó được trả về Ngược lại, cặp điểm gần nhất và khoảng cách của nó được tìm bởi các lời gọi đệ quy được trả về
pL
pR
các điểm trùng nhau, một trong
P L , một trong P R
các điểm trùng nhau, một trong
P L , một trong P R
Trang 19Trình bàychínhở trongmỗi lời gọi,cầntạo thành mộttập conthứ tựcủa mộtmảng được sắp xếp Tập hợp được chia thành và ,hình thànhcácmảng
và được sắp xếp theo tọa độ Phương phápnày có thể xem như làđối lậpvới thủ tụcMERGEtừthuật toán sắp xếp trộn (merge sort):chia mảng được sắp xếpthành haimảngđược sắp xếp.Để đơn giản kiểm tra các điểm trongmảng theo thứ tự.Nếumột điểm nằm trong , thêmđiểm này vàocuốimảng ;ngược lại, thêm điểm này vàocuốimảng [13]
được đưa ra bởi Shamos và xuất hiện trong Preparata và Shamos [27]
Trang 20Chương 2 - KIỂU DỮ LIỆU TRỪU TƯỢNG TRONG
HÌNH HỌC TÍNH TOÁN
2.1 Tìm kiếm phạm vi trực giao
Ngay từ đầu có vẻ nhưcơ sở dữ liệuítlàmviệc vớihình học Tuy nhiên,nhiềuloại câu hỏi – được gọi là các truy vấn –về dữ liệu trongcơ sở dữ liệucó thểđượcgiải thíchmột cách hình học Bằng cách chuyển các bản ghitrongcơ sở dữ liệuthành cácđiểmtrongkhông giannhiềuchiềuvàchuyểncác truy vấntrên bản ghithànhcác truy vấntrêntập hợp điểm
Xétmộtcơ sở dữ liệuquản lí nhân sự, mỗi nhân viên được lưu trữ các thông tin như họ tên,địa chỉ, tuổi,lương.Mộttruy vấntạobáo cáotìm tất cả các nhân viêncó tuổi từ 30 đến 50 và thu nhập hàng tháng từ 4000000đến 6000000 Vấn đềhình họcbiểu diễn mỗinhân viênlàmột điểmtrong mặt phẳng.Tọa độ thứ nhất của điểm là tuổivàtọa độ thứ haibiểu diễn lương Truy vấncơ sở dữ liệuyêu cầu hiển thị tấtcảnhân viêncó tuổi từ 30 đến 50 và thu nhập hàng tháng từ 4000000đến 6000000 được chuyển thành truy vấnhình học: báo cáotất cả cácđiểmvới tọa độthứ nhấttừ 30 đến 50vàtọa độ thứ hai từ 4000000đến 6000000, nghĩa làbáo cáotất cảcácđiểm nằm trongtruy vấnhình chữ nhật song songtrục tọa
độ
Hình 2.1- Giải thíchtruy vấncơ sở dữ liệu một cách hình
Nếucó thêm thông tinvềsố concủamỗi nhân viênvà yêu cầu tạo truy
vấn“báo cáo tất cả nhân viêncó tuổi từ 30 đến 50, thu nhậphàng tháng từ
4000000 đến 6000000 và cótừ 2 đến 4 con”.Trong trường hợpnày,mỗinhân viên
Trang 21được mô tả bởimộtđiểmtrongkhông gianba chiều vớitọa độthứ nhất, tọa độ thứ hai,tọa độthứ babiểu diễntuổi,lương và sốcon tương ứng Để trả lờitruy vấn, cần
phảibáo cáotất cảcác điểmnằm trong hìnhhộpsong songtrục tọa độ [30 : 50]
×[4000000: 6000000] ×[2: 4] Nếu taquan tâmcác truy vấntrả lờitrên thuộc
tính củacác bản ghi trongcơ sở dữ liệu thì các bản ghiđược chuyển thành các điểmtrongkhông gian chiều Mộttruy vấnyêu cầubáo cáotất cảcác bản ghicó các thuộc tínhnằmgiữa cácgiá trịcố địnhthì chuyểnthành mộttruy vấnđưa ra tất cảcác điểmnằm trongmộthình hộpsong songtrục tọa độ chiều Như vậy,truy vấnnày được gọilà truy vấn phạm vi hình chữ nhậthoặc truyvấnphạm vi trực giaotrong hình học tính toán [5]
2.1.1 Mô hình quản lí đối tượng một chiều
2.1.1.1 Truy vấn phạm vi một chiều
Cho tập hợp gồm điểm trênđường thẳng thực là và yêu cầu báo cáo tất cả các điểm nằm trong phạm vi truy vấn
2.1.1.2 Thuật toán và cấu trúc dữ liệu
Cấu trúc dữ liệu được sử dụng để giải quyết bài toán truy vấn phạm vi một chiều hiệu quả là cây nhị phân tìm kiếm cân bằng [26] Các lá của lưu trữ các điểm của và các nút trong của lưu trữ các giá trị chia hỗ trợ việc tìm kiếm, nút lưu trữ giá trị chia Giả sử cây con trái nút chứa tất cả các điểm nhỏ hơn hoặc bằng và cây con phải chứa tất cả các điểm lớn hơn
Gọi và là hai lá nơi mà tìm kiếm kết thúc tương ứng với và Trước tiên tìm theo và trong Các điểm trong phạm vi là những điểm được lưu trữ tại các lá ở giữa và bao gồm và , có thể chứa điểm lưu trữ tại và lưu trữ tại Để tìm các lá giữa và , trước tiên cần phải tìm
Trang 22các nút chia các đường đi tìm kiếm với và [5] Trong hình 2.2, truy vấn một chiều với phạm vi [18 :77], báo cáo tất cả các điểm lưu trữ tại các lá màu xám đen và điểm lưu trữ tại lá Các điểm nằm trong phạm vi là các lá của các cây con ở giữa và ; các cây con có màu xám đen, còn các nút trên đường
đi tìm kiếm có màu xám sáng
Hình 2.2 - Truy vấn phạm vi một chiều trong cây nhị phân tìm kiếm
Từ ý tưởng trên xây dựng chương trình con tìm nút chia như sau[5] Gọi
và là con trái và con phải tương ứng của nút
Input Cây T và hai giá trị và với
Output Nút nơi chia các đường đi đến điểm và , hoặc lá nơi mà cả hai
Trang 23Thuật toántruy vấn sử dụngchương trình conREPORTSUBTREE, duyệtcây concó gốc lànút cho trướcvàbáo cáonhững điểmđược lưu trữtại lá Khisố núttrongbất kỳcủacâynhị phânlà íthơnsố lá, chương trình connàychi phí thời gianlàtuyến tínhvới số điểmbáo cáo[5].
Input Cây nhị phân tìm kiếm và phạm vi
Output Tất cả các điểm lưu trữ trong nằm trong phạm vi
1 ← FINDSPLITNODE( )
2 if là một lá then
3 Kiểm tra nếu điểm lưu trữ tại thì phải được báo cáo
4 else (∗ Theo đường đi đến và báo cáo các điểm trong cây con phải của
đường đi.∗) 5
11 Kiểm tra điểm lưu trữ tại lá phải được báo cáo
12 Tương tự, theo đường đi đến báo cáo các điểm trong các cây con trái
của đường đi và kiểm tra nếu điểm lưu trữ tại lá nơi đường đi kết thúc phải được báo cáo
các cây con được chọn
root(T)
Trang 242.1.1.3 Phân tích độ phức tạp
Định lí2.1Chotập hợp gồm điểmtrong không gianmột chiều Tập hợp
đượclưu trữ trongcây nhị phân tìm kiếmcân bằngsử dụnglưu trữ và có thời gian xây dựng , như vậycác điểmtrong phạm vi truy vấncó thểbáo cáotrongthời gian , với làcácđiểmbáo cáo [5]
Thật vậy, cấu trúc dữ liệu sử dụng trong tìm kiếm phạm vi một chiều làcây nhị phân tìm kiếmcân bằngsử dụnglưu trữ và có thểđược xây dựng trongthời gian Trongtrường hợpxấu nhấttất cảcác điểmcó thểnằm
trongphạm vitruy vấn thì thời giantruy vấnlàΘ(n) Thời gian chi phí một lời gọi
REPORTSUBTREElàtuyến tínhvới sốđiểmbáo cáo Do đó, tổng thời gianchi phí trongtất cảcác lời gọilà Các nútcòn lạiđượcthămlà các núttrênđường đitìm kiếmcủa hoặc Vì làcân bằng, các đường đicóchiều dài .Thời gianchi
phí trongmỗi nút là , tổng thời gianchi phícho các nút là [5].Như vậy thời giantruy vấnlà
2.1.2 Mô hình quản lí đối tượng hai chiều
2.1.2.1 Truy vấn phạm vi hai chiều
Gọi làtập hợp gồm điểmtrongmặt phẳng và yêu cầu báo cáo tất cả các điểm nằm trong phạm vi hình chữ nhật Trongbài toántìm kiếm phạm vi hai chiều,mỗi điểmtrong mặt phẳng được biểu diễn bởi haigiá trị là tọa
độ vàtọa độ Giả sửrằngkhông cóhaiđiểmtrong cùngtọa độ vàtọa độ Mộtđiểm nằmtrong hình chữ nhậtkhi và chỉ khi
2.1.2.2 Thuật toán và cấu trúc dữ liệu
2.1.2.2.1 Kd-trees 2 chiều (2-dimensional Kd-trees)
Ta cần xây dựng cấu trúc dữ liệu cho truy vấn phạm vi hai chiều Trong trường hợp hai chiều mỗi điểm có hai giá trị quan trọng là tọa độ và tọa độ
p y y’
Trang 25Trước tiênta chia theotọa độ rồi đến tọa độ và thực hiện luân phiên với quá trình như sau:Tạigốc, chia bởi đường thẳng dọc thànhhaitập con và
có kích thướcgầnbằng nhau.Đường thẳngchiađượclưu trữtạigốc.Tập hợp gồm các điểmở bên tráihoặc ở trênđường thẳng chia, đượclưu trữtrongcây contrái và tập hợp gồm các điểm ở bên phải đường thẳng chia, được lưu trữ trong cây con phải Cứ thực hiện quá trình trên cho đến khi chỉ còn một điểm Một cây như thế gọi làkd-trees, cây mà trong hình 2.3 là 2d-trees hay còn gọi là kd-trees hai chiều [5]
Hình 2.3 - Kd-trees: mặt phẳng được chia và cây nhị phân tương ứng
Thuật toán xây dựng kd-treesvới thủ tụcđệ quymô tảdưới đây[5].Thủ tụcnàysử dụng haitham số: tập hợpcácđiểmvàmột số nguyên Tham số thứ nhấtlàtập hợpcác điểm dùng để xây dựng kd-trees; khởi tạolà tập hợp Tham sốthứ hailàchiều sâucủagốccây con Tham sốchiều sâu bằng khôngtạilời gọiđầu tiên Chiều sâulàquan trọngvìnóxác địnhxemphảichia bởi đườngthẳng dọchoặcđường thẳng ngang Thủ tụctrả vềgốc của kd-trees
Input Tập hợp các điểm và chiều sâu hiện tại
Output Gốc của kd-trees được lưu trữ
1 if chỉ chứa một điểm then
2 return lá lưu trữ điểm này
3 else if là chẵn then
4 Chia thành hai tập con bởi đường thẳng dọc đi qua điểm giữa
tọa độ của các điểm trong Gọi là tập hợp các điểm bên trái hoặc nằm trên và là tập hợp các điểm bên phải
Trang 265 else Chia thành hai tập con bởi đường thẳng ngang đi qua điểm
giữa tọa độ của các điểm trong Gọi là tập hợp các điểm phía dưới hoặc nằm trên và là tập hợp các điểm phía trên
bộ mặt phẳng Một điểm được lưu trữ trong cây con có gốc tại nút khi và chỉ khi chúng nằm trong Vì vậy cần phải tìm các cây con có gốc tại khi truy vấn hình chữ nhật cắt
Hình 2.4 - Các nútcủa kd-trees vàvùngmặt phẳng tương ứng
Cho trước hình chữ nhật truy vấn , duyệt kd-trees nhưng chỉ thăm vùng
có các nút được cắt bởi hình chữ nhật truy vấn Khi một vùng nằm hoàn toàn trong hình chữ nhật truy vấn, báo cáo tất cả các điểm được lưu trữ trong cây con của chúng Tức là, cần tìm cây con của nút chỉ khi cắt khi
nằm hoàn toàn trong truy vấn , báo cáo tất cả các điểm được lưu trữ trong cây con của Khi duyệt đến lá, phải kiểm tra xem các điểm được lưu trữ tại lá có nằm trong vùng truy vấn và nếu có nằm trong vùng truy vấn thì báo cáo các điểm đó
region(v)
Trang 27Hình 2.5 - Truy vấn trên kd-trees hai chiều
Trong hình 2.5, các nút màu xám được thăm khi thực hiện truy vấn với các hình chữ nhật màu xám.Các nút được đánh dấu bằng một dấu sao tương ứng với vùng nằm hoàn toàn trong truy vấn hình chữ nhật Các cây con màu xám đen
có gốc tại nút có dấu sao được duyệt và tất cả các điểm lưu trữ được báo cáo Các lá khác được thăm tương ứng với các vùng mà chỉ một phần trong truy vấn hình chữ nhật Các điểm lưu trữ trong chúng phải được kiểm tra có nằm trong phạm vi truy vấn; kết quả là các điểm và được báo cáo; các điểm , và không được báo cáo
Thuật toán truy vấn được mô tả bởi thủ tục đệ quy như sau[5] Thuật toán
sử dụng chương trình con REPORTSUBTREE( ) duyệt cây con có gốc tại nút và báo cáo tất cả các điểm được lưu trữ ở lá của nó
Algorithm SEARCHKDTREE( )
Input Gốc của (cây con của) kd-trees vàphạm vi
Output Tất cả các điểm tại các lá ở dưới mà nằm trong phạm vi
1 if là một lá then
2 Báo cáo điểm lưu trữ tại nếu nó nằm trong
3 else if được chứa hoàn toàn trong then
Trang 288 REPORTSUBTREE( )
2.1.2.2.2 Range trees 2 chiều (2-dimensional Range trees)
Kd-treescóthời giantruy vấn và khi số điểmbáo cáolànhỏthì thời giantruy vấnlàtương đốicao Trong phầnnàysẽmô tảmộtcấu trúcdữ liệukhác chocác truy vấn phạm vi hình chữ nhật là range trees vớithời giantruy vấntốt hơn là , nhưng không gian lưu trữtănglên từ vớikd-treesđến
với range trees.Như trình bày trước đó, truy vấn phạm vihai chiềuvề
cơ bảnbao gồmhai truy vấncon một chiều, một truy vấn trên tọa độ vàmộttruy vấn trên tọa độ của các điểm
Gọitập con cácđiểmlưu trữtrong các lácủacây concó gốc tại nút là tập con chính qui của Tập con chính qui của gốccâylàtoàn bộtậphợp , tập con chính qui củamột lá chỉ làđiểmlưu trữtạiláđó Tập concủa cácđiểmcó tọa độ nằmtrong phạm vitruy vấnđược biểu diễn nhưhợpcủacác tập con chính qui, đó
là nhữngtập hợp củacác nút có gốc củacác cây conđược chọn [5] Takhôngchỉ quan tâm tất cảcácđiểmtrongtập con chính qui mà cònbáo cáocác tập con chính quicó tọa độ nằmtrong Đây làtruy vấn một chiều khác, cung cấpcâynhị phântìm kiếm trên tọa độ củacácđiểmtrong có sẵn Điều này dẫn đếncấu trúc dữ liệucho cáctruy vấnphạm vi hình chữ nhậttrêntập hợp gồm điểmtrong mặt phẳng
Cây chínhlàcây nhị phântìm kiếmcân bằng được xây dựng trêntọa độ củacácđiểmtrong
Vớimỗi nút trong hoặc nút lá bất kỳtrong , tập con chính qui được lưu trữ trongcâynhị phântìm kiếmcân bằng trên tọa độ củacácđiểm Nút lưu trữcon trỏtrỏ vào gốccủa được gọi làcấu trúcliên kếtcủa
Cấu trúcdữ liệunày đượcgọi làrange trees Cấu trúc dữ liệutrong đócác nútcócác con trỏtrỏ đến các cấu trúcliên kếtthường được gọi làcác cấu trúc dữ liệu nhiềumức (multi-level data structures) Vì vậy, cây chính được gọi làcâymức thứ nhất vàcáccấu trúcliên kếtnày là các cây mức thứ hai [5]
Trang 29Hình 2.6 - Range trees hai chiều
Cho trước làphạm vitruy vấn Trước tiên tập trungvàotìmcácđiểmcótọa độ nằmtrong , khoảng của truy vấn hình chữ nhậtvàsau đó quan tâmđếntọa độ Nếuchỉ quan tâmđếntọa độ thìtruy vấnlàtruy vấnphạm vimột chiều Tìm kiếm theo và trongcâycho đến khinhận được nút chia các đường đitìm kiếm Từ các con trái của tiếp tục tìm kiếm với vàtạimỗinút nơimà đường đitìm kiếmcủa đến bên trái, báo cáotất cảcác điểmtrongcây conphảicủa Tương tự, tiếp tụctìm kiếmvới tạicácconphảicủa vàtạimỗinút nơimà đường đitìm
kiếmvới đến bênphải phải báo cáotất cảcác điểmtrongcây contráicủav Cuối
cùng, kiểm tracáclá và nơimà hai đường đi kết thúc xemchúng cóchứa một điểmtrongphạm vi
Range treescó thểđượcxây dựngvớithuật toánđệ quy như dưới đây,với đầu vàolà tập hợp của cácđiểmđược sắp xếptheo tọa độ vàtrả vềgốc củarange treeshai chiều của [5]
Algorithm BUILD2DRANGETREE( )
Input Tập hợp gồm các điểm trong mặt phẳng
Output Gốc của range trees hai chiều
1 Xây dựng cấu trúc liên kết: Xây dựng cây nhị phân tìm kiếm theo tập hợp gồm các điểm trong Lưu trữ các lá của không chỉ chứa tọa
độ của các điểm trong ,mà còn chứa chính các điểm đó
2 if chỉ chứa một điểm then
3 Tạo lá lưu trữ điểm này và thực hiện cấu trúc liên kết của
4 else Chia tập hợp thành hai tập con: tập con chứa các điểm với tọa
cây nhị phân tìm kiếm
trên tọa độ
cây nhị phân tìm kiếm trên tọa độ
Trang 30độ nhỏ hơn hoặc bằng , điểm giữa của tọa độ và tập con
chứa các điểm với tọa độ x lớn hơn
5 ← BUILD2DRANGETREE( )
7 Tạo nút lưu trữ , thực hiện con trái của , thực hiện
con phải của và thực hiện cấu trúc liên kết của
8 return
Thuật toántruy vấnthực hiện như mô tả sau đây [5] Trước tiênchọntập con chính quimà chứa cácđiểmcó tọa độ nằmtrong phạm vi được thực hiện vớithuật toántruy vấnmột chiều Trong số cáctập con đó, báo cáocácđiểmcótọa độ nằmtrongphạm vi Thuật toántruy vấnhai chiều làgiốngvới1DRANGEQUERY nhưng chỉcó sự khác nhau duy nhấtđó làlời gọiREPORTSUBTREEđược thay thế bởilời gọi1DRANGEQUERY
Input Range trees hai chiều và phạm vi
Output Tất cả các điểm trong nằm trong phạm vi
2 if là một lá then
3 Kiểm tra nếu các điểm sắp xếp tại phải được báo cáo
4 else (∗ Theo đường đi đến và gọi 1DRANGEQUERY trên các cây con
phải của đường đi ∗) 5
6 while không phải là lá do
7 if then
9
10 else
11 Kiểm tra nếu điểm lưu trữ tại phải được được báo cáo
12 Tương tự, theođường đitừ đến , gọi 1DRANGEQUERYvới
phạm vi trêncáccấu trúcliên kếtcủa các câycon tráicủađường
đivàkiểm tra xemcácđiểmđược lưu trữtạilánơi mà đường đikết
thúcphảiđược báo cáo
Trang 312.1.2.3 Phân tích độ phức tạp
Định lí 2.2 Kd-treeschotập hợp gồm điểmtrong mặt phẳngsử dụnglưu
trữ và xây dựngtrongthời gian .Truy vấn phạm vi hình chữ
nhậttrên kd-treeschi phítrong thời gian , với làsốđiểmbáo cáo [5]
Thật vậy, mỗi nút có cả hai danh sách sắp xếp theo tọa độ x và tọa độ
Mỗi trong danh sách và danh sách được liên kết với nhau Tổng thời gian
mỗi đường thẳng chia có thể được tìm là tuyến tính và có đường thẳng chia trong kd-trees Tổng thời gian để tìm tất cả các đường thẳng chia là
Vì vậy, tổng số thời gian tiền xử lí là [5]
Với các vùng nằm trong truy vấn hình chữ nhật ,tổng thời giancần thiếtđểduyệtcây conlà với là số điểm báo cáo Vớimỗinút ,phạm vitruy vấncắtngang , nhưng khôngnằm hoàn toàntrongphạm vi Nói cáchkhác, giới hạncủaphạm vitruy vấncắt Đểphân tíchsốnút, sẽgiới hạnsốvùngcắtbởicácđườngthẳng dọc Điều nàysẽchomộtgiới hạn trênvề số vùngcắtbởicáccạnhbên tráivà cạnh bên phảicủatruy vấnhình chữ nhật Số vùng cắt nhaubởicáccạnhtrênvàdưới củaphạm vitruy vấncó thểđượcgiới hạntrongcùng một cách Sau đó đếm bao nhiêu vùng ở dưới đường thẳng dọc có thể cắt
Cho làđường thẳng dọc và là kd-trees Gọi là đường thẳng chia lưu trữtạigốccủa kd-trees Đường thẳng chia cắthoặcvùng bên trái hoặcvùngbên phải nhưngkhông phảicả hai Mỗi một trong sốbốnnútởtại độ sâuhaitrongcâytương ứng với mộtvùngchứa điểm Hai trong sốbốn núttương ứngvớivùngcắt nhau, tađếmsốlượng các vùngcắt nhautrongcáccây conmột cách đệ quy Hơn nữa, cắtcácvùngcủagốc vàmột trongsố cáccon của nó Do đó, thỏa mãncông thức truy hồi
Công thức truy hồi có lời giảivới [5] Nói cách khác, bất kỳđườngthẳng dọccắt vùngtrong kd-trees Tương tự, có thểchứng minhrằngtổng số vùngcắt bởiđườngthẳng nganglà Tổng sốvùngcắtbởicácbêncủa phạm vitruy vấnhình chữ nhậtcũng được giới hạn bởi
Trang 32Định lí2.3 Cho làtập hợp điểmtrongmặt phẳng Range trees của sử dụnglưu
trữ và đượcxây dựngtrong thời gian Với truy vấnrange trees
có thểbáo cáocácđiểmcủa nằmtrong phạm vitruy vấnhình chữ nhậttrongthời gian , với làsốđiểmbáo cáo [5]
Thật vậy, điểm trong được lưu trữtrongcấu trúcliên kếtcủa cácnúttrênđường đi trong về phíaláchứa Do đó, với tất cảcác nútởchiều
sâucủa , điểmp được lưu trữtrongcấu trúcliên kết Vìrange tree một chiềusử
dụnglưu trữtuyến tínhtheo saunó cácliên kếtcấu trúcđó củatất cả các nútởchiều
sâubất kỳcủaTcũngsử dụnglưu trữ Chiều sâucủa là Do đó, tổng
số lượnglưu trữcần thiếtđược giới hạn bởi
Tạimỗinút trongcâychính chi phí thời gianhằng sốđểquyết địnhnơi mà cácđường đitìm kiếmtiếp tụcvàcó thểgọi1DRANGEQUERY Theo Định lí 2.1 chi phícho lời gọiđệ quynàylà , với làsố điểmbáo cáo Tổng thời gianchi phí là tínhtổng làhơntất cả cácnúttrongcây chính đượcthăm Hơn nữa, các đường đitìm kiếmcủa và trongcây
2.1.3 Mô hình quản lí đối tượng nhiều chiều
2.1.3.1 Kd-trees nhiều chiều
Kd-trees cũng có thể được sử dụng cho tập hợp các điểm trong không gian ba chiều hoặc với chiều cao hơn Thuật toán xây dựng kd-trees là giống như trường hợp trong mặt phẳng: Tại gốc, chia tập hợp các điểm thành hai tập con có kích thước gần bằng nhau của cùng một siêu phẳng vuông góc với trục tọa độ Tại các con của gốc sự phân chia dựa trên tọa độ thứ hai (tọa độ ), tại các nút ở chiều sâu hai trên tọa độ thứ ba (tọa độ ) và cứ thực hiện như thế cho đến khi tại chiều sâu chia trên tọa độ cuối cùng (tọa độ ) Ở chiều sâu bắt đầu lại tất cả, chia trên tọa độ thứ nhất Sự đệ quy dừng lại cho đến khi chỉ còn một điểm trái, sau đó được lưu trữ như một lá Vì kd-trees chiều cho tập hợp gồm điểmlà câynhị phânvới lá, không gian lưu trữlà và thời gianxây dựnglà , với làhằng số
Các nút trong kd-trees chiều tương ứng với các vùng như trong mặt phẳng Thuật toántruy vấnthămcác nútcó các vùngđược cắt bởi phạm vitruy
Trang 33vấnvàduyệtcác cây con(báo cáocác điểmlưu trữtrong các lá)đó làgốc tạicác nútmà vùngđược chứa hoàn toàntrongphạm vitruy vấn Điều đócó thểđượcchỉ rarằng thời giantruy vấngiới hạn bởi [5]
2.1.3.2 Range trees nhiều chiều
Để khái quát từ range treeshai chiều đến range trees với số chiềucao hơn
là khá đơn giản Cho làtập hợpcácđiểmtrong không gian chiều Xây dựngcâynhị phântìm kiếmcân bằngtrên tọa độ thứ nhấtcủacácđiểm Tập con chính qui củanút trongcây mức đầu tiên - cây chính, bao gồmcácđiểmđược lưu trữtrong lácủacây concó gốc là Đối vớimỗi nút cầnxây dựngcấu trúcliên kết ; câymức thứ hai - range trees chiều chocác điểmtrong , giới hạn tọa độ cuối cùng của chúng Range trees
chiều này được xây dựngđệ quytrongcùng một cách: đó làcâynhị phântìm kiếmcân bằngtrêntọa độ thứ haicủa các điểm, trongđómỗi nútcómộtcon trỏ trỏ tớirange trees chiều củacácđiểmtrongcây con, giới hạn tọa độ cuối cùng Sự đệ quy sẽ dừng lạikhiở tại phía trái cácđiểmgiới hạn của tọa độ cuối cùng, chúng đượclưu trữtrongrange treesmột chiều
Thuật toántruy vấncũngtương tự nhưtrường hợphai chiều Sử dụngcâymức đầu tiênđểxác định vị trí nútcó các tập con chính quicùng chứatất cảcácđiểmcótọa độthứ nhấtnằmtrongphạm vi Nhữngtập con chính quiđượctruy vấn xa hơnbằng cáchthực hiệnphạm vi truy vấntương ứngcác cấu trúc mứcthứ hai Trong mỗicấu trúcmức thứ hai, chọn tập con chính qui Các cấu trúc mức thứ ba lưu trữcáctập con chính quisau đó được yêu cầuvới truy vấncóphạm vichotọa độ thứ ba, và cứ thực hiện như vậycho đến khinhận đượccác câymột chiều Trong nhữngcâynày cần tìmcácđiểmcó tọa độcuối cùngnằmtrongphạm vivàbáo cáo chúng
Định lí2.4Cho làtập hợp điểmtrong không gian chiều, với Range treescho sử dụnglưu trữ vàđượcxây dựngtrong thời gian
Range trees có thểbáo cáocácđiểm của nằmtrongphạm vihình chữ nhậtvới thời gian , với làsốđiểmbáo cáo [5]
Thật vậy, gọi làthời gianxây dựngrange treestrêntậphợp điểmtrong không gian chiều Ta biết Việc xây dựngrange trees chiều bao gồmxây dựngcâynhị phântìm kiếmcân bằngvà xây dựngcấu trúc liên kết Tạicácnútởchiều sâubất kỳcủacâymức thứ nhất,mỗi điểmđượclưu trữtrongcấu
Trang 34trúcliên kết Thời giancần thiếtđểxây dựngtất cả cáccấu trúcliên kếtcủacácnútvớichiều sâulà – , thời giancần thiếtđểxây dựngcấu trúcliên kếtở gốc Do đó, tổng thời gian xây dựngrange trees chiềuthỏa
thức truy hồi có lời giảivới [5]
Gọi làthời gian chi phí chotruy vấnrange trees chiều trên điểm, khôngkểthời gianbáo cáo các điểm Truy vấnrange trees chiềuliên quan đếnviệc tìm kiếmtrongcâymức thứ nhất, mấtthời gian vàtruy vấncủarange
Công thức truy hồicó lờigiải với , cộngvới thời gian cần thiếtđểbáo cáocác điểm là [5]
2.1.3.3 Cải tiến range trees
Trongphần trướcmô tảcấu trúc dữ liệurange trees cho cáctruy vấnphạm vihình chữ nhậttrong mặt phẳngcóthời giantruy vấnlà , với làsốđiểmđược lưu trữ trongcấu trúcdữ liệuvà làsố điểmbáo cáo.Trongphần nàymô tảkỹ thuậtđược gọi là phân tầng(fractional cascading), giảmthời giantruy
Gọi và làhaitậphợp các đối tượng, trong đó mỗi đối tượngcókhóa (key) là mộtsố thực.Các tập hợpđượclưu trữtheo thứ tựsắp xếptrongcác mảng và Giả sửcần báo cáotất cảcác đối tượng trong và cócác khóanằmtrong phạm vi truy vấn Trước tiênthực hiện tìm kiếmnhị phânvới trong đểtìm khóa nhỏ nhất mà lớn hơnhoặcbằng Từđóduyệtmảng sang phải,báo cáocácđối tượngđã duyệt qua, cho đến khi gặp được khóalớn hơn Cácđối tượngtừ có thểđược báo cáo tương tự Nếutổng các đối tượngđược báo cáolà thìthời giantruy vấnsẽlà cộng vớithời gianchohaitìm kiếmnhị phân, trong và Tuy nhiên, nếucác khóacủacác đối tượng trong làtập concủacác khóacủacác đối tượng trong thì có thểtránhviệc tìm kiếmnhị phânthứ hainhư sau Thêmcác con trỏtừcác mụctrong đếncác mụctrong : nếu lưu trữđối tượng vớikhóa thìlưu trữcon trỏđếnmục trong vớikhóa nhỏ nhấtlớnhơnhoặcbằng Nếu không cókhóanhư thế thìcon trỏtừ lànil [5]
Bằng cách nàocó thểsử dụngcấu trúcnàyđểbáo cáocác đối tượng
Trang 35trong và cócác khóa nằm trongkhoảngtruy vấn ? Báo cáocác đối tượng
phânvới trong vàduyệt sang phảicho đến khigặp được một khóa lớnhơn
Để báo cáocácđiểmtừ tiến hành nhưsau Tìm trong kết thúctại
nhấttrong lớnhơnhoặcbằng Khicáckhóatừ tập con củacác khóa từ , có nghĩalàcon trỏtừ phảitrỏđếnkhóa nhỏ nhấttừ lớnhơnhoặcbằng Vì vậy có thể theocon trỏ nàyvàtừđóbắt đầuđiđếnbên phảiqua Tương tự,tìm kiếmnhị phân trong làtránh đượcvàbáo cáocácđối tượngtừ chỉ mấtthời gian , với sốcâu trả lờibáo cáo [5]
3 10 19 23 30 37 59 62 70 80 100 105
Hình 2.7 - Tăng tốc độ tìm kiếm bằng cách thêm các con trỏ
Trong hình 2.7, ví dụ thực hiệntruy vấnvớiphạm vi[20: 65].Trước tiênta tìm kiếmnhị phântrong đểtìm23, khóanhỏ nhấtlớnhơnhoặcbằng20 Từ đóduyệtvề phía bên phảicho đến khigặpmộtkhóa lớn hơn65 Các đối tượngđượcduyệt qua cócác khóa nằm trongphạm vi, vì vậychúngđược báo cáo.Sau đó,theocon trỏtừ23đến , nhận đượckhóa , đólà khóa nhỏnhấtlớnhơnhoặcbằng20trong Từ đócũngduyệtđếnbên phảicho đến khigặp mộtkhóa lớnhơn65vàbáo cáocácđối tượngtừ ở trong phạm vi [5]
Trình bày quan trọnglàcác tập con chính qui và cả hai đều làcác tập concủa Gọi làrange treestrêntập hợp Pgồm điểmtrongmặt
phẳng Mỗitập con chính qui được lưu trữ trongcấu trúcliên kết, thay vìsử dụngcâynhị phântìm kiếm như cấu trúcliên kết, ta lưucác điểmvào mảng đượcsắp xếp theotọa độ củacácđiểm Hơnnữa, mỗimục trongmảng lưu trữhaicon trỏ: mộtcon trỏtrỏđến vàmộtcon trỏ trỏ đến Giả sử lưu trữđiểm Sau đó,lưu trữcon trỏtừ đếncác
nhấtlớnhơnhoặcbằng Do đó,nếu cótọa độ nhỏ nhấtlớnhơnhoặcbằngmột sốgiá trị của điểm bất kỳtrong thì cótọa độ nhỏ
Trang 36nhấtlớnhơnhoặcbằng củabất kỳ điểm nàotrong Con trỏ trỏ vào đượcđịnh nghĩatrongcùng một cách: trỏ đến mục mà tọa độ củađiểmlưu trữcótọa độ nhỏ nhấtlớnhơnhoặcbằng [5]
(2,19) (5,80) (7,10) (8,37) (12,3) (15,99) (17,62) (21,49) (33,30) (41,95) (52,23) (58,59) (67,89) (93,70)
Hình 2.8 - Cây chínhcủarange trees phântầng: các láchỉ hiển thị các tọa
độ vàcácđiểmlưu trữđượccho ở bêndưới
Hình2.9 - Các mảngliên kếtvớicác núttrongcây chính, vớicáctọa độ của các
điểmtrong các điểm củacáctập con chính quitheo thứ tự sắp xếp
Phiên bản sửa đổi này của range trees được gọi là range trees phân tầng (layered range trees) [5] Hình 2.8 và hình 2.9là một ví dụ về range trees phân tầng Trong hình 2.9, các vị trícủa cácmảngđượcvẽtương ứngvớivị
Trang 37trícủacácnúttrongcâychúng được liên kết: cácmảngtrên cùnglà liên kếtvớigốc, mảngtráibên dướiliên kết vớicáccontráicủagốcvà cứ thực hiện như vậy Không phải tất cả các con trỏ đều được hiển thị trong hình
Bằng cách nào đểtrả lờimộttruy vấnvớiphạm vi trongrange trees phântầng Trước khitìm với và trongcâychính đểxác định các nútcócác tập con chính qui cùng chứacácđiểmcótọa độ trongphạm vi Gọi là nút chia haiđường đitìm kiếm Các nútđang tìm là các nút ở dưới đólàconphải củamột núttrênđường đitìm kiếm với cóđường điđến trái, hoặccontráicủamộtnúttrênđường đitìm kiếmvới cóđường điđến phải Tại tìm nhữngmục trong cótọa độ là tọa độ nhỏ nhấtlớnhơnhoặcbằng Trong khitìm xa hơnvới và trongcáccây chính, rồi tiếp tụctheo dõicácmụctrongcácmảngliên kếtmàtọa độ làtọa độ nhỏ nhấtlớnhơnhoặcbằng Gọi là một trong nútđượcchọn, phảibáo cáocácđiểmlưu trữ trong có tọa độ nằm trongphạm vi Tìm nhữngđiểmcó tọa độ nhỏ nhất lớnhơnhoặcbằng ; từ đóduyệt quamảng, báo cáocác điểmsao chotọa độ nhỏhơnhoặcbằng Do đó, có thểbáo cáocácđiểm cótọa độ y nằm trongphạm vi trongthời gian , với làsố câu trả lờibáo cáocủa nút Tổng thời giantruy vấntrở
Phântầngcũng giúp cải thiệnthời giantruy vấncủarange tree chiềucao hơn bởi yếu tốlogarit Truy vấn phạm vi chiều đượcgiải quyếtbằng cáchchọnnhững điểmcótọa độ thứ trongphạm vichính xác với tập con chính quivàgiải quyếttruy vấn chiềutrêncáctập con Truy vấn chiềuđược giải quyếtbằng đệ quytrongcùng mộtcách [5] Tiếp tụccho đến khiđượctruy vấnhai chiều có thểđượcgiải quyếtnhưmô tảở trên
Định lí2.5Cho làtập hợpgồm điểmtrong không gian chiều, với Range trees phân tầng của sử dụnglưu trữ và có thể đượcxây dựngtrong thời gian Range treescó thểbáo cáocácđiểm của nằmtrong phạm vitruy vấnhình chữ nhậtvớithời gian , với làsố điểm báo cáo
[5]
2.2 Cấu trúc dữ liệu hình học
Trongtương laihầu hết cácxe hơisẽ được trang bịhệ thống định vịphương
Trang 38tiện giúp xác địnhvị trívàchỉ dẫn đến đích Như mộthệ thống lưu trữ bản đồ đường bộ, cho biếttoàn bộnước Mĩ.Hệ thống không chỉ theo dõi chúng ta đang ở đâu, còn cóthểhiển thịcácthành phầnthích hợptrên bản đồtại bất cứ thời giannàotrênmàn hìnhmáy tính;đó sẽ là mộtvùngquanh hình chữ nhậtở vị tríhiện tại Tuy nhiên, hệ thống vẫn thấy một phần bản đồ đó là vùng hình chữ nhật, hoặc cửa sổ, xác định một phầnbản đồ nằm trongcửa sổ được hiển thị Đây là truy vấn cửa sổ [5]
Hình 2.10 - Truy vấn cửa sổ trong bản đồ của U.S
Truy vấncửa sổlà giống nhưtruy vấnphạm vi nhưng khác nhaulàloạidữ liệuđượcxử lí: dữ liệutrong các truy vấnphạm vi làcác điểm, dữ liệutrong cáctruy vấncửa sổlàđoạnthẳng,đa giác, đường cong.Ngoài ra, đối vớicác truy vấnphạm vithườngxử lívớikhông gian tìm kiếm nhiều chiều, trong khiđó đối vớitruy
vấncửa sổkhông giantìm kiếmthườnglàhaihoặcbachiều
2.2.1 Interval trees
2.2.1.1 Phát biểu bài toán
Giả sử cửa sổ truy vấn là một hình chữ nhật song song với trục tọa độ, tức
là hình chữ nhật có các cạnh song song với trục tọa độ Cho tập hợp gồm đoạn thẳng song song với trục tọa độ và yêu cầu báo cáocác đoạn thẳng cắt cửa
sổ truy vấn Để giải quyết truy vấn cửa sổ ta cần xây dựngmột cấu trúc dữ liệu lưu trữ mà có thể báo cáo các đoạn thẳng cắt một cách hiệu quả
Quan sát hình vẽ ta thấy có bốn trạng tháicủa một đoạn thẳng với cửa sổ : đoạn thẳng có thể nằm hoàn toàn bên trong , đoạn thẳng có thể cắt biên
Trang 39của một lần, đoạn thẳng có thể cắt biên hai lần hoặc một phần đoạn thẳng
có thể chồng lên biên của Trong hầu hết các trường hợp đoạn thẳng có ít nhất một điểm đầu mút nằm trong Có thể tìm thấy các đoạn thẳng đó bằng cách thực hiện một loạt truy vấn với trong tập hợp điểm đầu mút của các đoạn thẳng trong Nếu ta thực hiện truy vấn phạm vi với trong tập hợp các điểm đầu mút của đoạn thẳng thì báo cáo các đoạn thẳng mà có hai điểm đầu mút nằm trong hai lần Điều này có thể tránh được bằng cách đánh dấu một đoạn thẳng khi báo cáo lần đầu tiên và chỉ báo cáo các đoạn thẳng mà chưa được đánh dấu Ngoài ra, khi tìm thấy một điểm đầu mút của đoạn thẳng nằm trong
có thể kiểm tra xem điểm đầu mút còn lạicó nằm trong không Nếu không có điểm đầu mút nằm trong thì báo cáo đoạn thẳng đó Nếu điểm đầu mút còn lại không nằm trong thì chỉ báo cáo đoạn thẳng khi điểm đầu mút hiện tại là điểm đầu mút ngoài cùng bên trái hoặc phía dưới
Để tìm các đoạn thẳng không có điểm đầu mút nằm trong cửa sổ truy vấn Đoạn thẳng này hoặc là đi qua biên của hai lần hoặc có chứa một cạnh của biên Khi đoạn thẳng là dọc sẽ đi qua cả hai cạnh ngang của biên Khi đoạn thẳng là ngang sẽ đi qua cả hai cạnh dọc của biên Có thể tìm thấy các đoạn thẳng đó bằng cách báo cáo tất cả các đoạn thẳng cắt cạnh trái của biên và tất cả các đoạn thẳng cắt cạnh dưới của biên Để chính xác chỉ nên báo cáo các đoạn thẳng mà không có một điểm đầu mút nằm trong , vì chúng đã được báo trước
đó Xem xét vấn đề tìm các đoạn thẳng ngang cắt bởi cạnh trái của ; để xử lí với cạnh ở trên chỉ có thể thay đổi vai trò của tọa độ và tọa độ
Gọi là đường thẳng truy vấn Một đoạn thẳng ngang
được cắt bởi khi và chỉ khi khi đó ta chỉ quan tâm đến tọa độ , vấn đề sẽ trở thành một chiều: cho tập hợp các khoảng trên đường thẳng thực và yêu câu báo cáo các khoảng chứa điểm truy vấn
2.2.1.2 Thuật toán và cấu trúc dữ liệu
đường thẳng thực Gọi là điểm giữa của điểm đầu mút của các khoảng,
vì vậy một nửa các điểm đầu mút của các khoảng nằm bên trái và một nửa các điểm đầu mút của các khoảng nằm ở bên phải Nếu giá trị truy vấn nằm bên trái của thì các khoảng nằm hoàn toàn bên phải của rõ ràng
là không chứa Các cây con phải của cây lưu trữ trên tập hợp gồm các
Trang 40khoảng nằm hoàn toàn bên phải và các cây con trái lưu trữ trên tập hợp gồm các khoảng nằm hoàn toàn ở bên trái Các cây con được xây dựng theo cùng một cách, khả năng có thể lưu trữ các khoảng trong cả hai cây con Cuối cùng, khoảng có thể được lưu trữ rất nhiều lần và số lượng lưu trữ có thể là rất lớn Để tránh sự gia tăng các khoảng phải xử lí với các vấn đề khác nhau: lưu tập hợp của các khoảng chứa trong cấu trúc riêng và liên kết có cấu trúc với gốc của cây
Hình 2.11 - Phân loại các đoạn thẳng liên quan đến
Cấu trúc liên kết cho phép đưa ra các khoảng trong chứa Cho tập hợp gồm các khoảng và yêu cầu tìm các khoảng có chứa Giả sử nằm bên trái của , các điểm đầu mút phải của tất cả các khoảng trong nằm bên phải của Vì vậy, được chứa trong khoảng khi và chỉ khi Tương tự, khi nằm bên phải của có thể duyệt danh sách sắp xếp giảm dần theo các điểm đầu mút phải của các khoảng, vì chúng được duyệt nếu điểm truy vấn nằm ở bên phải của Cuối cùng, khi báo cáo tất cả các khoảng trong
Cấu trúc dữ liệu lưu trữ các khoảng trong được gọi là interval trees
Nếu thì interval trees là lá
Ngược lại, gọi - điểm giữa các điểm đầu mút trong các khoảng và gọi
Interval trees bao gồm nút gốc được lưu trữ Hơn nữa,
tập hợp được lưu trữ hai lần; trong danh sách được sắp xếp theo các điểm đầu mút trái và trong danh sách được sắp xếp