Việc phát hiện các tiến trình số học của 3 lần có phải là 3SUM không?


20

Điều này được lấy cảm hứng từ một câu hỏi phỏng vấn .

Chúng tôi đang đưa ra một mảng các số nguyên a1,,an và phải xác định xem có khác biệt i<j<k đến nỗi

  • akaj=ajai
  • kj=ji

tức là các chuỗi {ai,aj,ak}{i,j,k} đều theo tiến trình số học.

Có một thuật toán dễ dàng cho việc này, nhưng việc tìm kiếm một thuật toán bậc hai có vẻ khó nắm bắt.O(n2)

Đây có phải là một vấn đề được biết đến? Chúng ta có thể chứng minh độ cứng 3SUM của điều này không? (hoặc có thể cung cấp một thuật toán bậc hai?)

Nếu bạn thích, bạn có thể giả sử và rằng một r + 1 - một rK đối với một số liên tục gọi K > 2 . (Trong bài toán phỏng vấn, K = 9 ).0<a1<a2<...<anar+1arKK>2K=9

Câu trả lời:


12

Đâ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(nf(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(nf(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!

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.