Tải bản đầy đủ (.docx) (88 trang)

Một số kiểu dữ liệu trừu tượng ứng dụng trong hình học tính toán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.27 MB, 88 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN THỊ HOA

MỘT SỐ KIỂU DỮ LIỆU TRỪU TƯỢNG
ỨNG DỤNG TRONG HÌNH HỌC TÍNH TOÁN

LUẬN VĂN THẠC SĨ

Hà Nội – 2011


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN THỊ HOA

MỘT SỐ KIỂU DỮ LIỆU TRỪU TƯỢNG
ỨNG DỤNG TRONG HÌNH HỌC TÍNH TOÁN
Ngành

: Công nghệ Thông tin

Chuyên ngành : Hệ thống Thông tin

Mã số

:604805

LUẬN VĂN THẠC SĨ



NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. LÊ MINH HOÀNG

Hà Nội – 2011


1

MỤC LỤC
DANH SÁCH THUẬT NGỮ VÀ GIẢI THÍCH.............................................
DANH SÁCH HÌNH VẼ ..................................................................................
MỞ ĐẦU...........................................................................................................

Chương 1 - TỔNG QUAN VỀ HÌNH HỌC TÍNH TOÁN .............................
1.1Các bài toán của hình học tính toán ....
1.2Các đối tượng hình học .........................
1.3Một số bài toán hình học và thuật toán

1.4Kết luận ..................................................
Chương 2 - KIỂU DỮ LIỆU TRỪU TƯỢNG TRONG HÌNH HỌC TÍNH TOÁN ..
2.1Tìm kiếm phạm vi trực giao .................

2.2Cấu trúc dữ liệu hình học......................

2.3Biến thể của các cấu trúc dữ liệu hình

2.4Kết luận ..................................................
Chương 3 - CÀI ĐẶT VÀ ĐÁNH GIÁ..........................................................
3.1Cài đặt Kd-trees ....................................
3.2Cài đặt Range trees ...............................


3.3Cài đặt Interval trees ............................
3.4Cài đặt Segment trees ...........................
3.5Kết luận ..................................................
KẾT LUẬN.....................................................................................................
TÀI LIỆU THAM KHẢO..............................................................................


2

DANH SÁCH THUẬT NGỮ VÀ GIẢI THÍCH
Số

Thuật ngữ
1

Canonical subset

2

-Dimensional Kd-trees

3

-Dimensional Range trees

4

Interval trees


5

Multi-level partition trees

6

Partition trees

7

Priority search trees

8

Range queries

9

Range trees

10

Segment trees

11

Stabbing queries

12


Windowing queries


3

DANH SÁCH HÌNH VẼ
Số
Hình 1.1
Hình 1.2
Hình 1.3
Hình 2.1
Hình 2.2
Hình 2.3
Hình 2.4
Hình 2.5
Hình 2.6
Hình 2.7
Hình 2.8
Hình 2.9
Hình 2.10
Hình 2.11
Hình 2.12
Hình 2.13
Hình 2.14
Hình 2.15
Hình 2.16
Hình 2.17
Hình 2.18



Hình 2.19
Hình 2.20
Hình 2.21
Hình 2.22
Hình 2.23


4
Số
Hình 2.24
Hình 2.25
Hình 2.26
Hình 2.27
Hình 2.28
Hình 3.1
Hình 3.2
Hình 3.3
Hình 3.4


5

MỞ ĐẦ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.


6

Chươ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].
1.1.1 Bài toán tĩnh
Trong cácbài toántĩnhcho trướcđầu vàovàđầu ratương ứngcần phải
đượcxây dựng hoặcđược tìm thấy.Một sốbài toáncơ bảncủa loại nàylà:
Convex Hull: Cho tập hợp các điểm và yêu cầu tìm đa giác lồi nhỏ nhất
chứa tất cả các điểm đó.
Line segment intersection: Cho tập hợp các đoạn thẳng và yêu cầu tìm
điểm cắt nhau giữa các đoạn thẳng trongtập hợp cho trước.
Polygon cutting: Chia đa giác thành các dạng hình học khác với tổng
chiều dài được chia là nhỏ nhất.
Delaunay triangulation.
Voronoi diagram: Cho tập hợp các điểm và yêu cầu tìm phân vùng không
gian theo các điểm đóng.
Linear programming.
Closest pair of points: Cho tập hợp các điểm và yêu cầutìm cặp điểm có
khoảng cách nhỏ nhất.
Euclidean shortest path: Nối hai điểm trong không gian Euclide bởi một
đường đi ngắn nhất.
Polygon triangulation: Cho trước một đa giác và yêu cầuphân chia phần
trong của đa giác thành các tam giác.
Độ phức tạptính toáncholớp cácbài toánnày làước tính về thời gian



7
và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


8
khai 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 Các đối tượng hình học
Máy tính ngày càng được sử dụng nhiều hơn để giải quyết các bài toán có
quy mô lớn về hình học. Các đối tượng hình học cơ bản như điểm, đoạn thẳng
và đa giác là nguồn gốc của tập đáng kể các bài toán và thuật toán.
1.2.1 Điểm
Trong không gian hai chiều, đối tượng cơ sở là điểm được biểu diễn bởi
một cặp số nguyên – tọa độ của điểm đó trong hệ trục tọa độ Descart. Một điểm
trong mặt phẳng có tọa độ và tọa độ , kí hiệu
[13].
1.2.2 Đoạn thẳng
Một tổ hợp lồi của hai điểm phân biệt
một điểm bất kỳ
với
Đoạn thẳng


là tập hợp mọi tổ hợp lồi của

các điểm đầu mút của đoạn thẳng

đoạn thẳng


được định hướng từ



, kí hiệu

. Đoạn thẳng có hướng

đến

, kí hiệu

, với


[13].

1.2.3 Vectơ
Vectơ là một đoạn thẳng có hướng. Vectơ có điểm đầu
được kí hiệu

và điểm cuối ,

. Khi không cần chỉ rõ điểm đầu, điểm cuối ta kí hiệu

Tọa độ của vectơ là

=


với

;

[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


9
dọc và không có ba đoạn thẳng nào giao nhau tại một điểm.
1.3.1.2 Thuật toán
Một thứ tự hoàn toàn (total order) trên các đoạn thẳng cắt nhau bởi đường
thẳng quét dọc được định nghĩa như sau[13].
Hai đoạn thẳng và là có thể so sánh được tại
quét dọc tại ví trí cắt cả hai đoạn thẳng đó.
-

-


Nếu

quét tại



là có thể so sánh tại

ở cao hơn với giao điểm của

nếu đường thẳng

và giao điểm của

với đường thẳng

với cùng đường thẳng quét đó thì ta nói

rằng
a

r

Hình 1.1 -Thứ tự giữa cácđoạnthẳng vớiđư
Với bất kỳ cho trước, mối quan hệ
đoạn thẳng cắt đường thẳng quét tại
khác, hình 1.1a. Khi đoạn thẳng và
đường thẳng quét đi qua vùng bóng mờ đều có
quan hệ thứ tự
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.


10
Cá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

-

BELOW(

): trả về đoạn thẳng ở ngay dưới s trong .

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
trí đường thẳng quét nơi thứ tự thay đổi.

là một điểm biến cố, là vị

-

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].
Algorithm ANY-SEGMENTS-INTERSECT
Input. Tập hợp gồm đoạn thẳng.
Output. Cặp các đoạn thẳng trong

cắt nhau thì giá trị True, ngược lại là False.

1.
2.

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, phân

giải trùng hợp bằng cách đặt các điểm đầu mút trái trước các điểm đầu mút
phải và kế đến phân giải trùng hợp bằng cách đặt các điểm đầu mút có tọa

độ
3.
4.

nhỏ hơn được sắp xếp trước.


for mỗi điểm

trong danh sách được sắp xếp của các điểm đầu mút do

if là điểm đầu mút trái của đoạn thẳng then

5.

INSERT

6.

