การนับจำนวนผลรวมจากอาร์เรย์ย่อยที่ต่อเนื่องกันของอาร์เรย์


12

เราได้รับอาร์เรย์กับทั้งหมดa[1n]a[i]>0

ตอนนี้เราต้องการค้นหาจำนวนผลรวมที่แตกต่างจาก subarrays ของมัน (ที่ subarray เป็นช่วงต่อเนื่องของอาร์เรย์คือสำหรับ , ผลรวมคือผลรวมของทั้งหมด องค์ประกอบของ subarray) ตัวอย่างเช่นถ้าแล้วคำตอบคือ 4: เราสามารถสร้าง1,2,3,4a[jk]j,ka=[1,2,1]1,2,3,4

ฉันรู้วิธีการนับจำนวนของจำนวนเงินที่แตกต่างกันในเวลาO(n2)

ยิ่งกว่านั้นฉันได้ตระหนักว่านี่คล้ายกับปัญหาคลาสสิคที่เราต้องการค้นหาจำนวนสตริงย่อยที่แตกต่างกันของสตริง ฉันกำลังคิดถึงความเป็นไปได้ในการสร้างอาเรย์ต่อท้ายและแก้ไขในลักษณะที่คล้ายกัน (ในเวลา ) แต่ฉันไม่สามารถหาวิธีแก้ไขได้ที่นี่ ตัวอย่างเช่นถ้าเราใช้ส่วนต่อท้ายสำหรับเราจะได้รับ 5 กรณีแทนที่จะเป็นสี่ที่ยอมรับได้ เป็นไปได้ที่จะทำเช่นนี้โดยใช้อาร์เรย์ต่อท้ายหรือฉันคิดผิดทิศทาง?O(n)a=[1,2,1]

นอกจากนี้ยังมีอีกหนึ่งทิศทางที่ฉันคิดอยู่แบ่งและพิชิต เช่นถ้าฉันแบ่งอาร์เรย์ออกเป็นสองส่วนทุกครั้งจนกว่าจะลดลงเป็นองค์ประกอบเดียว องค์ประกอบเดียวสามารถมีหนึ่งผลรวม ทีนี้ถ้าเรารวมสององค์ประกอบเดียวเข้าด้วยกันมันสามารถทำได้สองวิธี: ถ้าทั้งสองช่วงมีองค์ประกอบเดียวกันเราจะได้รับผลรวม 2 อันที่แตกต่างกันหรือถ้าทั้งสองมีองค์ประกอบต่างกัน แต่ฉันไม่สามารถที่จะพูดถึงเรื่องนี้สำหรับการรวมอาร์เรย์ที่มีความยาวมากกว่า 1 มันเป็นไปได้ไหมที่จะรวมอาร์เรย์ขนาดสองม. เข้ากับคำตอบใน ?O(m)


แม้ว่าฉันจะไม่เห็นวิธีที่คุณสามารถหาวิธีแก้ปัญหาของคุณได้ในทันที แต่โครงสร้างของปัญหา Subarray สูงสุดนั้นคล้ายกับปัญหาที่คุณอธิบายและมีวิธีแก้ปัญหาการหารและพิชิตที่ทำงานในn) O(n lg n)
Isaac Kleinman

ฉันขอแนะนำให้เริ่มต้นด้วยปัญหาต่อไปนี้: มันยากแค่ไหนที่จะตัดสินใจว่าจะมีสองช่วงด้วยผลรวมเท่ากันหรือไม่ มันเป็นการทดลองเพื่อพิสูจน์ความแข็ง 3SUM ของปัญหานี้ แต่จนถึงตอนนี้ฉันยังไม่สามารถทำได้
Yuval Filmus

คำตอบ:


2

คุณเกือบจะแน่นอนไม่สามารถรับได้ดีกว่าในกรณีที่เลวร้ายเนื่องจากจำนวนของผลรวมที่แตกต่างกันสามารถอยู่ใน2)O(n2)Θ(n2)

พิจารณาเช่นอาร์เรย์n] ที่นี่ subarrays ที่ต่อเนื่องกันมีผลรวมแตกต่างกัน[1,2,4,8,,2n]n(n+1)2


"เกือบแน่นอน" เกิดจากความจริงที่ว่าปัญหาไม่ต้องการค่าของผลรวมเป็นผลผลิต อย่างไรก็ตามฉันไม่คิดว่าสามารถหลีกเลี่ยงการซ้ำซ้อนได้โดยไม่ต้องกำหนดค่าอย่างน้อยที่สุด


ฉันไม่เห็นเหตุผลใด ๆ ว่าทำไมไม่มีวิธีหลีกเลี่ยงความเป็นไปได้ทั้งหมดในขณะที่ยังคงหาคำตอบที่ถูกต้อง อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกทำอย่างสม่ำเสมอ
Yuval Filmus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.