Tôi có một tập hợp các điểm 2D S
và tôi cần kiểm tra xem điểm đầu vào q
có ở trong hay bên ngoài thân lồi của S
.Điểm kiểm tra cho vị trí của nó so với thân lồi trong log (n)
Vì đó là về quyết định nhị phân, tôi đã suy nghĩ về mặt lý thuyết có thể đạt được O(log(N))
bằng cách sử dụng cây quyết định.
Tuy nhiên tôi không biết cách sắp xếp dữ liệu và cách thuật toán sẽ trông như thế nào để thực sự nhận được câu trả lời trong O(log(N))
.
Trong khi nghiên cứu với ý tưởng này trong tâm trí, tôi đã tìm thấy này:
Làm thế nào chúng ta có thể tìm thấy hai trường hợp, những nhanh hơn? Tìm kiếm nhị phân. Chỉ cần tìm kiếm x trong tọa độ đầu tiên của các điểm trong hai chuỗi. Nếu nó nằm trong chuỗi, bạn đã tìm thấy một đường ngang qua một đỉnh (và bạn không cần phải cẩn thận để biết loại đường nào, một trong hai). Nếu x không phải là tọa độ của một đỉnh trong chuỗi, hai giá trị gần nhất của nó là số cho bạn biết phân đoạn tia nào từ (x, y) có thể là . Vì vậy, chúng tôi có thể kiểm tra xem một điểm có trong đa giác lồi trong thời gian O (log n).
Nó chỉ ra rằng có cấu trúc dữ liệu có thể kiểm tra xem một điểm là trong một đa giác tùy ý (hoặc một số đa giác đó là in) trong cùng O (log n) thời gian ràng buộc. Nhưng chúng phức tạp hơn, vì vậy Tôi không có thời gian để mô tả chúng ở đây; Tôi sẽ nói về chúng tại một số điểm trong ICS 164.
(http://www.ics.uci.edu/~eppstein/161/960307.html)
Vì vậy, bạn có bất kỳ ý tưởng:
- Làm thế nào cấu trúc dữ liệu nên trông giống như để có được nó xuống trong
O(log(N))
? - Thuật toán sẽ như thế nào?
Xây dựng cây sẽ có ít nhất O (n log (n)), không? –
@MarkPing Chắc chắn, nhưng điều đó có thể được ghi nhớ. Cái tôi cần là 'log (N)' cho bản thân bài kiểm tra. – Michael
[Có thể trùng lặp?] (Http: // stackoverflow.com/questions/16750618/whats-an-effective-way-to-find-if-a-point-nằm-trong-con-lồi-hull-of-a-point-cl/16807944 # 16807944). Trong mọi trường hợp, tôi cung cấp một câu trả lời ở đó nên phù hợp với nhu cầu của bạn. – Nuclearman