ความซับซ้อนของชุดย่อยผลรวมย่อย


9

ตัวแปรนี้ของปัญหาผลรวมย่อยเป็นเรื่องง่าย / รู้หรือไม่?

กำหนดจำนวนเต็มและชุดของจำนวนเต็มบวกเช่นนั้นทุก ๆจะมีค่ามากที่สุดบิตตั้งค่าเป็น ( ); มีเซตย่อยเช่นนั้นผลรวมขององค์ประกอบเท่ากับหรือไม่?mA={x1,x2,...,xn}xik=21xi=2bi1+2bi2,bi1,bi20AAm

มันอยู่ในหรือไม่ มันยังคงเป็นสมบูรณ์?PNP

และถ้าทุกมีที่มากที่สุดบิตตั้งค่าเป็น ? สำหรับปัญหานั้นเล็กน้อยxik=31k=1

คำตอบ:


8

มันยังคงเป็นสมบูรณ์แม้สำหรับ 2 จากตัวอย่างของผลรวมย่อยเราสามารถแปลงให้เป็นตัวแปรนี้โดยแยกตัวเลขและเพิ่มบิตพิเศษบางอย่างNPk=2

ครั้งแรกที่ผลรวมของตัวเลขทั้งหมดในปัญหาที่เกิดขึ้นจะน้อยกว่ามูลค่าของบางเมตร2mm

ทีนี้ลองหาตัวเลขจากปัญหาเดิมซึ่งมีบิตตั้งไว้ เราจะแบ่งจำนวนนี้ในหมายเลขตรงกับ 2 บิตตั้งค่าดังกล่าวว่าผลรวมของตัวเลขเหล่านั้นคือm} เราสามารถทำสิ่งนี้ซ้ำโดยการหาตัวเลขที่รวมกันเป็นครั้งแรกบิตบวกและหมายเลขที่ รวมถึงล่าสุดบิตบวกm-1}nkkn+2k+mkk2k+m1kk2k+m1

นอกจากหมายเลขนั้นเราจะเพิ่มหมายเลขให้กับปัญหา คำตอบจะต้องมีหมายเลขนี้หรือหมายเลขทั้งหมดที่สร้างขึ้นก่อนหน้านี้ ถ้าราคาเป้าหมายเดิมคือมูลค่าเป้าหมายใหม่จะเป็นm}2k+mktt+2k+m

ถ้าปัญหาเดิมมีมากกว่าจำนวนหนึ่งที่เราสามารถทำซ้ำขั้นตอนนี้การสำหรับค่าใหม่ของม.k+m+1m

มีเพียงสองวิธีบิตในตำแหน่งที่มีสามารถตั้งค่า: คำตอบจะมีจำนวนหรือทั้งหมดของตัวเลขที่รวมถึงm} ดังนั้นเราจึงลดผลรวมย่อยลงไปยังชุดผลรวมย่อยของคุณk+m2k+mkn+2k+m

ตัวอย่างเช่นลองกับค่าเป้าหมาย7ปัญหานี้อาจถูกเข้ารหัสเป็นชุดผลรวมย่อยชุดย่อยที่แสดงที่นี่โดยรับเลขฐานสองต่อไปนี้:{2,3,5}7

2 ได้รับการแมปไปและ 1 (การใช้บิตพิเศษไม่จำเป็นอย่างยิ่งที่นี่)0100 10000 1

3 ได้รับการแมปกับและ1000 00 1,0100 00 10000 00 01

5 ได้รับการแมปไปและ011000 00 000 1,0010 00 000 10000 00 000 01

ค่าเป้าหมายใหม่จะกลายเป็น011110 10 010 01

หากปัญหาดั้งเดิมแสดงด้วยบิตดังนั้นปัญหาที่แปลงแล้วจะมีบิตไม่เกิน ปัญหาดั้งเดิมจะมีจำนวนมากที่สุดแต่ละที่มีมากที่สุดบิตดังนั้นผลรวมของทั้งหมดคือ O (n) ปัญหาที่แปลงแล้วจะมีตัวเลข (เนื่องจากแต่ละหมายเลขบิตถูกแบ่งเป็นบิตโดยมีความยาวอยู่ที่มากที่สุดเนื่องจากเราใช้บิตเพิ่มเติมสำหรับ แต่ละหมายเลขดังนั้นขนาดโดยรวมของปัญหาที่แปลงแล้วคือบิตnO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)


