Khoảng cách trung bình tối đa giữa hai số trên nhiều mảng


8

Giả sử bạn có kcác mảng kích thước N, mỗi mảng chứa các giá trị duy nhất từ 1đến N.

Làm thế nào bạn tìm thấy hai con số trung bình cách xa nhau nhất?

Ví dụ, đưa ra các mảng:

[1,4,2,3]
[4,2,3,1]
[2,3,4,1]

Sau đó, câu trả lời sẽ là mục 12, bởi vì chúng cách nhau 2 khoảng trong hai mảng đầu tiên và cách nhau 3 số trong số cuối cùng.

Tôi biết một giải pháp O (kN ^ 2) (bằng cách đo khoảng cách giữa mỗi cặp số cho mỗi kmảng), nhưng có giải pháp nào tốt hơn không?

Tôi muốn thực hiện một thuật toán như vậy trong C ++, nhưng bất kỳ mô tả nào về giải pháp đều hữu ích.

Câu trả lời:


3

Sau khi chuyển đổi thời gian tuyến tính lập chỉ mục các số, bài toán này rút gọn để tính toán đường kính của một tập hợp các điểm liên quan đến khoảng cách L1. Thật không may, vấn đề này phải chịu lời nguyền của chiều.

Được

    1 2 3 4
1: [1,4,2,3]
2: [4,2,3,1]
3: [2,3,4,1]

chúng tôi tính toán

    1 2 3
1: [1,4,4]
2: [3,2,1]
3: [4,3,2]
4: [2,1,3]

và sau đó khoảng cách L1 giữa 12|1-3| + |4-2| + |4-1| = 8, đó là khoảng cách trung bình của chúng (tính theo vấn đề) lần k = 3.

Điều đó đang được nói, bạn có thể áp dụng một thuật toán lân cận gần nhất bằng cách sử dụng đầu vào ở trên làm cơ sở dữ liệu và hình ảnh của từng điểm trong cơ sở dữ liệu dưới N+1-vdạng truy vấn.


Tham chiếu này cho thấy một thuật toán ngẫu nhiên với thời gian chạy tuyến tính dự kiến ​​có thể được OP quan tâm.
hilberts_drinking_propet

@hilberts_drinking_propet Có thể hữu ích, nhưng chỉ với kích thước thấp.
David Eisenstat

Bạn có nghĩ rằng có thể kết hợp điều này với một cách tiếp cận heuristic được mô tả trong một câu trả lời khác không?
Magnus EF

@ MagnusE-F Có rất nhiều thuật toán lân cận gần nhất ngoài kia. Tôi đã sửa đổi câu trả lời của mình về cách giảm vấn đề này thành ANN.
David Eisenstat

1

Tôi có một đề nghị cho trường hợp tốt nhất . Bạn có thể làm theo một cách tiếp cận heuristic.

Chẳng hạn, Bạn biết rằng nếu N=4, N-1=3sẽ là khoảng cách tối đa và 1sẽ là tối thiểu. Khoảng cách trung bình là 10/6=1,66667 (tổng khoảng cách giữa các cặp trong mảng / số lượng cặp trong một mảng).

Sau đó, bạn biết rằng nếu hai số nằm trên các cạnh của k/2mảng (hầu hết các lần), thì nó đã ở trên đỉnh trung bình (> = 2khoảng cách), ngay cả khi chúng chỉ 1cách nhau trong các k/2mảng khác . Đó có thể là một giải pháp cho trường hợp tốt nhất trong O(2k)= O(k).


Đó dường như là một cách tiếp cận tốt. Trong trường hợp của tôi, N lớn hơn nhiều so với k và tôi nghĩ thuật toán heuristic sẽ hoạt động tốt
Magnus EF

Điều gì về trường hợp xấu nhất của thuật toán này? Có phải vẫn là O (k N ^ 2)?
Jérôme Richard

@ JérômeRichard chúng tôi đã không thay đổi thuật toán, chúng tôi chỉ thêm một heuristic rằng, nếu áp dụng, chỉ áp dụng cho một kịch bản tốt. Trong trường hợp xấu nhất, thuật toán chính sẽ giải quyết nó.
samthegolden
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.