thuật toán cho vấn đề hiển thị phân đoạn rời rạc


7

Hãy xem xét chúng tôi có phân đoạn khác nhau và một điểm không nằm trên bất kỳ phân khúc nào. Tôi muốn tìm một thuật toán để kiểm tra những phân đoạn có thể nhìn thấy từ . Một bộ phận là có thể nhìn thấy từ nếu nó có một điểm đó là có thể nhìn thấy từ .nPO(nlogn)PPP

Ý tưởng của tôi là sử dụng một nửa dòng quét với một điểm cuối trên , sắp xếp các điểm theo chiều kim đồng hồ theo độ và bắt đầu từ điểm cuối trên đoạn có thể nhìn thấy gần nhất (mà tôi không biết cách tìm), xoay và phát hiện một phân đoạn có thể nhìn thấy và một số có thể vô hình tại một thời điểm. Tất cả những gì tôi có thể nghĩ là cho đến nay. Bất cứ ai cũng có thể đề xuất một thuật toán .PÔi(n2)Ôi(nđăng nhậpn)

Câu trả lời:


3

Chúng ta có thể giả định P là điểm gốc (0,0).

  1. Liệt kê các điểm cuối của tất cả các phân đoạn, thể hiện chúng ở tọa độ cực (θ,ρ)[0,2π)×[0,) và sắp xếp chúng theo mức độ của họ.
  2. Hãy tưởng tượng có một tia từ P chỉ về bên phải, chúng tôi quét nó một vòng (bằng cách thay đổi dần hướng của nó α từ 0 đến 2π). Để choR(α) biểu thị tia từ P định hướng α. Chúng tôi tự hỏi những phân khúc là gìR(α) lượt truy cập, và thứ tự của họ trên R(α).
  3. Tìm ra tất cả các phân khúc hit R(0)và sắp xếp chúng theo thứ tự của chúng trên R(0). Lưu trữ chúng trong cây tìm kiếm nhị phân cân bằng (ví dụ cây đỏ-đen).
  4. Lặp lại các điểm chúng tôi tìm thấy (và sắp xếp) trong bước 1: Mỗi điểm (θ,ρ) chỉ ra một đoạn sẽ bắt đầu / dừng đánh tia R(α) khi nào α tăng lên θ. Cập nhật cây tìm kiếm nhị phân cho phù hợp.
  5. Các phần tử từng là phần tử nhỏ nhất trong cây tìm kiếm nhị phân là các phân đoạn hiển thị từ P.

Thật dễ dàng để kiểm tra xem thời gian chạy của thuật toán trên là Ôi(nđăng nhậpn).


Cảm ơn giải pháp. Tôi có một nghi ngờ về bước thứ 3 và 4. Làm thế nào để chúng ta quản lý lặp trên tất cả các điểm và kiểm tra giao lộ vớiR(α)'tội O(nlogn)?
VahidM

Đối với bước thứ 3, bạn có thể liệt kê các phân đoạn để kiểm tra xem chúng có trúng hay không R(0), (cái này mất O(n)thời gian); sắp xếp chúng theo điểm giao nhau của chúng trênR(0), (cái này mất Ôi(nđăng nhậpn)thời gian).
Tianren Liu

@VahidM Cho bước thứ 4. Chúng tôi không lặp đi lặp lại tất cả các điểm để tìm ra ai giao nhau vớiR(α). Ví dụ: giả sử(θ,ρ)là một điểm cuối của một phân khúc. Không chính thức, chúng tôi đểθ+ (θ-) biểu thị một mức độ lớn hơn một chút (nhỏ hơn) θ. Sau đó, chúng tôi biết các phân khúcR(θ+) giao nhau với gần giống như các phân khúc R(θ-)giao nhau với. Chúng chỉ khác nhau về phân khúc liên quan đến(θ,ρ). Vì vậy, chúng tôi biết tập hợp các phân khúc hitR(θ-), chúng tôi có thể sửa đổi nó trong Ôi(đăng nhậpn) thời gian để nó trở thành tập hợp các phân đoạn R(θ+).
Tianren Liu

1

Chúng ta có thể thực hiện quét đường xuyên tâm để giải quyết vấn đề -

Sắp xếp các điểm cuối của các đoạn đường ghi góc của đường nối P và điểm cuối Q làm, phá vỡ mối quan hệ wrt khoảng cách từ P. Bây giờ khi chúng tôi quét triệt để (theo chiều kim đồng hồ) duy trì hai loại sự kiện 'mở' và 'đóng' tương ứng với việc mở và đóng một số phân đoạn dòng mới. Theo dõi xem có bao nhiêu phân đoạn dòng 'hoạt động' tại bất kỳ thời điểm nào ('hoạt động' có nghĩa là chúng tôi đã gặp điểm cuối tương ứng với sự kiện 'mở' của phân đoạn dòng nhưng chúng tôi chưa gặp điểm cuối khác trong quét chưa). Nếu tại bất kỳ thời điểm nào chúng ta có chính xác một phân đoạn dòng 'hoạt động', thì phân khúc này có thể nhìn thấy từP.

Chúng ta nên cẩn thận rằng khi chúng ta bắt đầu quét, chúng ta nên luôn luôn bắt đầu tại một số sự kiện 'mở'.

Sẽ có 2ncác sự kiện như vậy và theo dõi số lượng phân đoạn hoạt động có thể được thực hiện trong thời gian không đổi trên mỗi phân đoạn (thông qua bảng băm hoặc thời gian logarit bằng cách sử dụng BST cân bằng). Do đó bước chiếm ưu thế trong thuật toán là sắp xếpÔi(n) thời gian theo yêu cầu.

Như với tất cả các vấn đề hình học tính toán, có thể có một số trường hợp góc mà tôi đã bỏ qua nhưng ý tưởng chung là nếu tại một thời điểm nào đó trong quá trình quét đường xuyên tâm, nếu chúng ta có chính xác một đoạn đường hoạt động, thì nó có thể nhìn thấy từ P là mấu chốt để giải quyết vấn đề này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.