Nếu một điểm là một đỉnh của thân lồi


7

Bài tập là

Cho một tập hợp điểm và một điểm . Quyết định trong O (n) thời gian nếu p là một đỉnh của đa giác lồi được hình thành từ các điểm của S .SpO(n)pS

Vấn đề là tôi hơi bối rối với độ phức tạp thời gian O(n) . Giải pháp ngây thơ hơn sẽ là xây dựng đa giác lồi trong O(nlogn) và kiểm tra xem p có phải là một trong các đỉnh không.

Câu trả lời:


8

Gợi ý: điểm p là một đỉnh của hội trường lồi iff có hai nửa đường thẳng từ đó sao cho tất cả các điểm nằm trong góc do chúng tạo ra.

Đây là một ý tưởng cho một thuật toán dựa trên gợi ý này:

Thiết kế một thuật toán với hai biến qr (điểm đầu vào). Thuật toán sẽ kiểm tra từng điểm đầu vào và sẽ cập nhật qr sao cho tất cả các điểm được kiểm tra nằm trong wedge qpr .


@JeffE, có một sai lầm trong ý tưởng của tôi? Bạn có thể thấy nó nếu bạn di chuột qua phần bên dưới đoạn thứ hai.
Kaveh

Tôi đã hiểu rồi. (Tôi đã có một giải pháp khác trong tâm trí.)
JeffE

@JeffE, tôi nên viết một thay cho , sẽ sửa nó trong một giây. :)
Kaveh

2
@JeffE, tôi tò mò, ý tưởng của bạn là gì?
com

7

Vấn đề là tìm một đường thẳng đi qua và có tất cả các điểm khác trong ở một bên. Đây là một vấn đề lập trình tuyến tính hai chiều, vì vậy nó có thể được giải quyết trong thời gian bằng thuật toán hình học sách giáo khoa . Nhưng hãy để tôi mô tả một giải pháp khép kín.pSO(n)


Để đơn giản hóa ký hiệu, dịch tất cả các điểm sao cho là gốc và đặt . Sau đó, chúng tôi muốn xác định nếu có một số thực như vậy mà một trong hai (1)  cho tất cả hoặc (2)  cho tất cả . Trong trường hợp đầu tiên, là một đỉnh của thân trên của ; trong trường hợp thứ hai, là một đỉnh của thân dưới của . Tôi sẽ mô tả một thuật toán cho trường hợp đầu tiên; trường hợp khác là đối xứng.p(0,0)Q=S{p}my<mx(x,y)Qy>mx(x,y)QpSpS

Nếu bất kỳ điểm nào trong nằm ngay trên (nghĩa là, nếu bất kỳ điểm nào trong có tọa độ với một số ), thì không thể nằm trên thân trên. Thật dễ dàng để kiểm tra tình trạng này trong thời gian .QpQ(0,y)y>0pO(n)

Vì vậy, giả sử không có điểm nào trong nằm ngay trên . Các trục chia tách thành hai tập con (trái) và (phải). Các điểm trong có các tọa độ âm và các điểm trong có các tọa độ dương . (Điểm trực tiếp bên dưới không quan trọng; chỉ cần bỏ qua chúng.) Hãy để Bây giờ có ba trường hợp để xem xét:QpyQLRLxRxp

mL=min(x,y)Lyx,MR=max(x,y)Ryx,andm=mL+MR2.
  • Nếu , thì mọi điểm trong nằm ngay dưới đường , vì vậy là một đỉnh của thân trên.mL<MRQy=mxp

  • Nếu , thì dòng đi qua một điểm trong và một điểm trong , và không có điểm nào trong nằm trên đường thẳng đó. Vì vậy, nằm trên một cạnh của thân trên, nhưng nó không phải là một đỉnh.mL=MRy=mxLRQp

  • Nếu , thì ít nhất một điểm trong và ít nhất một điểm trong nằm ngay trên đường . Vì vậy, nằm ngay dưới thân trên.mL>MRLRy=mxp

Thật dễ dàng để tính và trong thời gian . Chúng tôi thực sự không cần phải tính .mLMRO(n)m

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.