Xác định tất cả các giao điểm giữa các đoạn thẳng trong S.. Phương pháp đơn giản nhất • Kiểm tra sự giao nhau của từng cặp đoạn thẳng... • Nếu là điểm mút dưới thì loại đoạn thẳng khỏi
Trang 1Bài toán Tìm kiếm hình học
Chương 2
Trang 2Nội dung trình bày
Xác định giao của các đoạn thẳng.
Xác định vị trí điểm.
Tìm kiếm theo khoảng.
Trang 3Giao của các đoạn thẳng
Bài toán:
• Cho tập S gồm n đoạn thẳng (đóng) trên mặt
phẳng Xác định tất cả các giao điểm giữa các đoạn thẳng trong S.
Phương pháp đơn giản nhất
• Kiểm tra sự giao nhau của từng cặp đoạn thẳng.
Trang 5Phương pháp dòng quét
• Khi đường thẳng quét gặp điểm sự kiện:
– Cập nhật trạng thái dòng quét
• Nếu là điểm mút trên thì thêm đoạn thẳng vào trạng thái
• Nếu là điểm mút dưới thì loại đoạn thẳng khỏi trạng thái.– Kiểm tra sự giao nhau
Trang 6Phương pháp dòng quét
• Kiểm tra sự giao nhau
– Sắp xếp các đoạn thẳng cắt
dòng quét từ trái sang phải
theo các điểm mút trên
– Kiểm tra sự giao nhau của 2
đoạn kề nhau Cụ thể là giữa
đoạn mới với nhiều nhất 2
không song song với trục Ox
và giao nhau tại p Giả sử không có đoạn thẳng thứ ba qua p Khi đó tồn tại điểm sự
sự giao nhau
Trang 7Xử lý điểm sự kiện
Điểm sự kiện là điểm mút trên của đoạn thẳng
Phát hiện giao điểm
Trang 8Xử lý điểm sự kiện
Điểm sự kiện là giao của 2 đoạn thẳng
Trang 9Xử lý điểm sự kiện
Điểm sự kiện là điểm mút dưới của đoạn thẳng
Trang 10Cấu trúc dữ liệu
Lưu hàng đợi sự kiện
• Sử dụng cây nhị phân tìm kiếm cân bằng Q.
- Chuyển đến điểm sự kiện kế tiếp.
- Chèn điểm sự kiện mới vào.
Trang 11Cấu trúc dữ liệu
Lưu trạng thái dòng quét
• Sử dụng cây nhị phân tìm kiếm cân bằng T
• Thứ tự sắp xếp: r và s là 2 đoạn thẳng thì r < s nếu và chỉ nếu
- rx1 < sx1 hoặc
- r x1 = sx1 và rx2 < sx2
Trang 12Thuật toán xác định giao các đoạn
Input: Tập các đoạn thẳng S trong mặt phẳng
Output: Tập các giao điểm và các cặp đoạn thẳng tương
ứng.
B1: Khởi tạo Q Chèn các điểm mút của các đoạn thẳng vào
Q Khi gặp điểm mút trên lưu lại đoạn thẳng tương ứng.
B2: Khởi tạo T là trạng thái rỗng.
B3: while Q ≠ {}
• Xác định điểm sự kiện p kế tiếp trong Q và xóa p;
• XulySukien(p);
Trang 13Thuật toán xử lý sự kiện
Trang 14Thuật toán xử lý sự kiện
B1: U(p) = {s ∈ S : đoạn thẳng có điểm mút trên là p}
B2:
• L(p) = {s ∈ T : đoạn thẳng có điểm mút dưới là p};
• C(p) = {s ∈ T : đoạn thẳng chứa p bên trong};
B3: if card(L(p) ∪ U(p) ∪ C(p)) > 1
• p là giao điểm của các đoạn L(p) ∪ U(p) ∪ C(p)
B4: T = T - L(p) ∪ C(p)
B5: T = T + U(p) ∪ C(p) Thứ tự các đoạn thẳng trong T ứng
với thứ tự các đoạn thẳng giao với dòng quét phía dưới p Nếu có đoạn song song với Ox thì có thứ tự là lớn nhất.
Trang 15Thuật toán xử lý sự kiện
B6: if U(p) ∪ C(p) = {}
B7: else
• s’ là đoạn ngoài cùng bên trái của U(p) ∪ C(p) trong T
• s” là đoạn ngoài cùng bên phải của U(p) ∪ C(p) trong T
Trang 16Tìm sự kiện cho s l , s r , p
If sl và sr giao phía dưới dòng quét hoặc phía trên
và bên phải p và giao điểm chưa xuất hiện trong Q
• Chèn giao điểm vào Q
Định lý (Độ phức tạp của thuật toán)
• Thời gian thực thi: O(nlogn + Ilogn), với I là số giao điểm.
• Không gian lưu trữ: O(n)
Trang 17Xác định vị trí điểm
q
S
Trang 19Tìm kiếm trên dãi
Trang 20Độ phức tạp
Với 2 lần tìm kiếm nhị phân:
• Tối đa 2n dãi cho đồ thị n cạnh.
• n cạnh của một dãi
thời gian thực thi là O(logn).
Không gian gồm:
• O(n) cho phân hoạch đồ thị thành 2n dãi.
• O(n) cho các cạnh trong một dãi.
Trang 22Phân hoạch dạng thang
– Gọi lề ngang trên và
dưới của mảnh ∆ của
T(S) là top(∆) và
bottom(∆).
Trang 23Phân hoạch dạng thang
Các trường hợp lề trái của mảnh ∆ của T(S)
T(S) của tập S gồm n cạnh có tối đa 6n+4 đỉnh và 3n+1 mảnh hình thang.
Trang 24Phân hoạch dạng thang
Mảnh thang liền kề:
Trang 25Cấu trúc dữ liệu
Phân hoạch dạng thang T(S)
Cấu trúc tìm kiếm D
Trang 27Thuật toán xác định vị trí điểm
Input: Tập các đoạn thẳng không giao nhau S và điểm q.
bởi si
với các mảnh thang mới
B7: Nếu i < n thì i = i + 1 Quay lại B4.
B8: Tìm vị trí của q thông qua D.
Trang 28Hiệu chỉnh T và D
Đặt Si = {s1, s2, …, si} T và D
• D ban đầu chỉ có 1 nốt lá là R
T(Si) được xây dựng từ T(Si-1)
∈ T(Si-1) chứa p.
• Nếu p có trong D thì p nằm trên
đường thẳng dọc đi qua một
x-nốt Ta xem như p nằm bên
phải x-nốt.
p
Trang 29Hiệu chỉnh T và D
Input: T(Si-1), D, si
Output: ∆0, ∆1, …, ∆k giao với si
B3: j = 0
Ngược lại, chuyển sang B6.
B5: j = j + 1 Quay lại B4.
B6: Trả về các ∆0, ∆1, …, ∆j
Trang 30Hiệu chỉnh T và D
Trang 31Hiệu chỉnh T(S) và D
Trang 32Hiệu chỉnh T và D
Quy tắc hiệu chỉnh D
• Gắn các x-nốt và y-nốt mới với các nốt lá tương ứng
Thuật toán xác định vị trí điểm bằng phân hoạch dạng thang T(S) của tập n đoạn thẳng không chéo nhau S có độ phức tạp:
• O(nlogn) thực thi để xây dựng T(S) và D
• O(n) không gian lưu trữ
• O(logn) thực thi xác định điểm