if (ABOVE

(BELOW
7.

tồn tại và cắt ) hoặc

tồn tại và cắt s) then
return TRUE


11
8.

if là điểm đầu mút phải của đoạn thẳng then
if (ABOVE

9.


và BELOW

và (ABOVE
cắt BELOW
10.
return TRUE
11.
12.

đều tồn tại)

) then

DELETE
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-SEGMENTSINTERSECT 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].
q

p
p
lồi

không lồi

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 .


12
p10

p10

p11
p12

p0

Hình 1.2 -Tập hợp

gồm các điểm và bao lồi

1.3.2.2 Thuật toán
Thuật toán quét Graham và thuật toán bước Jarvis tìm bao lồi của tập hợp
gồm điểm trong mặt phẳng. Cả hai thuật toán quét Graham và bước Jarvis đều
sử dụng kỹ thuật “quét quay tròn”, các đỉnh được xử lí theo thứ tự của các góc
giữa tạo với một đỉnh tham chiếu.
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
Output. Bao lồi

gồm

điểm trong mặt phẳng với
của

.



1.

Gọi là điểm nằm trong có tọa độ
bên trái trong trường hợp đồng hạng.

nhỏ nhất hoặc điểm ngoài cù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ừ ).


13
PUSH
PUSH

3.
4.

PUSH
for
to

5.
6.
7.

do

while góc tạobởi các điểm NEXT-TO-TOP
và là góc không quay trái do

8.
9.
10.

, TOP


POP
PUSH
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
2.

Chọn là một điểm trong tập hợp
trục hoànhlà nhỏ nhất.

3.


Return

có tọa độ

nhỏ nhất.

mà góc giữa đoạn thẳng

với

4.
5.
6.

while
Chọn

do
là điểm trong tập hợp

mà góc giữa

là lớn nhất.

7.
8.

Return

1.3.2.3 Phân tích độ phức tạp

Định lí 1.2 Cho tập hợp
thuật toán quétGrahamlà

gồm

điểm trong mặt phẳng. Thời gianthực hiện
, 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à


14
, 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


. 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

gian

, mỗi lần lặpchi phíthời

độ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
Với

chỉ có mộtvòng lặp while lồng nhau.

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



-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à
toán là

,

. Như vậy, thời gianthực hiệnthuật

.


Định lí 1.3 Cho là tập hợp gồm
thuật toán bước Jarvis là

Thật vậy, với

điểm trong mặt phẳng. Thời gian thực hiện

, trong đó

đỉnh của

[13].

, 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à
trịtrong thời gian

là số đỉnh của bao lồi

. Ta có thểtính toánít nhất giá

nếumỗi lần so sánhchi phí thời gian là

vậy,thuật toán bướcJarvisđược thực hiện với chi phí thời gianlà

.Như

.


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


xéttất cả



.Mộtthuật toánđơn giản tìm cặpđiểm gần nhấtlàxem

cặpđiểm với chi phí về thời gian là

nàysẽmô tảthuật toán chia để trị với chi phí vềthời gian là

.Trongphần
.

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
đưa ra cặp điểm có khoảng cách nhỏ nhất.
1.3.3.2 Thuật toán

và yêu cầu


15
Mỗ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

tọa độ

trong

điểmtrong

(

,



với điểm giữa của

bởi đường thẳng dọc

tất cả các

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
điểm của và

tương ứng,sắp xếp tăng dần theo tọa độ

được chia thànhcác mảng và , chứa cácđiểmcủa

tăng dần theotọa độ .





,chứacác

. Tương tự,mảng
tương ứng,sắp xếp

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

cáchcặp điểm gần nhấttrả lạicủa



,

tương ứng là và

và . Gọicác khoảng
;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ề.
-



PL

pL

Hình1.3 - Thuật toán chỉ cần kiểm tra
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ẳng dọc ; chia thành
2. Tìm
3.
4. Tính khoảng cách giữa các điểm mà một điểm nằm trong
điểm nằm trong
4.1 Mảng

- các

4.2 Với mỗi điểm trong
cặp điểm gần nhất .
4.3 Nếu

t

thấy bởi các lời gọi đệ quy. Cặp điểm này và khoảng cách của

trả về. Ngược lại, cặp điểm gần nhất và khoảng cách của nó đư
các lời gọi đệ quy được trả về.
5.


Return

1.3.3.3 Phân tích độ phức tạp
Định lí 1.4Cho tập hợp gồm điểm trong mặt phẳng. Thời gian thực hiện thuật
toán tìm cặp điểm gần nhất là
Thời gianthực hiện là

[13].
. Khó khănchính ở việc

bảo đảmcác mảng
và được truyền chocác lời gọiđệ quyđược sắp xếp
theocáctọa độthích hợp vàcũnglàmảng được sắp xếp theo tọa độ .


17
Trì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



,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].
1.
2.

