1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 4 PGS.TS. Trần Cao Đệ

52 795 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 470 KB

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

Nội dung

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 1

Chươ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 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 (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 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

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

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

Khô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 10

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

Kí 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 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

33 50

50 33

Trang 13

Xâ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 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 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(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 20

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

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

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

bài toán hình học Ý 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(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 31

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

Hiệ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 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 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 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

pq

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

Kiể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 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

 Đị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 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ý

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

 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 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: 17/04/2015, 15:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w