Khoảng cách ngắn nhất giữa một điểm trong A và một điểm trong B


9

Cho hai tập hợp AB mỗi tập hợp chứa n điểm khác nhau trong mặt phẳng, tính khoảng cách ngắn nhất giữa một điểm trong A và một điểm trong B , tức là min { dist(p,q) | pAqB } .

Tôi không chắc mình có đúng không, nhưng vấn đề này rất giống với các vấn đề có thể được giải quyết bằng lập trình tuyến tính trong hình học tính toán. Tuy nhiên, việc giảm xuống LP không đơn giản. Ngoài ra, vấn đề của tôi có vẻ liên quan đến việc tìm ra quy định mỏng nhất giữa hai tập hợp điểm rõ ràng có thể được giải quyết bằng LP trong O(n) trong không gian 2 chiều.


4
Câu hỏi ở đây là gì?
Raphael


Tôi không phải là chuyên gia nhưng thường là học máy, trong đó điểm này là dữ liệu, các bộ hoạt động tốt hầu hết thời gian và được nhóm lại với nhau, vì vậy các thuật toán như đề xuất của @Pedro hoạt động tốt.
chazisop

2
"Điều này rõ ràng có thể được giải quyết bằng LP trong O (n) trong không gian 2 chiều" - Tôi tự hỏi điều gì đã thúc đẩy tuyên bố này. "Lập trình tuyến tính" nói chung không thể giải được trong thời gian tuyến tính; "tuyến tính" đề cập đến một cái gì đó khác. Vậy LP có hình thức đặc biệt không?
Raphael

Câu trả lời:


4

Tôi có một giải pháp có vẻ hơi phức tạp, nhưng sẽ hiệu quả hơn so với tìm kiếm vũ phu ngây thơ :O(n2)

  1. hãy là trục giữa trung tâm của khối lượng của AB .vAB
  2. Sắp xếp các điểm theo B dọc theo trục này theo thứ tự giảm dần và tăng dần, dẫn đến các chuỗi a 0 , a 1 , ..., a nb 0 , b 1 , ..., b n .ABa0a1anb0b1bn

Phần còn lại là mã giả để làm cho nó rõ ràng hơn:

d = infinity.
for j from 1 to n
    if (b_1 - a_j) along v > d then break endif
    for k from 1 to n
        if (b_k - a_j) along v > d then
            break
        else
            d = min( d , ||b_k - a_j|| )
        endif
    enddo
enddo

vdbkajvbkaj

Trong trường hợp xấu hơn, đây vẫn là , nhưng nếu và tách biệt tốt, thì nó sẽ nhanh hơn thế nhiều, nhưng không tốt hơn , được yêu cầu để phân loại.O(n2)ABO(nlogn)

Cập nhật

Giải pháp này là không có nghĩa là kéo ra khỏi một chiếc mũ. Đây là trường hợp đặc biệt của những gì tôi sử dụng trong mô phỏng hạt để tìm tất cả các cặp hạt tương tác với quá trình tạo không gian. Công việc của riêng tôi giải thích vấn đề chung hơn là ở đây .

Đối với đề xuất sử dụng thuật toán quét dòng đã sửa đổi, mặc dù đơn giản theo trực giác, tôi không tin rằng đây là trong khi các bộ tách rời được xem xét. Điều tương tự cũng xảy ra với thuật toán ngẫu nhiên của Rabin.O(nlogn)

Dường như không có nhiều tài liệu liên quan đến vấn đề cặp gần nhất trong các tập hợp rời rạc, nhưng tôi đã tìm thấy điều này , điều này không khẳng định rằng nó nằm dưới , và điều này , dường như không để đưa ra bất kỳ tuyên bố về bất cứ điều gì.O(n2)

Thuật toán ở trên có thể được xem là một biến thể của quét mặt phẳng được đề xuất trong bài báo đầu tiên (Shan, Zhang và Salzberg), nhưng thay vì sử dụng -axis và không sắp xếp, trục giữa các bộ được sử dụng và các bộ được dịch chuyển theo thứ tự giảm dần / tăng dần.x