for

3.

to

do

if

then

4.
5.
6.

else

7.
Bằng cách nàocó được cácđiểmsắp xếpở vị trí đầu tiên, mộtcách đơn giản
làsắp xếp trước chúng.Vì vậy, nếugọi

quyvà

là thời gianthực hiệncủa mỗi bướcđệ


làthời gianthực hiện của toàn bộ thuật toán thì nhận được

Do đó



[13].

1.4 Kết luận
Trong chương này giới thiệu về các vấn đề của hình học tính toán, các đối
tượng cơ bản của hình học và các thuật toán kinh điển của hình học tính toán
trong không gian hai chiều. Thuật toán xác định cặp đoạn thẳng bất kỳ cắt nhau
được đưa ra bởi Shamos và Hoey [28] với độ phức tạp về thời gian là
Thuật toán tìm bao lồi của tập hợp các điểm trong mặt phẳng sử dụng phương
pháp quét là thuật toán quét Graham [17] với chi phí thời gian là

.



thuật toán bước Jarvis [19] với chi phí thời gian là
. Có nhiều phương
pháp để giải quyết bài toán tìm cặp điểm gần nhất với độ phức tạp khác nhau, sử
dụng thuật toán chia để trị tìm cặp điểm gần nhất thì thời gian thực hiện là
được đưa ra bởi Shamos và xuất hiện trong Preparata và Shamos [27].


18


Chươ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
độ.
Lương

6000000
4000000

Tuổi
30

50

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


19
đượ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].

6000000
4000000

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à
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




là hai lá nơi mà tìm kiếm kết thúc tương ứng với

Trước tiên tìm theo

và trong

được lưu trữ tại các lá ở giữa
và lưu trữ tại



. Các điểm trong phạm vi
bao gồm

. Để tìm các lá giữa







.

là những điểm

, có thể chứa điểm lưu trữ tại


, trước tiên cần phải tìm

20


các nút
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
đi tìm kiếm có màu xám sáng.

3

3

10

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


là con trái và con phải tương ứng của nút

FINDSPLITNODE(
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à
đường đi kết thúc.

, hoặc lá nơi mà cả hai

1.
2.
3.

while

không là lá và(

if

hoặc

) do

then

4.
5.
6.


else
return
Bắt đầutừ

theo đường đitìm kiếmvới , tại mỗinútvới đường đi bên

trái vàbáo cáotất cảcáclátrongcây conphải. Tương tự, theođường đi tìm kiếm với
vàbáo cáocác látrongcây contráicủacác nút. Cuối cùng,phảikiểm
tracácđiểmlưu trữtạicáclánơicác đường đi kết thúc, các điểm này có thể nằm
trong hoặckhôngnằmtrong khoảng
.


21
root(T)

các cây con được chọn
Thuậ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].
Algorithm 1DRANGEQUERY(
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
1.

←F

2.


if

3.

Kiểm tra nếu điểm lưu trữ tại

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.
6.whileν không là lá do
7.
8.
9.
10.
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.


22
2.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ữ
gian xây dựng

và có thời

, 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

phí trongmỗi nút là

.Thời gianchi

, tổng thời gianchi phícho các nút là

vậy thời giantruy vấnlà

[5].Như

.

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

y

2.1.2.2 Thuật toán và cấu trúc d
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 độ .


×