Thuật toán để tìm một dòng chia số lượng điểm bằng nhau


7

Gần đây tôi đã được yêu cầu trong một cuộc phỏng vấn để đưa ra một thuật toán phân chia một tập hợp các điểm trong một hệ tọa độ sao cho một nửa số điểm nằm ở một bên của dòng và phần còn lại ở phía bên kia.

Các điểm được đặt không đều và đường thẳng không được đi qua bất kỳ điểm nào.

Bất kỳ ai có thể đưa ra bất kỳ cách tiếp cận để giải quyết vấn đề? Phân tích thuật toán được đánh giá cao.

Gợi ý: Đếm số điểm, sử dụng trung bình.

Số lượng điểm được giả định là chẵn.


Tôi đoán điểm là tất cả trên một 2Máy bay D?
Aryabhata

Câu trả lời:


9

Một cách tiếp cận là chọn hướng "chung" (trong thực tế, hướng ngẫu nhiên), chiếu tất cả các điểm dọc theo hướng này và sau đó sử dụng thuật toán trung bình (dòng của bạn phải tương ứng với bất kỳ bản dịch nào nằm giữa hai trung vị). Nếu bạn chọn một hướng xấu thì các điểm có thể tụ lại với nhau, khiến chúng không thể tách chúng theo hướng đó. Tuy nhiên, nếu bạn chọn hướng "chung" thì điều này sẽ không xảy ra (giả sử rằng các điểm là khác biệt). Vì có các thuật toán trung bình thời gian tuyến tính, đây là mộtÔi(n)thuật toán. Sử dụng thuật toán quickselect ngẫu nhiên, bạn sẽ có được thuật toán thời gian tuyến tính thực tế.


Tôi cảm thấy điều này làm một công việc tốt hơn để giải thích cùng một ý tưởng. "hướng" thay vì "đường" khiến tôi bối rối.
Bernhard Barker
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.