1. Trang chủ
  2. » Luận Văn - Báo Cáo

Brute Forte Và Plane Sweep Thuật Toán Nào Tối Ưu Trong Bài Toán Tìm Cặp Điểm Gần Nhất

11 395 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 11
Dung lượng 99,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

Mỗi thuật toán sẽ được trình bày về mặt ý tưởng, tính độ phức tạp, thực nghiệm trên cùng một bộ dữ liệu để so sánh thời gian thực hiện của hai giải thuật từ đó tìm ra giải thuật tối ưu..

Trang 1

Huỳnh Minh Trí1 (M001016), Nguyễn Ngọc Nga1 (M001005), Trương Mỹ Thu Thảo1 (M001015), Nguyễn Thị Hồng Yến1 (M001018)

1 Học viên cao học ngành Hệ Thống Thông Tin khóa 19,

Trường Đại Học Cần Thơ Tháng 4, năm 2013

Trang 2

Tóm tắt: Trong bài báo này chúng tôi sẽ giới thiệu về hai thuật toán

để giải quyết yêu cầu “Tìm cặp điểm ngắn nhất trong mặt phẳng” Mỗi thuật toán sẽ được trình bày về mặt ý tưởng, tính độ phức tạp, thực nghiệm trên cùng một bộ dữ liệu để so sánh thời gian thực hiện của hai giải thuật từ đó tìm ra giải thuật tối ưu Bộ dữ liệu được tạo một cách ngẫu nhiên từ số lượng nhỏ đến số lượng đủ lớn để so sánh được sự chênh lệch về thời gian thực hiện của từng thuật toán Từ đó đưa ra kết luận thuật toán tối ưu Brute forte hoặc Plane sweep

Keywords: Brute forte, Plane sweep, so sánh Frute forte và Plane

sưeep

Trang 3

1 Giới thiệu

Bài toán tìm cặp điểm gần nhất trong mặt phẳng là bài toán cơ bản trong hình học tính toán, được sử dụng nhiều trong hệ thống GIS, phần tử hữu hạn, đồ họa máy tính,… theo nghiên cứu hiện nay có nhiều thuật toán với độ phức tạp khác nhau vá được tiếp cận theo các hướng sau:

Hướng tiếp cận Brute Forte:

Thuật toán thuộc cách tiếp cận này cài đặt khá đơn giản Ứng với từng điểm I cho trước thuật toán này sẽ tính khoảng cách từ I đến các điểm còn lại, từ đó so sánh các khoảng cách để tìm được cặp điểm ngắn nhất Trong trường hợp này cần thực hiện n(n-1)/2 số lần tính khoảng cách, n(n-1)/2 số lần so sánh vậy thời gian cần cho hướng tiếp cận này O(n2)

Hướng tiếp cận chia để trị

Đầu tiên các điểm trong mặt phẳng được chia thành các tập con, thực hiện tìm cặp điểm ngắn nhất cho các tập con, trộn hai tập con, kiểm tra các điểm gần đường phân cách xem có cặp điểm nào nằm hai bên đường phân cách có khoảng cách nhỏ hơn min Trong hướng tiếp cận này cần thời gian thực hiện O(n logn)

Hướng tiếp cận trượt phẳng

Trước tiên là tìm miny, maxy trong tập hợp điểm đã cho, thực hiện sắp xếp các điểm theo thứ tự tăng dần của x Dùng một đường thẳng đứng (miny, maxy) trượt

từ điểm cực trái sang điểm cực phải, lưu giữ các cặp điểm gần nhất và các điểm gần với đường trượt, thực hiện so sánh để giữa lại cặp điểm có khoảng cách ngắn nhất

[1]

Trang 4

Trong hướng tiếp cận này thì thời gian sắp các điểm cho trước là tốn nhiều thời gian nhất và đó cũng được xem là độ phức tạp của thuật toán O(nlogn)

Nhiệm vụ trọng tâm trong bài báo này là tìm hiểu thuật toán Brute forte và Plan sweep

2 Nội dung

2.1 Phát biểu bài toán:

Cho n (n>=2) điểm trong mặt phẳng 2 chiều được lưu trữ trong một mảng a với mỗi điểm thứ i có tọa độ (x,y) Vấn đề đặt ra là tìm một cặp điểm (p, q) gần nhau

nhất bằng cách dùng thuật toán Brute forte và, Plane sweep

Với hai đỉnh bất kỳ a(xa , ya), b(xb , yb) trong tập n đỉnh thì khoảng cách giữa chúng là

d(a,b)= (x bx a) 2  (y by a) 2

[1] Slide bài giảng PGS, TS Trần Cao Đệ Khoa công nghệ thông tinh và truyền thông – Đại Học Cần Thơ

2.2 Giải thuật Brute forte

Ý tưởng:

- Khởi tạo vị trí đỉnh đầu tiên i=1; Khoảng nhỏ nhất dmin=; p= a[1]; q= a[2]

- Duyệt qua từng đỉnh i trong tập n đỉnh

* Duyệt đỉnh j trong tập n-1 đỉnh \\ không tính đỉnh i Tính khoảng cách từ đỉnh i đến đỉnh j d(a[i],a[j]) Nếu dmin > d(a[i],a[j]) thì

dmin = d(a[i],a[j]) p= a[i]

q= a[j]

 Kết quả: (p, q) là cặp điểm ngắn nhất cần tìm

Thời gian thực hiện: 

n i

n n

i

) 1 (

 Độ phức tạp của Brute forte là O(n2)

Trang 5

2.3 Giải thuật Plane sweep

Ý tưởng:

Dùng 1 đường thẳng thẳng đứng, trượt từ trái sang phải từ điểm trái nhất 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 Khi quét ngang qua 1 điểm ta lưu trữ: Cặp điểm gần nhất trong tập hợp các điểm đã quét qua (a,b) với khoảng cách d(a,b) 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

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 Ở đây tổ chức mảng 2 chiều lưu trữ S

Hình chữ nhật dx2d chứa nhiều nhất là 6 điểm sao cho khoảng cách giữa hai điểm bất kỳ ít nhất là d 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

Sắp xếp các điểm theo x tăng dần, mục đích: 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

d

d

điểm đang trượt đến

d'

5

4

3

1

7 8 9

10

Trang 6

Đầu tiên trượt từ nút 1 qua phải gặp nút 2 thì đoạn 12 tìm thấy đầu tiên là đoạn gần nhất Tiếp theo trượt tới nút 3 thì đoạn 12 củng là đoạn gần nhất tương tự nút 4 và nút 5 Hình chữ nhật có chiều ngang d và hình tròn có bán kính d vẫn chưa thay đổi Cứ thế tiếp tục trượt hình chữ nhật với bán d mới sang điểm 7 …

Nhưng đến nút 6 thi trong phần giao giữa hình chữ nhật và hình tròn tâm nút 6

có chứa 2 điểm là 4 và 5 Khi đó giải thuật so sánh chiều dài giữa nút 64 với d

và nút 65 với d Xét thấy khoảng cách giữa 2 nút 6, 5 nhỏ hơn d nên cập nhật lại d là d’ và loại bỏ nút 1,2 ra, cập nhật lại nút 5,6 Nút 3 không xét vì nằm ngoài vùng giao

Thời gian:

– Dùng Quicksort 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)

Thời gian tổng cộng O(nlogn)

Trang 7

Rõ ràng chúng ta thấy chương trình sẽ tốn nhiều thời gian là lúc xét trong phần giao nói trên (có nút 4 và 5) nếu có nhiều nút thì phải duyệt hết các nút này Nếu trong tất cả các phần giao không có nút nào thì trượt đến nút cuối cùng sẽ tốn thời gian là O(n)

2.4 Cách thực nghiệm :

1 Các điểm nằm trong phần giao nhưng các khoàng cách giữa các cặp bằng nhau (tốt nhất <n)

2 Các điểm không trùng nhau và có khoảng cách từ trái qua phải từng đôi một tăng dần hoặc giảm dần (gần tốt nhất =n)

3 Các điểm nằm tập trung một phần nhiều về phía trái (tương đối)

4 Các điểm nằm tập trung một phần nhiều về phía phải (tương đối)

5 Thực hiện các điểm có tọa độ x nằm tập trung một phần nhiều ở giữa (tương đối)

6 Một cặp ngắn nhất nằm ở phía trái và các điểm còn lại tập trung nhiều về phía phải (khá lâu)

7 Một cặp ngắn nhất nằm ở phía phải và các điểm còn lại tập trung nhiều về phía trái (khá lâu)

8 Các điểm nằm trong phần giao của hình tròn và hình chữ nhật đầu tiên (xấu nhất >n)

2.5 Demo và code (Pascal):

Demo : detai.exe

Code:

PROGRAM TRUOTPHANG;

USES crt,graph;

TYPE mang=array[1 2,1 50] of integer;

FUNCTION KHOANGCACH(i1,i2:integer;a:mang):integer; Var xx,yy:integer;

Begin

xx:=a[1,i2]-a[1,i1];

yy:=abs(a[2,i2]-a[2,i1]);

khoangcach:=round(SQRT(xx*xx + yy*yy));

End;

PROCEDURE HCN(d,x,y_max,n:integer;a:mang);

Var d1,d2,i:integer;

Begin

clrscr;

setcolor(9);

for i:=x-d to x do

Trang 8

line(i,0,i,y_max);

delay(30);

end;

setcolor(4);

for i:=1 to n do

circle(a[1,i],a[2,i],1);

