ฉันถามคำถามนี้กับ StackOverflowแต่ฉันคิดว่าที่นี่เป็นสถานที่ที่เหมาะสมกว่า
นี่เป็นปัญหาจากหลักสูตรIntroduction to Algorithm :
คุณมีอาร์เรย์พร้อมจำนวนเต็มบวก (อาร์เรย์ไม่จำเป็นต้องเรียงหรือองค์ประกอบที่ไม่ซ้ำกัน) แนะนำให้ขั้นตอนวิธีการที่จะหาผลรวมที่ใหญ่ที่สุดขององค์ประกอบที่หารด้วยn
ตัวอย่าง: = [ 6 , 1 , 13 , 4 , 9 , 8 , 25 ] , n = 7 คำตอบคือ56 (มีองค์ประกอบ6 , 13 , 4 , 8 , 25 )
มันค่อนข้างง่ายที่จะหาได้ในโดยใช้โปรแกรมแบบไดนามิกและการจัดเก็บผลรวมที่ใหญ่ที่สุดกับส่วนที่เหลือ 1
นอกจากนี้หากเรา จำกัด ความสนใจขององค์ประกอบต่อเนื่องกันมันเป็นเรื่องง่ายที่จะหาลำดับที่ดีที่สุดในเวลาโดยการจัดเก็บผลรวมบางส่วนโมดูโลn : ให้S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + a [ i ]สำหรับแต่ละส่วนที่เหลือrจำดัชนีที่ใหญ่ที่สุดjเช่นS [ j ] ≡ rแล้วสำหรับแต่ละฉันคุณพิจารณา S [ J ] - S [ ผม]ที่เจเป็นดัชนีที่สอดคล้องกับ R = S [ ผม] mod n
แต่มีวิธี - เวลาสำหรับกรณีทั่วไปหรือไม่ ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม! ฉันคิดว่ามันมีบางอย่างที่ต้องจัดการกับพีชคณิตเชิงเส้น แต่ฉันไม่แน่ใจจริงๆ
หรือสามารถทำได้ในเวลา ?