1. Trang chủ
  2. » Công Nghệ Thông Tin

Phân tích & Thiết kế Giải thuật nâng cao Các giải thuật hình học

52 995 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 453,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

– 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... Tìm kiếm 1 chiều theo phạm vi  Cho một

Trang 1

Các giải thuật hình học Computational Geometry

TS Trần Cao Đệ

Trang 2

– Một điểm trong mặt phẳng (x,y)

– 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 3

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 (x 0 ,x 1 ,…,x d-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 4

Tì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

 k1 ≤ key(v) ≤ k2: 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 5

return 1DTreeRangeSearch(k1,k2,T.rightChild(v)); else

return 1DTreeRangeSearch(k1,k2,T.leftChild(v)); }

Trang 6

23 12

21

18

61 42

55

49

90 74

Trang 7

23 12

21

18

61 42

55

49

90 74

81

– 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 8

Hiệu quả của giải thuật

Tìm kiếm 1 chiều theo phạm vi trên một cây TKNP cân bằng có chứa n nút cần:

tử trả về sau tìm kiếm

Trang 9

– Nếu Tv có sv nút thì ta phải duyệt 2sv+1 nút (Sv nút trong và sv+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à

Trang 10

Tìm kiếm 2 chiều theo phạm vi

 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 11

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 12

Cấ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

50 33

Trang 13

Xây dựng cây TK 2 chiều

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 14

40- 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 15

Ví dụ minh họa

Nút phân phối

Nút biên

Trang 16

Giải thuật tìm kiếm

– Input: cho các khóa x1,x2,y1,y2 và cấu trúc chính T; v là nút trên T; t là kiểu của nút

– Output: tập hợp các nút v mà các nút thuộc cây con gốc v có tọa độ thỏa mãn x1 ≤ x ≤ x2 và y1 ≤ y ≤ y2

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 18

else { //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 19

Hiệ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(log 2 n+s) với s là số phần tử trả về sau tìm kiếm.

 Chứng minh: xem trang 554-Goodrich

Trang 20

Cây tứ phân (Quadtrees)

– Xử lí các điểm có tọa độ hạn chế (2048x2048)

– Các điểm tập trung

(x,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

r3

Trang 21

Ví dụ

f

a m k

b d

j i

e c

Nút trong Nút ngoài

Trang 22

Hiệu quả cây tứ phân

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

– 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 24

k-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 25

Hai 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 26

e g c p j f n l h a k m i b o d

Trang 27

– Tìm kiếm (từ nút gốc) nút ngoài v tương ứng với vùng R nhỏ nhất chứa p.

– Các điểm thuộc R và thuộc các vùng tương ứng với nút anh em của v đều được so sánh để tìm điểm

q gần nhất hiện tại

– Đị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 29

Kỹ thuật trượt phẳng (Plane sweep technique)

tưởng: 1 chiều hóa bài toán 2 chiều

Trang 30

Giao đ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(n2)

 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

Trang 31

Giải thuật trượt phẳng

 Cho trượt đường thẳng l thẳng đứng từ trái sang phải.

 Khi trượt, lưu các đoạn đang có giao điểm với l vào

tự điển S (tổ chức có thứ tự theo tọa độ y)

 Các sự kiện và hành động:

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 32

Hiệu quả

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

 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 36

Nhậ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

q

Trang 37

Định lý

giữa hai điểm bất kỳ ít nhất là d.

là O(logn+6) đó là thời gian 1DRangeSearchTree.

p

q

Trang 38

– Xác định điểm kế tiếp được xử lí (được quét)

– Xác định điểm bị loại khỏi S.

 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) < x(lastInTrip)-d, thì

 ta loại FirstInTrip

 FirstInTrip=Next(FirstInTrip)

– Sắp xếp các điểm O(nlogn)

– Thêm/xóa một phần tử vào/từ S là O(logn)

– Thực hiện tìm kiếm phạm vi trong S là O(logn)

– Thực hiện tìm kiếm khi quét qua n điểm O(nlogn).

Trang 39

Tì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 40

– (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

dương, âm hoặc bằng 0 tương ứng

Trang 42

Kiểm tra hai đoạn thẳng giao nhau

 Cho hai đoạn thẳng s1=p 1 q 1 ,s2=p 2 q 2 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 43

Tí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.

– Đ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 45

Giả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ý

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.

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)

 Trong trường hợp xấu nhất h=n thì thời gian “gói quà” là O(n2)

Trang 48

Giả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

– Sắp xếp các điểm P-{A} theo C(A), tức là góc của hợp phương ngang (tia Ax).

– Xét các điểm p ∈ P-{A} theo thứ tự trên

hơn 2 điểm hoặc Nếu p hợp với hai điểm trước đó làm thành một cua trái

H trong trường hợp ngược lại và lặp lại test đối với p

Trang 49

Giả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 50

Hiệu quả của giải thuật quét Graham

Trang 51

Cài đặt giải thuật quét Graham

Trang 52

Hết chương 5

Ngày đăng: 23/03/2015, 08:11

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm