Đây là một vấn đề mở.
Có thể một số dạng độ cứng 3SUM yếu có thể được chứng minh bằng cách điều chỉnh kết quả từ bài báo STOC 2010 của Mihai Pătrașcu " Hướng tới giới hạn đa thức cho các vấn đề động ". Đầu tiên, hãy để tôi xác định một chuỗi các vấn đề liên quan chặt chẽ. Đầu vào cho mỗi vấn đề là một mảng được sắp xếp gồm các số nguyên riêng biệt.A[1..n]
3SUM: Có các chỉ số riêng biệt sao cho A [ i ] + A [ j ] = A [ k ] ?i,j,kA[i]+A[j]=A[k]
Convolution3SUM: Có chỉ số sao cho A [ i ] + A [ j ] = A [ i + j ] không?i<jA[i]+A[j]=A[i+j]
Trung bình: Có các chỉ số riêng biệt sao cho A [ i ] + A [ j ] = 2 A [ k ] ?i,j,kA[i]+A[j]=2A[k]
ConvolutionAlusive: Có chỉ số sao cho A [ i ] + A [ j ] = 2 A [ ( i + j ) / 2 ] không? (Đây là vấn đề bạn đang hỏi về.)i<jA[i]+A[j]=2A[(i+j)/2]
Trong luận án tiến sĩ của tôi, tôi đã chứng minh rằng tất cả bốn người trong số những vấn đề này đòi hỏi thời gian trong một mô hình cây quyết định tính toán rằng chỉ cho phép truy vấn có dạng "Có α Một [ i ] + β Một [ j ] + γ Một [ k ] + δ tích cực, tiêu cực, hoặc không có?", trong đó α , β , γ , δ là số thực (không phụ thuộc vào đầu vào). Đặc biệt, bất kỳ thuật toán 3SUM nào trong mô hình này đều phải đặt câu hỏi "Is A [ iΩ(n2)αA[i]+βA[j]+γA[k]+δα,β,γ,δ lớn hơn, nhỏ hơn hoặc bằng A [ k ] ? "Ít nhất là Ω ( n 2 ) lần. Điều đó ràng buộc thấp hơn không loại trừ các thuật toán phụ trong một mô hình tính toán tổng quát hơn - thực sự, đó là có thể loạibỏ một số yếu tố nhật kýtrong các mô hình RAM số nguyên khác nhau. Nhưng không ai biết loại mô hình tổng quát nào sẽ giúp ích đáng kể hơn.A[i]+A[j]A[k]Ω(n2)
Sử dụng một giảm băm cẩn thận, Pǎtraşcu chứng minh rằng nếu 3SUM đòi hỏi thời gian dự kiến, đối với bất kỳ chức năng f , sau đó Convolution3SUM đòi hỏi Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) ) dự kiến thời gian. Vì vậy, thật hợp lý khi nói rằng Convolution3SUM "cứng 3SUM". Ví dụ: nếu Convolution3SUM có thể được giải trong thời gian O ( n 1.8 ) , thì 3SUM có thể được giải trong O (Ω(n2/f(n))fΩ(n2/f2(n⋅f(n)))O(n1.8) thời gian.O(n1.9)
Tôi chưa tìm hiểu chi tiết, nhưng tôi cá rằng một đối số song song ngụ ý rằng nếu Trung bình yêu cầu thời gian dự kiến , đối với bất kỳ chức năng f nào , thì ConvolutionAlusive yêu cầu Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) ) thời gian dự kiến. Nói cách khác, ConvolutionAlusive là "trung bình-cứng".Ω(n2/f(n))fΩ(n2/f2(n⋅f(n)))
Ω(n2)Ω(n2)
KO(nlogn)
B[0..Kn], where B[i]=1 if and only if the integer A[1]+i appears in the input array A. Compute the convolution of B with itself in O(KnlogKn)=O(nlogn) time using FFTs. The resulting array has a non-zero value in the jth position if and only if some pair of elements in A sum to 2A[1]+j. Thus, we can extract a sorted list of sums A[i]+A[j] from the convolution in O(n) time. From here, it's easy to solve Average or 3SUM in O(n) time.
But I don't know a similar trick for Convolution3SUM or ConvolutionAverage!