Tổng quát hóa vấn đề 3SUM (k-SUM)?


29

Bài toán 3SUM cố gắng xác định 3 số nguyên từ một tập S có kích thước n sao cho a + b + c = 0 .a,b,cSna+b+c=0

Người ta phỏng đoán rằng không có giải pháp nào tốt hơn phương trình bậc hai, tức là . Hoặc để đặt nó khác nhau: o ( n log ( n ) + n 2 ) .o(n2)o(nlog(n)+n2)

Vì vậy, tôi đã tự hỏi nếu điều này sẽ áp dụng cho bài toán tổng quát: Tìm số nguyên cho i [ 1 .. k ] trong tập S có kích thước n sao cho i [ 1 .. k ] a i = 0 .aii[1..k]Sni[1..k]ai=0

Tôi nghĩ bạn có thể làm điều này trong cho k 2 (thật đơn giản để khái quát thuật toán k = 3 đơn giản ). Nhưng có thuật toán tốt hơn cho các giá trị khác của k ?o(nlog(n)+nk1)k2k=3
k


tin tức / bài báo gần đây về 3SUM xem xét các giới hạn thấp hơn về độ phức tạp của cây quyết định của nó
vzn

Câu trả lời:


27

k -SUM có thể được giải quyết nhanh hơn như sau.

  • Cho chẵn k : Tính toán một danh sách được sắp xếp S của tất cả các tổng của các phần tử đầu vào k/2 . Kiểm tra xem S có chứa cả một số số x và phủ định của nó x . Thuật toán chạy trong thời gian O(nk/2logn) .

  • Đối với k lẻ : Tính toán danh sách được sắp xếp S của tất cả các tổng của (k1)/2 phần tử đầu vào. Đối với mỗi phần tử đầu vào a , kiểm tra xem S có chứa cả xax , cho một số số x . (Bước thứ hai về cơ bản là thuật toán thời gian O(n2) cho 3SUM.) Thuật toán chạy trong thời gian O(n(k+1)/2) .

Cả hai thuật toán đều tối ưu (ngoại trừ có thể cho hệ số log khi k chẵn và lớn hơn 2 ) cho bất kỳ k hằng trong một hạn chế yếu nhưng tự nhiên nhất định của mô hình tính toán cây quyết định tuyến tính. Để biết thêm chi tiết, xem:


stackoverflow.com/a/14737071/511736 đề xuất thuật toán O (n ^ 2) khi k = 4
Kowser

1
Băm là gian lận. Thuật toán được mô tả tại StackOverflow chỉ chạy trong thời gian O (n ^ 2) cho đầu vào số nguyên và chỉ với xác suất cao và chỉ khi bạn sử dụng hàm băm ngẫu nhiên thích hợp. Các thuật toán trong câu trả lời của tôi hoạt động trong mô hình RAM thực, chúng hoàn toàn có tính quyết định và giới hạn thời gian là trường hợp xấu nhất. Bạn cũng có thể tắt các yếu tố log trong cài đặt số nguyên bằng cách sử dụng "thủ thuật bit", nhưng điều đó hơi nhàm chán.
JeffE

12

-SUM yêu cầu thời gian n Ω ( d ) trừ khi k-SAT có thể được giải trongthời gian 2 o ( n ) cho bất kỳ hằng số k. Điều này đã được thể hiện trong mộtbài báocủa Mihai Patrascu và Ryan Williams (1).dnΩ(d)2o(n)

Nói cách khác, giả sử giả thuyết thời gian theo cấp số nhân , thuật toán của bạn là tối ưu cho đến một yếu tố không đổi trong số mũ (một yếu tố đa thức trong )n

(1) Mihai Patrascu và Ryan Williams. Về khả năng của thuật toán SAT nhanh hơn. Proc. Hội nghị chuyên đề ACM / SIAM lần thứ 21 về các thuật toán rời rạc (SODA2010)


3

Dưới đây là một vài quan sát đơn giản.

Đối với , bạn có thể làm điều đó trong Θ ( n ) thời gian bằng cách quét mảng cho một số không. Với k = 2 , bạn có thể làm điều đó mà không cần băm trong thời gian Θ ( n log n ) . Sắp xếp các mảng và sau đó quét nó. Đối với mỗi yếu tố tôi thực hiện tìm kiếm nhị phân cho - i . Đây kết quả trong tổng số phức tạp của Θ ( n log n ) . Đối với trường hợp k = n bạn có thể làm điều đó trong Θ ( n )k=1Θ(n)k=2Θ(nlogn)iiΘ(nlogn)k=nΘ(n) thời gian bằng cách tích lũy mảng và kiểm tra kết quả.

Để biết thêm một số tài liệu tham khảo, xem trang Dự án vấn đề mở cho 3SUM .


-1

Xem http://arxiv.org/abs/1407.4640

Một thuật toán mới để giải quyết vấn đề rSUM Valerii Sopin

Trừu tượng:

Một thuật toán xác định được trình bày để giải quyết vấn đề rSUM cho bất kỳ r tự nhiên nào với đánh giá bậc hai về độ phức tạp thời gian trong một số trường hợp. Về mặt số lượng bộ nhớ được sử dụng, thuật toán thu được cũng có thứ tự bậc hai. Ý tưởng của thuật toán thu được dựa trên việc không xem xét các số nguyên, mà là các bit liên tiếp của các số này trong hệ thống số nhị phân. Nó được chỉ ra rằng nếu tổng các số nguyên bằng 0, thì tổng các số được biểu thị bởi bất kỳ bit k liên tiếp nào của các số này phải đủ "gần" với 0. Điều này làm cho nó có thể loại bỏ các con số, mà một fortiori, không thiết lập giải pháp.

Đây là một cái gì đó mới trong vấn đề này.


1
Bạn có thể trích dẫn rõ ràng các kết quả từ bài viết có liên quan đến câu hỏi? (Dán bản tóm tắt có thể ổn, nếu toàn bộ bài viết có liên quan.) Bài đăng trên SE được cho là không chỉ là một liên kết.
FrankW

1
Vì nó là, câu trả lời này là một nhận xét (có khả năng hữu ích), không phải là một câu trả lời. Như vậy, nó sẽ phải chứa một số nội dung gốc, ví dụ: mô tả thuật toán của bạn bằng từ ngữ của riêng bạn. Bạn có muốn làm việc đó không? Tôi có thể chuyển câu trả lời của bạn thành một nhận xét nếu bạn không. (Tôi biết rằng bạn không thể nhận xét do đại diện của bạn.)
Raphael

Điều đó không giống như một bài báo đáng tin cậy. Yêu cầu "bậc hai phức tạp thời gian trong một số trường hợp" không phải là một tuyên bố hữu ích. Độ phức tạp thời gian là theo định nghĩa thời gian chạy trường hợp xấu nhất. Sắp xếp bong bóng chạy trong thời gian tuyến tính trong một số trường hợp, nhưng độ phức tạp thời gian của nó vẫn là bậc hai.
DW
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.