Cây tìm kiếm phạm vi Một điểm trong không gian d chiều được biểu diễn theo tọa độ bởi x0,x1,…,xd-1.. – Kết quả tìm kiếm là tất cả các điểm hình tròn xq,yq,r Giải thuật tìm kiếm thườ
Trang 1Chương 4:
Các giải thuật hình học Computational Geometry
PGS TS TRẦN CAO ĐỆ Đại Học Cần Thơ
2013
Trang 2– Một điểm trong không gian (x,y,z)
Các ứng dụng máy
học, xử lí ảnh cần xử lí
dữ liệu hàng trăm, hàng ngàn chiều
Các bài toán thống kê, điều khiển cũng cần xử
lí dữ liệu nhiều chiều
Một số bài toán quan trọng
– Tìm kiếm theo phạm vi (range searching query)
– Tìm bao lồi (convex hull)
Trang 3Cây tìm kiếm phạm vi
Một điểm trong không
gian d chiều được biểu diễn theo tọa độ bởi (x0,x1,…,xd-1).
Tìm kiếm theo phạm vi
là tìm kiếm các điểm trong một phạm vi nào đó.
– Ví dụ tìm các điểm gần với (xq,yq) trong khoảng cách r
– Kết quả tìm kiếm là tất
cả các điểm hình tròn ((xq,yq),r)
Giải thuật tìm kiếm thường tổ chức dữ liệu theo cây cân bằng – gọi
là cây TK phạm vi.
Trang 4Tìm kiếm 1 chiều theo phạm vi
Cho một tự điển (tập
hợp các phần tử) có thứ tự
Giải thuật tìm kiếm
1DTreeRangeSearch(k1,k2,v)
– Nếu v là nút ngoài (V=NULL): dừng
– Nếu v là nút trong
Key(v)<k1: tìm đệ qui trên cây phải của v
k 1 ≤ key(v) ≤ k 2 : trả ra v
và tìm đệ qui trên cả 2 cây con
Key(v)>k2: tìm đệ qui trên cây con trái của v.
Trang 5return 1DTreeRangeSearch(k1,k2,T.rightChild(v)); else
return 1DTreeRangeSearch(k1,k2,T.leftChild(v)); }
Trang 623 12
21
18
61 42
55
49
90 74
Trang 723 12
21
18
61 42
55
49
90 74
81
Gọi P1 là đường đi khi tìm kiếm trên cây theo khóa k1
Gọi P2 là đường đi khi tìm kiếm trên cây theo khóa k2
Định nghĩa;
– V là nút biên: nếu v là nút thuộc P1 hoặc P2
– V là nút trong: nếu v không là nút biên và v là nút thuộc cây con phải của nút thuộc P1 hoặc con trái của nút thuộc P2.
– V là nút ngoài: nếu v không là nút trong cũng không là nút biên.
Trang 8Không gian lưu trữ O(n)
Thời gian thực hiện 1DTreeRangeSearch là O(logn+s) với s là số phần tử trả về sau tìm kiếm
Thời gian thực hiện xóa một phần tử là O(logn)
Trang 9– Nếu T v có s v nút thì ta phải duyệt 2s v +1 nút (S v nút trong và s v +1 nút ngoài)
– Các nút trong nằm trên j cây con rời nhau có nút gốc
là con của nút biên và
j ≤ 2h
– Gọi s i là số nút của cây T i ta
có tổng số nút phải duyệt là: ji=1(2si+1)=2s+j ≤ 2s+2h
Vậy phải duyệt nhiều nhất là
2s+4h+1 tức là O(logn + s)
Trang 10Tìm kiếm 2 chiều theo phạm vi
Mỗi điểm là một cặp (x,y)
FindAllInRange(x1,x2,y1,y2): Tìm kiếm tất cả các cặp thỏa:
– x1 ≤ x ≤ x2
– y1 ≤ y ≤ y2
Trang 11Kí hiệu T
– Cấu trúc phụ: gắn vào mỗi nút của cấu trúc chính là một cây TKNP (cân bằng) theo y kí hiệu T(v) là cây gắn với nút v
Mỗi nút của cấu trúc chính (cây T) lưu trữ
– Một phần tử có tọa độ x(v), y(v) và giá trị
element(v), VÀ
– Cây tìm kiếm một chiều theo y, kí hiệu T(v) chứa các phần tử như cây con của T gốc v với các khóa
là tọa độ y
Trang 12Cấu trúc chính là một cây TKNP (cân bằng) theo tọa độ x
20
40 33
2
50 2
40
33 50
50 33
Trang 13Xây dựng cây TK 2 chiều
nút cần dùng không gian O(nlogn) và có thể xây dựng trong thời gian O(nlogn)
– Cấu trúc chính dùng O(n) không gian
– Cấu trúc phụ dùng không gian tỷ lệ với số nút lưu trữ Một nút v trên cây T có thể có O(logn) tiền bối
v được copy O(logn) lần
Không gian lưu trữ O(nlogn)
– Thời gian xây dựng cũng là O(nlogn).
Trang 1440- Giải thuật
– Tìm trên cấu trúc chính [x1,x2]
– Khi tìm thấy một nút trong
v, tìm đệ qui trên cấu trúc phụ [y1,y2]
Nút phân phối (allocation
node) : nút trong+nút con
của nút biên
Các nút biên chia làm 3 nhóm
– Nút giữa: giao của P1 và P2
– Nút trái: nút thuộc P1 nhưng không thuộc P2
– Nút phải: thuộc P2 nhưng không thuộc P1.
Với mỗi nút phân phối: tìm trên cấu trúc phụ [y1,y2]
Trang 15Ví dụ minh họa
Nút phân phối
Nút biên
Trang 17} else if (t==“right”){
L=1DTreeRangeSearch(y1,y2,T.leftChild(v))
R=2DTreeRangeSearch(x1,x2,y1,y2,T.rightChild(v),”right”)} else { //t==“middle”
L=2DTreeRangeSearch(x1,x2,y1,y2,T.leftChild(v),”left”)R=2DTreeRangeSearch(x1,x2,y1,y2,T.rightChild(v),”right”)}
}
Trang 18else { //của if đầu tiên
M= ;
if (x(v) < x1){
L= ;
R=2DTreeRangeSearch(x1,x2,y1,y2,T.rightChild(v),t);} else { //x(v) > x2
L=2DTreeRangeSearch(x1,x2,y1,y2,T.leftChild(v),t);R= ;
Trang 19Hiệu quả của giải thuật
Giải thuật tìm kiếm 2 chiều theo phạm vi chứa n
phần tử lấy thời gian O(log2n+s) với s là số phần tử trả về sau tìm kiếm.
Chứng minh: xem trang 554-Goodrich
Trang 20Cây tứ phân (Quadtrees)
Trong các bài toán xử lí ảnh
– Xử lí các điểm có tọa độ hạn chế (2048x2048)
– Các điểm tập trung
Xét các điểm trong mặt phẳng
(x,y)
Cây tứ phân là cây
– mỗi nút trong ứng với một vùng hình vuông R
– Các nút con của một nút tương ứng với 4 hình vuông con ở 4 góc của R.
– Các nút được phân chia một cách đệ qui để mỗi vùng chứa
1 điểm Vùng chứa 1 điểm coi như là một nút ngoài
r
r1 r2 r4
r3
Trang 21Ví dụ
f
a m k
b d
j i
e c
Nút trong Nút ngoài
Trang 22Hiệu quả cây tứ phân
Nếu có hai điểm rất gần nhau thì thời gian xây dựng cây sẽ rất lâu
Thiết kế một biên (bound) D, chiều sâu giới hạn.
trong mặt phẳng là O(D*n), D là chiều sâu giới hạn của cây.
Trang 23– Bắt đầu từ gốc r của cây.
– Nếu vùng R (tương ứng với r) A = : dừng
– Nếu R A: tất cả các nút lá của cây gốc r đều là kết quả
– Giải thuật tìm kiếm có thời gian > thời gian của giải thuật tìm brute forte!
– Trong thực hành thì TK trên cây tứ phân nhanh hơn tìm kiếm brute forte!
Trang 24k-d-Trees
Cây tứ phân không thể
tổng quát hóa cho nhiều chiều
– KG 3 chiều mỗi nút có 8 nút con;
– KG d chiều, mỗi nút có
2d nút con
Cây k-d: là cây nhị phân được xây dựng khá tương tự với cách xây dựng cây tứ phân.
– Mỗi nút tương ứng với một vùng hình chữ nhật
– Phân chia không gian chứa các điểm thành các hình chữ nhật, mỗi hình chứa 1 điểm
Trang 25Hai loại cây k-d
Dựa trên vùng (region
based)
– Chia vùng HCN thành hai HCN theo trục dài nhất Nếu có nhiều trục dài bằng nhau thì chia xoay vòng theo các trục
Dựa trên điểm based)
(point-– Chia theo phân phối điểm Mỗi HCN chứa phân nửa số điểm
Trang 26e g c p j f n l h a k m i b o d
Trang 27– Định nghĩa hình tròn s(p,pq)
– Duyệt cây tìm các vùng giao với s khác rỗng
– Trong khi duyệt nếu tìm thấy điểm q’ gần p hơn q, thay q=q’
Trang 29Kỹ thuật trượt phẳng (Plane sweep
technique)
bài toán hình học Ý tưởng: 1 chiều hóa bài toán 2 chiều
Trang 30Giao đoạn thẳng trực giao
Bài toán tổng quát: Cho n
đoạn thẳng, tìm giao của tất
cả các cặp đoạn thẳng
– Brute forte: xét n(n-1)/2 cặp, thời gian O(n 2 )
Bài toán hạn chế: cho n
đoạn thẳng trực giao, nghĩa
là các đoạn song song với
ox hoặc oy
Chuyển từ 2D sang 1D:
– Mỗi đọan thẳng thẳng đứng
v, xét đường thẳng l(v) đi ngang qua v.
– Xét đường l với các đoạn thẳng nằm ngang 1D hóa (v,y), v cố định
Gọi S(v) là tập hợp các điểm
là giao của l(v) và các đoạn thẳng nằm ngang Thì việc tìm giao điểm của v và các đoạn nằm ngang tương đương với việc tìm kiếm 1 chiều theo y
Trang 31Giải thuật trượt phẳng
Cho trượt đường thẳng l thẳng đứng từ trái sang
Gặp đầu trái của đoạn ngang h Thêm h vào tự điển S
Gặp đầu phải của đoạn ngang h Loại h khỏi tự điển S
Gặp đoạn thẳng thẳng đứng v Thực hiện tìm kiếm theo phạm
vi trên S với phạm vi là tọa độ y của hai đầu điểm v
Trang 32Hiệu quả
điểm của n đoan thẳng trực giao cho trước là O(nlogn+s), với s là số giao điểm.
Trang 33– Lưu giữ các cặp điểm gần nhất và các điểm gần với đường quét
Trang 34– Một tự điển S chứa các điểm đã quét qua theo thứ
tự tọa độ y.
Như vậy, khi quét ngang 1
điểm p phải thực hiện các phép toán sau:
– Loại bỏ khỏi S các điểm r thỏa: x(p)-x(r) > d
– Tìm điểm q trong S sao cho d(p,q)<d Cập nhật lại a=p, b=q và d=d(p,q)
– Insert p vào S.
Trang 35Đường quét
d Vùng khảo sát
d
Trang 36Nhận xét
Rõ ràng mỗi lần quét
qua một điểm p ta chỉ xét các điểm trong S và cần tìm điểm q với
d(p,q)<d
– Các điểm cần xét thuộc hình chữ nhật B(p,d) kích thước dx2d
– Điểm q cần tìm thuộc giao của B(p,d) với nửa hình tròn (p,d)
Với mỗi điểm thuộc S, thực hiện tìm kiếm theo phạm vi với các khóa là tọa độ y.
Tổ chức cây tìm kiếm là AVL hoặc red-black lưu trữ S.
p B(p,d) C(p,d)
q
Trang 37 Hệ quả: thời gian tìm kiếm trong S để xác
định các điểm thuộc B(p,d) là O(logn+6) đó
là thời gian 1DRangeSearchTree.
p B(p,d) C(p,d)
q
Trang 38 Gọi FirstIntrip và LastInTrip
là điểm đầu tiên và cuối cùng trong các điểm đang xét (theo thứ tự)
– Nếu X(FirstInTrip) <
– Thực hiện tìm kiếm phạm vi trong
Trang 39Tìm bao lồi (convex Hull)
Cho n>3 điểm (không
thẳng hàng) trong mặt phẳng, tìm đa giác lồi:
– có các đỉnh thuộc tập các điểm đã cho,
– chứa tất cả các điểm đã cho
Đa giác là một chuỗi
khép kín các đỉnh đa giác
– Đa giác đơn: giao của hai cạnh bất kỳ (nếu có)
là đỉnh của đa giác
– Đa giác lồi nếu nó là đơn
và mọi góc trong đều nhỏ hơn
Trang 40pq
– (p,q,r) là “cua phải” nếu chúng có hướng cùng chiều kim đồng hồ, tức là góc
(p,q,r) < nằm bên phải pq
– nếu (p,q,r)= thì 3 điểm thẳng hàng.
p
q r
p
q
r
Trang 41Định lý: (p1,p2,p3) là cua trái, cua phải hoặc
thẳng hàng tùy theo dương, âm hoặc bằng
0 tương ứng
Trang 42Kiểm tra hai đoạn thẳng giao nhau
Cho hai đoạn thẳng s1=p1q1,s2=p2q2 s1 và s2 giao
nhau nếu một trong các điều kiện sau thỏa:
1. (p1,q1,p2), (p1,q1,q2) khác hướng VÀ (p2,q2,p1),
(p2,q2,p2) khác hướng
2. (p1,q1,p2), (p1,q1,q2), (p2,q2,p1) và (p2,q2,q1) thẳng
hàng, VÀhình chiếu lên trục x của s1 và s2 là giao nhau, VÀhình chiếu của s1 và s2 lên trục y là giao nhau
Trang 43Tính chất cơ bản của bao lồi
Vùng R là lồi nếu hai điểm
p,q thuộc R thì cả đoạn thẳng pq thuộc R
Định lý: Cho S là tập hợp
điểm và H là bao lồi của S,
ta có:
– Cặp (a,b) làm thành một cạnh của H nếu và chỉ nếu tất cả điểm khác thuộc nửa mặt phẳng xác định bởi đường thẳng ab.
– Điểm p là một đỉnh của bao lồi nếu và chỉ nếu tồn tại một đường thẳng l đi qua p sao cho tất cả các điểm khác p thuộc về nửa mặt phẳng xác định bởi l
– Điểm p không phải là đỉnh của H nếu và chỉ nếu p chứa trong một tam giác có
3 đỉnh là 3 điểm khác trong
S hoặc p thuộc một đoạn thẳng nối hai đỉnh khác
Trang 45Giải thuật “gói quà” (gift wrapping)
Chọn điểm A(xmin,ymin), A là
một đỉnh của bao lồi, gọi là điểm neo (anchor)
Xét tia Ax
Quay tia Ax ngược chiều kim
đồng hồ cho đến khi gặp một điểm B B là đỉnh kế tiếp
A trên bao lồi Thay A bởi B
và tiếp tục quay tia Ax
Cho đến khi điểm B tìm thấy
trùng với điểm neo
A
B
A
B
Trang 46Định lý
là một đỉnh của bao lồi H của S, điểm p là đỉnh kế tiếp trên bao lồi khi quay ngược chiều kim đồng hồ thì (a,p,q) là “cua trái” với mọi điểm q của S.
Gọi C(a) hướng của (a,p,q), định nghĩa:
C(a).isLess(p,q) nếu và chỉ nếu (a,p,q) là một “cua trái”
Trang 47 Gọi p0,p1,…,ph-1 là các đỉnh bao lồi.
Thời gian tìm điểm neo p0 là O(n)
Ở bước i: thời gian tìm đỉnh
kế tiếp (tính C(pi-1)) là O(n)
Có h đỉnh phải tìm vậy thời gian là O(hn)
h=n thì thời gian “gói quà” là O(n2)
Trang 48Giải thuật quét Graham (Graham Scan)
Cho tập P các điểm trong
mặt phẳng
Giải thuật tìm bao lồi H
– Tìm một điểm A nằm trên bao lồi, gọi là điểm neo; ví
dụ điểm có tọa độ y nhỏ nhất Thêm A vào H
Xóa điểm cuối cùng trong
H trong trường hợp ngược lại và lặp lại test đối với p
Trang 49Giải thuật quét Graham
Scan(S,a){
//Input: S là danh sách có thứ tự theo chiều ngược chiều kim đồng hồ; a là điểm neo//Output: S chứa các đỉnh của bao lồi (các đỉnh còn lại sau khi thực hiện giải thuật)
S.Append(a) Prev=S.first();//prev=a Curr=S.after(prev);
Do{
next=S.after(curr)
if isLeftturn(prev,curr,next) prev=curr
else{
S.remove(curr);
prev=S.before(prev);
} curr=S.after(prev) } while curr!=S.last() S.Remove(S.last());//xóa điểm neo a
}
Trang 50Hiệu quả của giải thuật quét Graham
Trang 51Cài đặt giải thuật quét Graham
Trang 52Hết chương 5