Chọn hai số tổng thành


9

Đây là một vấn đề hàng xóm gần nhất.

Số thực cho (rất lớn n !), Cộng với mục tiêu thực p , tìm một tôimột j mà SUM là gần gũi nhất với p . Chúng tôi cho phép hợp lý trước khi chế biến / lập chỉ mục của một 1 , ... , một n (lên đến O ( n log n ) ), nhưng ít truy vấn thời gian (cho p ), kết quả sẽ được trả lại rất nhanh (ví dụ, O ( log n ) thời gian).a1,,annpaiajpa1,,anO(nlogn)pO(logn)

(Ví dụ đơn giản: nếu chúng ta chỉ muốn SINGLE đó là gần nhất với p , chúng tôi sẽ sắp xếp một 1 , ... , một n ẩn, O ( n log n ) , sau đó làm tìm kiếm nhị phân lúc truy vấn, O ( log n ) ).aipa1,,anO(nlogn)O(logn)

Giải pháp không hiệu quả:

1) Sắp xếp ẩn, sau đó vào thời điểm truy vấn, bắt đầu từ cả hai đầu và di chuyển hai con trỏ vào bên trong ( http://bit.ly/1eKHHDy ). Không tốt, vì thời gian truy vấn O ( n ) .a1,,anO(n)

2) Sắp xếp ẩn, sau đó vào thời điểm truy vấn, mất mỗi một i và thực hiện tìm kiếm nhị phân cho một "bạn thân" giúp nó tổng hợp một cái gì đó gần với p . Không tốt, vì thời gian truy vấn O ( n log n ) .a1,,anaipO(nlogn)

3) Sắp xếp tất cả các cặp ẩn, sau đó làm tìm kiếm nhị phân. Không tốt, vì tiền xử lý O ( n 2 ) .(a1,,an)O(n2)

Cảm ơn!

a1,,anpk


O(n)O(lgn)

nn

Tôi không có bất kỳ lý do nào để tin rằng truy vấn có thể nhanh, nhưng nhiều kết quả hữu ích cho những người hàng xóm gần nhất (cây kd, băm nhạy cảm cục bộ, v.v.) có vẻ tốt đối với tôi. Một giải pháp gần đúng bằng cách sử dụng băm nhạy cảm cục bộ sẽ tốt cho sử dụng thực tế.
Kevin

Câu trả lời:


17

Điều này gần như chắc chắn là không thể.

P(n)Q(n)nP(n)+nQ(n)akai+ajakak

O(n2)Ω(n2)Ω(n2/polylogn)

Vì vậy, giả sử rằng phỏng đoán là chính xác, vấn đề của bạn hoặc yêu cầu thời gian tiền xử lý bậc hai (gần-) hoặc thời gian truy vấn tuyến tính (gần-).


2

Nếu bạn có thể sử dụng không gian không giới hạn và thời gian không giới hạn trong quá trình tiền xử lý, thì giải pháp sau đây đáp ứng yêu cầu của bạn:

  • {ai+aj:1ijn}O(n2)O(n2)

  • ai,ajai+ajpO(lgn)

Nếu giải pháp này không được chấp nhận, bạn cần suy nghĩ kỹ hơn các yêu cầu của mình và chỉnh sửa câu hỏi cho phù hợp.


Xin chào, và cảm ơn bạn! Nhưng giải pháp của bạn giống như giải pháp số 3 của tôi, đó là vấn đề do thời gian tiền xử lý O (n ^ 2). Trong trường hợp của tôi, n rất lớn (ví dụ: 1m) và tôi phải tránh các thao tác O (n ^ 2).
Kevin
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.