Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
203,5 KB
Nội dung
HÌNH HỌC TÍNH TỐN 35.2 Xác định có cặp đoạn thẳng cắt không Bài toán: Cho tập đoạn thẳng mặt phẳng Xác định có cặp đoạn thẳng cắt hay không ª Để đơn giản, giả sử: – Không có đoạn thẳng thẳng đứng – Không có ba đoạn thẳng cắt điểm chung Giải thuật thô sơ ª Giải thuật thô sơ: Kiểm tra xem cặp đoạn thẳng có cắt hay không Thời gian chạy (n2), với n số đoạn thẳng Kỹ thuật quét ª Giải thuật hữu hiệu dùng kỷ thuật quét (sweeping): Dùng đưòng thẳng thẳng đứng quét từ trái sang phải xem xét thay đổi phần giao đường thẳng quét với đoạn thẳng – Đường thẳng quét (sweep line) ° Đường thẳng quét thẳng đứng, vị trí thời toạ độ x x Thứ tự đoạn thẳng ° Định nghóa thứ tự hoàn toàn đoạn thẳng cắt đường thẳng quét – Hai đoạn thẳng s1 s2 không cắt so sánh x đường thẳng quét vị trí x cắt hai đoạn thẳng s2 s1 – Nếu s1 s2 so sánh x giao điểm s1 với đường thẳng quét cao giao điểm s2 với đường thẳng quét đó, ta nói s1 s2 , ký hiệu s1 x s2 Thứ tự đoạn thẳng (tiếp) e d a g i b h c f r t u v w (b) (a) a rc a tb b tc a tc z b uc e đường v f f wquét e Mọi thẳng mà qua vùng xám có đoạn thẳng e f liên tiếp quan hệ Đoạn thẳng d không so sánh với đoạn thẳng khác hình (a) thứ tự Các cấu trúc liệu kỹ thuật quét – Đường thẳng quét ° Khi di chuyển đường thẳng quét, giải thuật trữ trì thông tin sau – Tình trạng đường thẳng quét (sweepline status): cho biết thứ tự đối tượng (đoạn thẳng) bị cắt đường thẳng quét với – Lịch biến cố (event-point schedule): dãy tọa độ x, từ trái sang phải, xác định vị trí dừng đường thẳng quét Các thao tác lên sweep-line status ª Chi tiết giải thuật hữu hiệu dùng kỷ thuật quét – Đường thẳng quét ° Khi di chuyển đường thẳng quét, giải thuật trữ trì thông tin sau – Tình trạng đường thẳng quét (sweepline status): Các thao tác lên T: ° INSERT(T, s): chèn đoạn thẳng s vào T ° DELETE(T, s): xoá đoạn thẳng s khỏi T ° ABOVE(T, s): trả đoạn thẳng s T ° BELOW(T, s): trả đoạn thẳng s T Event-point schedule – Lịch biến cố (event-point schedule): dãy tọa độ x, từ trái sang phải, xác định vị trí dừng đường thẳng quét ° Mỗi điểm đầu mút đoạn thẳng (của tập input S) điểm biến cố (event point), điểm mà thứ tự T thay đổi ° Lịch biến cố tónh xây dựng cách xếp điểm đầu mút đoạn thẳng theo thứ tự từ trái qua phải Xác định có cặp đoạn thẳng cắt ANY-SEGMENTS-INTERSECT(S) không T Sắp điểm đầu mút đoạn thẳng S theo thứ tự từ trái sang phải, breaking ties for mổi điểm p danh sách xếp điểm đầu mút if p điểm đầu mút bên trái đoạn thẳng s then INSERT(T, s) if (ABOVE(T, s) toàn cắt s) hay (BELOW(T, s) tồn cắt s) then return TRUE if p điểm đầu mút bên phải đoạn thẳng s then if hai ABOVE(T, s) BELOW(T, s) tồn ABOVE(T, s) cắt BELOW(T, s) 10 then return TRUE 11 DELETE(T, s) 12 return FALSE Thực thi ANY-SEGMENTS-INTERSECT e d a c f b a a b a c b d a c b d c b e d c b e d b thời gian Breaking ties ª Nếu xếp điểm đầu mút đoạn thẳng S từ trái sang phải mà có nhiều điểm có tọa độ x breaking ties sau – Các điểm đầu mút bên trái xếp trước điểm đầu mút bên phải a q b p p xếp trước q xếp điểm đầu mút dòng ANY-SEGMENTS-INTERSECT Tính đắn ª Theorem 35.1 (Tính đắn) Giải thuật ANY-SEGMENTS-INTERSECT chạy tập S trả TRUE có cắt giửa đoạn thẳng ª Chứng minh “”: xem mã ta thấy ANY-SEGMENTS-INTERSECT trả TRUE tìm thấy hai đoạn thẳng cắt “”: Sẽ chứng minh tồn hai đoạn thẳng cắt ANY-SEGMENTS-INTERSECT trả TRUE Tính đắn (tiếp) Giả sử tồn giao điểm Gọi p giao điểm bên trái nhất, gọi a b đoạn thẳng cắt p Tồn đường quét z mà a b trở nên liên tiếp thứ tự toàn phần Tồn điểm đầu mút q mà event point a b trở nên liên tiếp thứ tự toàn phần p a b z Có trường hợp: A) giải thuật xử lý q B) giải thuật không xử lý q Tính đắn (tiếp) q A) Trường hợp 1: đoạn thẳng a hay b chèn vào T, đoạn thẳng hay Các dòng 4-7 tìm thấy trường hợp q p q p p z p q z z z p q p z q z Tính đắn (tiếp) Trường hợp 2: đoạn thẳng a b T, đoạn thẳng chúng xóa Các dòng 8-11 tìm thấy trường hợp q p z Trong hai trường hợp, giải thuật tìm thấy p trả TRUE B) Nếu q không giải thuật xử lý, có nghóa giải thuật quay trước xử lý xong tất event points Vậy giải thuật tìm thấy giao điểm trả TRUE Phân tích ANY-SEGMENTS-INTERSECT ª Thời gian chạy – Giả sử tập đoạn thẳng S gồm có n đoạn thẳng Dùng cấu trúc liệu thích hợp (ví dụ: dựa nhị phân cân bằng) để thực T cho thao tác lên T tốn O(lg n) thời gian – Thời gian chạy giải thuật ANY-SEGMENTSINTERSECT gồm ° Dòng 1: O(1) thời gian ° Dòng 2: O(n lg n) thời gian ° Vòng lặp for: O(n lg n) thời gian Vậy thời gian chạy tổng cộng giải thuật O(n lg n) 35.4 ª Tự đọc Tìm bao lồi 35.4 ª Tự đọc Tìm cặp điểm gần ... thô sơ ª Giải thuật thô sơ: Kiểm tra xem cặp đoạn thẳng có cắt hay không Thời gian chạy (n2), với n số đoạn thẳng Kỹ thuật quét ª Giải thuật hữu hiệu dùng kỷ thuật quét (sweeping): Dùng đưòng... – Lịch biến cố (event-point schedule): dãy tọa độ x, từ trái sang phải, xác định vị trí dừng đường thẳng quét Các thao tác lên sweep-line status ª Chi tiết giải thuật hữu hiệu dùng kỷ thuật quét... mút dòng ANY-SEGMENTS-INTERSECT Tính đắn ª Theorem 35.1 (Tính đắn) Giải thuật ANY-SEGMENTS-INTERSECT chạy tập S trả TRUE có cắt giửa đoạn thẳng ª Chứng minh “”: xem mã ta thấy ANY-SEGMENTS-INTERSECT