setcolor(9);

End;

VAR

mh,mode,canduoi_x,k,i,j,n,vt1,vt2,d,d1,d2,x,y,y_max,t emp:integer;

a:mang;

BEGIN

clrscr;

write('Nhap so diem tu 3 >50, n='); readln(n);

writeln;

mh:=VGA;

mode:=VGAHi;

initgraph(mh,mode,'c:\tp\BGI');

y_max:=0;

i:=1;

Repeat

{ writeln('Nhap nut thu ',i,':');

write(' Toa do x='); readln(x);

write(' Toa do y='); readln(y);

writeln; }

a[1,i]:=random(150);

a[2,i]:=random(150);

if y_max<a[2,i] then

y_max:=a[2,i];

i:=i+1;

Until i=n+1;

{Dung Quicksort sap xep de dat thou gian O(nlgn)}

For i:=1 to n-1 do

for j:=i+1 to n do

if a[1,i]>a[1,j] then

begin

temp:=a[1,i];

a[1,i]:=a[1,j];

a[1,j]:=temp;

end;

d:=khoangcach(1,2,a);

x:=a[1,2];

Trang 9

Vt2:=2;

canduoi_x:=1;

if n>2 then

Begin

i:=3;

Repeat

For j:=canduoi_x to i-1 do

{xet trong HCN}

Begin

k:=khoangcach(j,i,a);

if d>k then

begin

d:=k;

vt1:=j;

vt2:=i;

canduoi_x:=j;

end;

End;

x:=a[1,i];

HCN(d,x,y_max+d,n,a);

setcolor(6);

Circle(a[1,i],a[2,i],d);

setcolor(1);

line(a[1,vt1],a[2,vt1],a[1,vt2],a[2,vt2]); setcolor(9);

readln;

i:=i+1;

Until i>=n+1;

End;

Closegraph;

END

Trang 10

3 Kết quả thực nghiệm

Chương trình sẽ chạy lâu hơn nếu bố trí nhiều điểm tập trung

Ta có thể tổ chức lưu trữ theo dạng cây cân bằng, cây tìm kiếm nhị phân và để tìm một phần tử nào đó ta thực hiện giải thuật tìm kiếm 1DTreeRangeSearch với độ phức tạp là O(logn+s) với s là số phần tử trả về sau tìm kiếm, n là tổng

số phần tử Hoặc là tìm kiếm 2 chiều theo phạm vi FindAllInRange với độ phức tạp là O(nlogn) Hoặc là giải thuật tìm kiếm 2DTreeRangeSearch với độ phức tạp là O(log2n+s) với s là số phần tử trả về sau tìm kiếm, n là tổng số phần tử

Một cách khác, ta có thể tổ chức dữ liệu theo cây tứ phân với thời gian xây dựng cây là O(D*n), D là chiều sâu giới hạn của cây, n là tổng số phần tử Hoặc là cây K-D-Trees cũng là dạng 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 Việc thực hiện tìm kiếm trong trường hợp xấu nhất mất thời gian O(n) và trung bình là O(logn)

5 Kết Luận

Tùy theo việc bố trí các điểm trên mặt phẳng mà giải thuật chạy nhanh hay chậm cũng như giải thuật này và các giải thuật nói ở trên sẽ có thời gian chạy khác nhau Tuy nhiên chúng ta cũng nên lưu ý việc tổ chức lưu trữ dữ liệu như thế nào cho hiệu quả để giảm đi sự phức tạp từ việc xây dựng không gian lưu trữ và việc tìm kiếm

Như vậy rõ ràng giải thuật Plane sweep tối ưu hơn Brute forte

Mặt khác, dữ liệu nhiều hay ít thì các giải thuật cũng có thể chạy với thời gian khác nhau Ví dụ như tổ chức tìm kiếm theo cây nhị phân có thể đạt tới độ phức tạp là n2

Trang 11

Tài liệu tham khảo

1 Slide bài giảng Phân tích thiết kế giải thuật nâng cao - PGS, TS Trần Cao Đệ

- Khoa công nghệ thông tin và

truyền thông – Đại Học Cần Thơ

2 Phân tích và thiết kế giải thuật – Nguyễn Văn Linh – Đại Học Cần Thơ

Ngày đăng: 23/03/2015, 07:50

HÌNH ẢNH LIÊN QUAN

Hình chữ nhật dx2d chứa nhiều nhất là 6 điểm sao cho khoảng cách giữa hai điểm bất kỳ ít nhất là d - Brute Forte Và Plane Sweep Thuật Toán Nào Tối Ưu Trong Bài Toán Tìm Cặp Điểm Gần Nhất
Hình ch ữ nhật dx2d chứa nhiều nhất là 6 điểm sao cho khoảng cách giữa hai điểm bất kỳ ít nhất là d (Trang 5)

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