นี่เป็นปัญหาเปิด
อาจเป็นไปได้ว่ารูปแบบความแข็ง 3SUM ที่อ่อนแอบางรูปแบบสามารถพิสูจน์ได้โดยการปรับผลจากกระดาษ STOC 2010 ของ Mihai Pătrașcu ในหัวข้อ " สู่ขอบเขตพหุนามสำหรับปัญหาไดนามิก " ก่อนอื่นให้ฉันกำหนดลำดับของปัญหาที่เกี่ยวข้องอย่างใกล้ชิด อินพุตสำหรับแต่ละปัญหาคืออาร์เรย์ที่เรียงลำดับของจำนวนเต็มที่แตกต่างกันA[1..n]
3SUM:มีดัชนีที่แตกต่างกันคือเช่นที่ ?A [ i ] + A [ j ] = A [ k ]i,j,kA[i]+A[j]=A[k]
Convolution3SUM:มีดัชนีเช่นนั้นหรือไม่A [ i ] + A [ j ] = A [ i + j ]i<jA[i]+A[j]=A[i+j]
ค่าเฉลี่ย:มีดัชนีที่แตกต่างกันคือเช่นนี้ ?A [ i ] + A [ j ] = 2 A [ k ]i,j,kA[i]+A[j]=2A[k]
ConvolutionAverage:มีดัชนีไม่ที่ ? (นี่คือปัญหาที่คุณถาม)A [ i ] + A [ j ] = 2 A [ ( i + j ) / 2 ]i<jA[i]+A[j]=2A[(i+j)/2]
ในวิทยานิพนธ์ปริญญาเอกของฉันฉันพิสูจน์ว่าปัญหาทั้งสี่นี้ต้องใช้เวลาในรูปแบบการตัดสินใจแบบต้นไม้ตัดสินใจที่อนุญาตเฉพาะแบบสอบถามในรูปแบบ "Is positive, positive หรือ zero? "โดยที่เป็นจำนวนจริง (ที่ไม่ขึ้นอยู่กับอินพุต) โดยเฉพาะอย่างยิ่งอัลกอริทึม 3SUM ใด ๆ ในรุ่นนี้ต้องถามคำถาม "ใหญ่กว่าเล็กกว่าหรือเท่ากับ " อย่างน้อยครั้ง ขอบเขตล่างนั้นไม่ได้ออกกฎอัลกอริทึมย่อยในรูปแบบทั่วไปของการคำนวณ - แน่นอนว่ามันเป็นไปได้ที่จะกำจัดปัจจัยบันทึกบางอย่างα [ ผม] + β [ J ] + γ [ k ] + δ α , β , γ , δ [ ผม] + [ J ] [ k ] Ω ( n 2 )Ω(n2)αA[i]+βA[j]+γA[k]+δα,β,γ,δA[i]+A[j]A[k]Ω(n2)ในรุ่น RAM จำนวนเต็มต่างๆ แต่ไม่มีใครรู้ว่ารุ่นทั่วไปประเภทใดจะช่วยได้มากขึ้น
Pǎtraashingcuพิสูจน์แล้วว่าถ้า 3SUM ต้องการเวลาสำหรับฟังก์ชันใด ๆจากนั้น Convolution3SUM ต้องใช้เวลาที่คาดหวัง ดังนั้นจึงมีเหตุผลที่จะกล่าวได้ว่า Convolution3SUM นั้น "อ่อนแรง 3SUM ยาก" ตัวอย่างเช่นถ้า Convolution3SUM จะสามารถแก้ไขได้ในเวลาแล้ว 3sum จะสามารถแก้ไขได้ในเวลาf Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) ) O ( n 1.8 ) O ( n 1.9 )Ω(n2/f(n))fΩ(n2/f2(n⋅f(n)))O(n1.8)O(n1.9)
ฉันยังไม่เข้าใจรายละเอียด แต่ฉันพนันได้เลยว่าการโต้แย้งแบบขนานหมายความว่าถ้าค่าเฉลี่ยต้องการเวลาที่คาดไว้สำหรับฟังก์ชันใด ๆดังนั้น ConvolutionAverage ต้องใช้เวลาที่คาดหวัง กล่าวอีกนัยหนึ่ง ConvolutionAverage คือ "อ่อนปานกลาง - ยาก"f Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) )Ω(n2/f(n))fΩ(n2/f2(n⋅f(n)))
น่าเสียดายที่ไม่มีใครรู้ว่าค่าเฉลี่ยคือ (ถึงขั้นอ่อน) 3SUM-hard! ฉันสงสัยว่าเฉลี่ยเป็นจริงไม่ 3sum ยากถ้าเพียงเพราะขอบเขตล่างสำหรับการโหวตเป็นอย่างมากยากที่จะพิสูจน์กว่าขอบเขตล่างสำหรับ 3sumΩ(n2)Ω(n2)
นอกจากนี้คุณยังถามเกี่ยวกับกรณีพิเศษที่องค์ประกอบมากมายที่อยู่ติดกันแตกต่างกันโดยน้อยกว่าบางคนคงจำนวนเต็มKสำหรับ 3SUM และ Average ตัวแปรนี้สามารถแก้ไขได้ในเวลาโดยใช้การแปลงฟูริเยร์อย่างรวดเร็วดังนี้ (การสังเกตนี้เกิดจาก Raimund Seidel) KO(nlogn)
สร้างบิตเวกเตอร์ที่และถ้าหากจำนวนเต็มปรากฏในการป้อนข้อมูลอาร์เรย์ คำนวณการบิดของด้วยตัวเองในเวลาโดยใช้ FFT อาร์เรย์ส่งผลให้มีไม่ใช่ศูนย์ค่าในตำแหน่ง TH ถ้าหากคู่บางส่วนขององค์ประกอบในรวมไปJ ดังนั้นเราจึงสามารถแยกรายการที่เรียงลำดับของผลรวมจากบิดในเวลา จากที่นี่มันเป็นเรื่องง่ายที่จะแก้ปัญหาหรือเฉลี่ย 3sum ในเวลาB [ i ] = 1 A [ 1 ] + iB[0..Kn]B[i]=1A[1]+i B O ( K n เข้าสู่ระบบK n ) = O ( n log n ) เจ2 [ 1 ] + J [ ผม] + A [ j ] O ( n ) O ( n )ABO(KnlogKn)=O(nlogn)jA2A[1]+jA[i]+A[j]O(n)O(n)
แต่ฉันไม่รู้เคล็ดลับที่คล้ายกันสำหรับ Convolution3SUM หรือ ConvolutionAverage!