2
@Pedro: Xin lỗi tôi đã không bình luận sớm hơn (không có thời gian tại thời điểm đó). Lý do tôi đánh giá thấp câu trả lời của bạn là vì đó là một câu trả lời tồi và không nên đứng đầu. Đây thực sự là một vấn đề nổi tiếng trong hình học tính toán với trường hợp xấu nhất O (n log n). Một câu trả lời tốt sẽ chỉ ra vấn đề đã biết (có thể có tham chiếu) và các giải pháp phổ biến, bao gồm: sử dụng cây kd và kiểm tra nguyên tố, thuật toán quét, v.v. Ý tưởng chung nên là tiền xử lý trong cấu trúc có trật tự và sử dụng . Nhìn vào trường hợp 1D - rõ ràng hơn O (n log n) ở đó.
ex0du5

2
@ ex0du5: Nghe có vẻ như bạn nên đăng câu trả lời của riêng mình! Lưu ý rằng "có một câu trả lời tốt hơn" thường không phải là một lý do chính đáng để hạ thấp; biện pháp này nên được dành riêng cho các câu trả lời sai, spam và được định dạng rất tệ. Pedro là không. Xem thêm ở đây để có ấn tượng rằng một số người nghĩ rằng nên được đưa ra trước khi downvote.
Raphael

1
@Raphael: Tôi không trả lời vì có một câu trả lời công bằng và tôi không có thời gian để tra cứu tài liệu tham khảo. Đối với tài liệu tham khảo của bạn về cách downvote, đó là một thuật toán khủng khiếp cho các trang web này! Sinh viên CS đặc biệt nên hiểu tầm quan trọng của việc không mất mục tiêu cho chủ nghĩa hình thức. Mục tiêu của việc bỏ phiếu là chuyển câu trả lời sang một bảng xếp hạng sẽ hướng dẫn những học sinh sau này có cùng vấn đề với những câu trả lời hữu ích nhất. Thuật toán của tôi để bỏ phiếu làm điều đó. Đó là algo: rõ ràng là không. Điều này có thể được thảo luận trên một meta nếu bạn thích, nhưng khi trưởng thành, chúng ta nên sử dụng quyền hạn của mình cho tốt, tôi nghĩ vậy.
ex0du5

1
@ ex0du5: Bây giờ bạn dường như có một chút thời gian trên tay. Bạn thực sự có thể chỉ ra rằng trường hợp này thực sự là một "vấn đề nổi tiếng với trường hợp xấu nhất "? Ôi(nđăng nhậpn)
Pedro

1
@ ex0du5: Trên thực tế, tìm kiếm hàng xóm gần nhất, ví dụ: sử dụng cây kd , chỉ có độ phức tạp trung bình O (logn) . Vì vậy, chúng tôi trở lại một hình vuông.
Pedro

4

Bạn có thể điều chỉnh thuật toán quét dòng "cặp gần nhất" là .Ôi(nđăng nhậpn)

Thay đổi duy nhất bạn sẽ phải làm là bỏ qua các cặp thuộc cùng một bộ.

Chỉnh sửa: Điều này thực sự không đơn giản (hoặc thậm chí có thể) như tôi đã mô tả. Xem ý kiến ​​để thảo luận.


2
Chỉ cần một nhận xét, người ta cũng có thể điều chỉnh thuật toán chia và chinh phục cổ điển cho các cặp gần nhất cũng chạy trong ; xem thêm Wikipedia . O(nlogn)
rizwanhudda

1
Đối với thuật toán thời gian tuyến tính ngẫu nhiên, xem ví dụ Rabin lật một đồng xu trên blog của Lipton.
Juho

3
Bạn có thể nói rõ hơn một chút về cách bạn sẽ thực hiện điều này cho các tập hợp rời rạc, đặc biệt là liên quan đến việc duy trì ràng buộc không? O(nlogn)
Pedro

-1 cho sự không chính xác. Các thuật toán cặp linesweep gần nhất bạn liên kết dựa trên các thiết lập được sắp xếp chứa các yếu tố, nhưng trong trường hợp của các tập hợp không giao nhau, thiết lập này bắt đầu ra chứa n yếu tố, vì vậy nó không còn trong O ( n log n ) , ít nhất không phải trong trường hợp xấu nhất O(1)nÔi(nđăng nhậpn)
Pedro