คุณแน่ใจหรือไม่ว่าการเข้ารหัสไม่ได้นำไปสู่ขนาดที่อธิบายของเทปการทำงาน?
Vor

ไม่ฉันคิดว่าปัญหาที่แปลงแล้วนั้นเป็นขนาดควอร์ติก หากอินพุตมี n บิตแสดงว่ามีตัวเลขไม่เกิน n จำนวนโดยแต่ละชุดมี n บิตตั้งอยู่ ดังนั้นจะมีตัวเลข O (n ^ 2) ในปัญหาที่แปลงแล้ว (เนื่องจากตัวเลข k-bit ถูกแบ่งเป็น k + 1 หมายเลข) แต่ละหมายเลขคือ (2n) บิตยาวเพื่อรองรับผลรวมสูงสุดบวก n บิตสำหรับแต่ละหมายเลข n ในปัญหาดั้งเดิม ดังนั้นแต่ละหมายเลขจะมีบิต O (2n + n ^ 2) รวมเป็น O (n ^ 4) บิต
Tom van der Zanden

@TomvaderZanden: ฉันได้เพิ่มรูปภาพของการลดของคุณในคำถาม; ดูว่าฉันตีความได้อย่างถูกต้อง
Vor

@TomvaderZanden: วันนี้ผมมองไปที่การลดลงของคุณอีกครั้ง แต่ก็ไม่มีความชัดเจนว่าจากจำนวนข้อกับบิตตั้งคุณสามารถแยกมันเข้าไปในหมายเลข 2 บิตที่ "สูงสุด" ส่วนจำนวนเงินที่จะ k สมมติว่าคุณมีหมายเลขพร้อมชุดบิต คุณต้องการหมายเลข 13 2 บิต แต่ 13 คือ 1101 และคุณไม่สามารถ "ครอบคลุม" ด้วยตัวเลขสองบิต (ตัวอย่างของคุณใช้งานได้เนื่องจาก 3 และ 5 k = 2) ฉันคิดว่าสิ่งนี้สามารถแก้ไขได้ง่ายถ้าคุณใช้บิตสูงที่แตกต่างกันสำหรับตัวเลข 2 บิตแต่ละตัว พวกเขาจะรวมไป 01111 ... 1 แล้วคุณเพิ่มหุ่น 0000 ... 1 ที่จะช่วยให้ผลรวมที่จะเป็น k nkk2knk=13k2k
Vor

มันค่อนข้างคลุมเครือ แต่ก็เป็นไปได้อย่างแน่นอนโดยใช้กระบวนการ "อุปนัย" คุณไม่จำเป็นต้องจริงบิตคุณต้องการเพียงk) หากคุณต้องการหาตัวเลข 13 1 บิตที่รวมกันเป็นคุณต้องหาตัวเลข 6 ตัวที่รวมกันเป็นและ 7 ที่รวมกันเป็นด้วย เราสามารถใช้เวลาซึ่งแน่นอนสรุปถึง 4 kceil(logk)2423231020+32124
Tom van der Zanden

0

นี่เป็นข้อมูลที่ดึงมาจากคำถามโดย Vor

สำหรับปัญหายังคงสมบูรณ์อยู่ ฉันพบการลดลงอย่างรวดเร็วจากเสียงโมโน X-SAT ( ดูสคีมาของการลดลงที่นี่ )k3

ปัญหายังคงเป็นปัญหา NP-Complete แม้ว่าดูคำตอบของ Tom สำหรับรายละเอียด นี่เป็นตัวแทนเล็กน้อยของการลดลงของเขาจาก SUBSET SUM:k=2

ป้อนคำอธิบายรูปภาพที่นี่

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