ด้วยเวกเตอร์จำนวนเต็มสองตัวที่มีความยาวไม่เท่ากันฉันจะกำหนดผลลัพธ์สูงสุดได้อย่างไรจากการเลือกจำนวนสูงสุดระหว่างคู่ที่สอดคล้องกันระหว่างเวกเตอร์สองตัวที่มีค่าศูนย์พิเศษแทรกลงในเวกเตอร์ที่สั้นกว่า
ตัวอย่างเช่นให้พิจารณาเวกเตอร์สองตัวต่อไปนี้เป็นอินพุต:
[8 1 4 5]
[7 3 6]
ตัวเลือกสำหรับการแทรกศูนย์และผลรวมคือ:
[0 7 3 6] => Maximums: [8 7 4 6] => Sum is: 25
[7 0 3 6] => Maximums: [8 1 4 6] => Sum is: 19
[7 3 0 6] => Maximums: [8 3 4 6] => Sum is: 21
[7 3 6 0] => Maximums: [8 3 6 5] => Sum is: 22
ดังนั้นในกรณีนี้อัลกอริทึมควรกลับ 25
ฉันสามารถทำได้โดยใช้กำลังดุร้ายโดยคำนวณหาพีชคณิตทั้งหมดของการวางเลขศูนย์ลงในเวกเตอร์ที่เล็กกว่า (เพิ่งทำเสร็จด้านบน) แต่นี่จะมีราคาที่คำนวณได้และที่แย่ที่สุดในกรณีที่เวกเตอร์หนึ่งมีขนาดครึ่งหนึ่งเท่ากับ
มีวิธีคำนวณคำตอบในเวลาเชิงเส้นตามสัดส่วนกับความยาวของเวกเตอร์ที่ยาวกว่าแม้ว่าเวกเตอร์จะมีความยาวต่างกันหรือไม่? ถ้าไม่เราสามารถทำได้ดีกว่าจำนวนพีชคณิตแฟคทอเรียลที่ถูกเลือก?
3
ฉันใช้สิ่งนี้เพื่อคำนวณผลลัพธ์สูงสุดของอัลกอริทึมการค้นหาอื่นที่เกี่ยวข้องกับการจัดอันดับว่ามีประโยคที่คล้ายกันสองประโยคต่อกันอย่างไร ถูกต้องจัดลำดับใหม่ไม่เป็นที่ยอมรับ
—
WilliamKF
เราสัญญาอะไรเกี่ยวกับความแตกต่างระหว่างความยาวของเวกเตอร์หรือไม่? ในตัวอย่างของคุณมีเพียงศูนย์เดียวที่หายไป หากคุณรู้ว่าจำนวนศูนย์ที่หายไปมีขนาดเล็กมีอัลกอริทึมที่มีประสิทธิภาพมากขึ้น (ตัวอย่างเช่นอัลกอริทึมการเขียนโปรแกรมแบบไดนามิกสามารถทำงานในเวลาเชิงเส้นได้ถ้าจำนวนศูนย์ที่หายไปเป็นค่าคงที่)
—
DW