1
@Pedro: Tại sao nó sẽ lớn hơn? Nếu bất cứ điều gì, tập hợp các điểm ứng cử viên hiện tại sẽ thu hẹp.
Raphael

4

Ý tưởng trong các vấn đề như thế này là tạo ra một cấu trúc có trật tự từ một trong các bộ cho phép truy vấn hiệu quả của Hàng xóm gần nhất. Bài báo cổ điển trình bày cấu trúc truy vấn O (log n) cho kích thước tùy ý là:

Shamos và Hoey trên các giải pháp Voronoi

Một số phân vùng không gian khác dựa trên các ý tưởng từ các tàu của Delauney đã được tạo ra kể từ đó, và chúng cũng chuyển sang một loạt các mô tả quét không gian con. Lưu ý rằng phương pháp Voronoi cũng sẽ nằm trong mô tả phân chia và chinh phục chung do phân vùng mặt phẳng tạo ra bước xây dựng O (n log n).

Vì vậy, giải pháp cơ bản cho vấn đề này là:

  1. Đặt A và xây dựng cấu trúc truy vấn Hàng xóm gần nhất hiệu quả mà bạn chọn. Bước xây dựng này là O (n log n) [xem định lý 4].
  2. Đối với mỗi phần tử trong B, cấu trúc truy vấn A cho hàng xóm gần nhất. Mỗi truy vấn là O (log n) [xem định lý 15, thứ nguyên cố định], vì vậy tổng thời gian truy vấn cho tất cả các điểm trong B là O (n log n).
  3. Khi kết quả cho điểm gần nhất trong A đến mỗi B được lấy ra, hãy đặt nó vào một cấu trúc được sắp xếp theo khoảng cách. Đây là O (log n) chèn từng kết quả hoặc O (n log n) cho tất cả.
  4. Khi tất cả B đã được xem xét, bạn có thể nhanh chóng (O (1)) lấy điểm B trong cấu trúc được sắp xếp với khoảng cách lân cận nhỏ nhất đến một điểm trong A.

Như người ta có thể thấy khi nhìn vào độ phức tạp của từng bước, tổng độ phức tạp là O (n log n). Đối với người đọc hiện đại không nhìn vào các bài báo cổ điển, điều này được đề cập trong nhiều sách thuật toán, ví dụ "Hướng dẫn thiết kế thuật toán" của Skiena.


1
"Chẳng hạn, giải pháp của Artium có thể được viết dưới dạng này và hoàn toàn hợp lệ." - tốt, những gì bạn đề xuất ở đây không còn là thuật toán quét (thuần túy) nữa, vì vậy tôi không biết về điều đó.
Raphael

@Raphael: Chắc chắn rồi. Các thuật toán quét tiền xử lý các điểm thành một cấu trúc có trật tự như được mô tả ở đây. Tôi thậm chí đã liên kết với Thuật toán của Fortune theo câu trả lời của anh ấy, cho thấy thuật toán quét chỉ là một ví dụ của thuật toán Voronoi. Lý do tôi giữ giải pháp chung cho cấu trúc truy vấn là vì có một số lượng lớn các cơ chế hình học đã được phát triển cho việc này.
ex0du5

B

1

Tôi không chắc mình có đúng không, nhưng vấn đề này rất giống với các vấn đề có thể được giải quyết bằng lập trình tuyến tính trong hình học tính toán. Tuy nhiên, việc giảm xuống LP không đơn giản. Ngoài ra, vấn đề của tôi có vẻ liên quan đến việc tìm ra quy định mỏng nhất giữa hai bộ điểm rõ ràng có thể được giải quyết bằng LP trong không gian 2 chiều.

Ôi(n*đăng nhậpn)

Chúng tôi sẽ giảm trường hợp của vấn đề phân biệt phần tử E thành C.

  • S= ={một1,một2,một3,...,mộtn}
  • ε
  • {(mộtTôi,0):1Tôin}B= ={(mộtTôi+ε):1Tôin}
  • Ôi(n)
    • Sε

Ôi(n*đăng nhậpn)

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.