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 793 0
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 Đệ

Đ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

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 2 Dữ liệu nhiều chiều  Các giải thuật hình học liên quan tới dữ liệu không gian đa chiều. – 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) 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. 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ự  findAllInRange(k 1 ,k 2 ): trả về các phần tử thỏa: – k1 ≤ x ≤ k2  Dùng cấu trúc cây TKNP để lưu trữ các phần 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. 5 Giải thuật 1DTreeRangeSearch 1DTreeRangeSearch(k1,k2,v){ if v.isExternal(v) return ∅; if (k1 ≤ key(v) ≤ k2) { L= 1DTreeRangeSearch(k1,k2,T.leftChild(v)); R= 1DTreeRangeSearch(k1,k2,T.rightChild(v)); return L U {element(v)} U R; } else if (key(v) <k1) return 1DTreeRangeSearch(k1,k2,T.rightChild(v)); else return 1DTreeRangeSearch(k1,k2,T.leftChild(v)); } 68 2312 21 18 6142 55 49 9074 81 37 99 Cho k1=30, k2=80 Tìm kiếm 1DTreeRangeSearch(k1,k2,T.Root()) sẽ trả ra các nút nằm giữa hai nút ngoài màu đỏ ở trên. 68 2312 21 18 6142 55 49 9074 81 37 99  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. 8 Hiệu quả của giải thuật  Định lý: 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:  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) 9 Chứng minh  Không duyệt nút ngoài nào  Có nhiều nhất là 2h+1 nút biên  Mỗi khi duyệt nút trong v, tất cả các cây con T v gốc v cũng được duyệt và tất cả các nút của T v có trong kết quả tìm kiếm. – 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à j ≤ 2h. – Gọi si là số nút của cây Ti ta có tổng số nút phải duyệt là: ∑ j i=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) 10 Tìm kiếm 2 chiều theo phạm vi  Cho không gian hai chiều  Mỗi điểm là một cặp (x,y)  FindAllInRange(x 1 ,x 2 ,y 1 ,y 2 ): Tìm kiếm tất cả các cặp thỏa: – x1 ≤ x ≤ x2 – y1 ≤ y ≤ y2 [...]... (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 – 20 r Xử lí các điểm có tọa độ hạn chế (2 048 x2 048 ) 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 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 r3 r2 r4 r1 Ví dụ d a b k m Nút trong Nút ngoài 21 c e l i j f g h Hiệu quả cây tứ phân   Thiết kế một biên... tô giá 25tr 40 tr, tiêu thụ xăng 40 50km/lít Giải thuật – –  14  – – – 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... 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 5 54- Goodrich – – – O(logn) nút biên Mỗi nút phân phối (allocation) v duyệt 1 chiều mất O(lognv+sv), nv là số nút trên cây Tv (cấu trúc phụ) Có O(logn) nút allocation 2  Thời gian O(log n+s) 19 Cây tứ phân (Quadtrees)  Trong các bài toán... là số nút ngoài – 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! 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; – d KG d chiều, mỗi nút có 2 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... 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 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: Sự kiện Hành động Gặp đầu trái của đoạn ngang h Thêm h vào tự điển... phẳng (Plane sweep technique)  29 Kỹ thuật trượt/quét phẳng áp dụng vào nhiều bài toán hình học Ý tưởng: 1 chiều hóa bài toán 2 chiều 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 –  30  – Brute forte: xét n(n-1)/2 cặp, thời gian O(n )  Mỗi đọan thẳng thẳng đứng v, xét đường thẳng l(v) đi ngang qua v – 2 Bài toán hạn chế: cho n đoạn thẳng... cây tứ phân cho n điểm trong mặt phẳng là O(D*n), D là chiều sâu giới hạn của cây Tìm kiếm trên cây tứ phân     Tập S các điểm Giả sử câu truy vấn là hình chữ nhật A Kết quả tìm kiếm là tất cả các điểm thuộc S nằm trong A Tìm kiếm – – 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ả Nếu R ∩ A ≠ ∅: tìm kiếm đệ qui... Với mỗi nút phân phối: tìm trên cấu trúc phụ [y1,y2] Ví dụ minh họa Nút phân phối Nút biên Giải thuật tìm kiếm  2DTreeRangeSearch(x1,x2,y1,y2,v,t) – 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 16 2DTreeRangeSearch(x1,x2,y1,y2,v,t){ If T.isExternal(v)... s(p,pq) 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 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’ Hiệu quả tìm kiếm  Tìm kiếm điểm gần nhất – –  28 Trong trường hợp xấu nhất: O(n) Trung bình: O(logn) Nhiều cải tiến giải thuật rất có ý nghĩa Kỹ thuật trượt phẳng (Plane... 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 Ví dụ minh họa cây tìm kiếm 2 chiều theo phạm vi  Các phần tử (30,20), (15 ,40 ), . 1DTreeRangeSearch(k1,k2,T.leftChild(v)); } 68 2312 21 18 6 142 55 49 90 74 81 37 99 Cho k1=30, k2=80 Tìm kiếm 1DTreeRangeSearch(k1,k2,T.Root()) sẽ trả ra các nút nằm giữa hai nút ngoài màu đỏ ở trên. 68 2312 21 18 6 142 55 49 90 74 81 37. theo phạm vi  Các phần tử (30,20), (15 ,40 ), (35,2), (5,33), (20,50) 30 35 205 15 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 5033 13 Xây dựng cây TK 2 chiều. O(nlogn) – Thời gian xây dựng cũng là O(nlogn). 14 Tìm kiếm 2 chiều theo phạm vi FindAllInRange(x1,x2,y1,y2)  Tìm một xe mô tô giá 25tr 40 tr, tiêu thụ xăng 40 - 50km/lít.  Giải thuật – Tìm trên cấu

Ngày đăng: 17/04/2015, 15:22

Từ khóa liên quan

Mục lục

  • Slide 1

  • Dữ liệu nhiều chiều

  • Cây tìm kiếm phạm vi

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

  • Giải thuật 1DTreeRangeSearch

  • Slide 6

  • Slide 7

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

  • Chứng minh

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

  • Tổ chức dữ liệu tìm kiếm 2 chiều theo phạm vi

  • Ví dụ minh họa cây tìm kiếm 2 chiều theo phạm vi

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

  • Tìm kiếm 2 chiều theo phạm vi FindAllInRange(x1,x2,y1,y2)

  • Ví dụ minh họa

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

  • Slide 17

  • Slide 18

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

  • Cây tứ phân (Quadtrees)

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan