ผลรวมย่อย: ลดพิเศษกรณีทั่วไป


20

วิกิพีเดียระบุปัญหาผลรวมเซตย่อยตามการค้นหาเซ็ตย่อยของชุดเลขจำนวนเต็มที่กำหนดซึ่งผลรวมเป็นศูนย์ นอกจากนี้มันกล่าวว่ามันจะเทียบเท่ากับการหาชุดย่อยที่มีผลรวมสำหรับการใด ๆ ให้sss

ดังนั้นฉันเชื่อว่ามันเท่ากันต้องลดทั้งสองข้าง หนึ่งจากไปที่ศูนย์เป็นเล็กน้อยโดยการตั้งค่า0 แต่ฉันไม่มีโชคในการหาการลดลงจากศูนย์ถึงเช่นได้รับชุดจำนวนเต็มสร้างชุดจำนวนเต็มที่ประกอบด้วยชุดย่อยที่มีผลรวม (สำหรับใด ๆ) ถ้าหากมีเซตย่อยของด้วยเท่านั้น ผลรวมศูนย์ss=0sABssA

คุณช่วยชี้ให้ฉันได้ไหม

คำตอบ:


11

จริง ๆ แล้วคุณมีการลดจากพิเศษเป็นทั่วไป โดยการตั้งค่าคุณจะใช้อัลกอริทึมทั่วไปเพื่อแก้ปัญหาพิเศษs=0

สำหรับรอบทางอื่น ๆ (เช่นการลดลงจากทั่วไปเป็นพิเศษ):

สมมติว่าคุณจะได้รับชุดและจำนวนและคุณจะต้องตรวจสอบว่ามีส่วนย่อยบางส่วนของซึ่งจำนวนเงินที่จะKK S KS={x1,,xn}KSK

ตอนนี้คุณต้องการที่จะแก้ปัญหานี้ได้รับการอัลกอริทึมสำหรับกรณีที่คุณสามารถตรวจสอบว่าเงินก้อนเซตบางอย่างเพื่อ00

ตอนนี้ถ้าเรามีการลดง่าย:\}S = { x 1 , x 2 , , x n , - K }xi>0S={x1,x2,,xn,K}

Sมีส่วนหนึ่งของจำนวนเงินที่ IFFมีส่วนหนึ่งของจำนวนเงินที่KS K0SK

ปัญหาเกิดขึ้นเมื่อเรามีสำหรับบางตัวixi0i

เราสามารถสรุปได้ว่า (เพราะอะไร)K>0

สมมติว่าผลรวมของบวกคือและลบเป็นN P x ฉัน NxiPxiN

ตอนนี้สร้างชุดใหม่นั้นS={y1,y2,yn}

M = P + | N | + Kyi=xi+Mโดยที่KM=P+|N|+K

แต่ละ0yi>0

ตอนนี้รันอัลกอริทึม zero-subset-sum บนเซต

S{(K+M)}

S{(K+2M)}

S{(K+3M)}

S{(K+nM)}

มันง่ายที่จะแสดงว่าถ้ามีส่วนย่อยของผลรวมดังนั้นอย่างน้อยหนึ่งชุดข้างต้นมีส่วนย่อยของผลรวมเป็นศูนย์KSK

ฉันจะออกหลักฐานของทิศทางอื่นให้คุณ


ขอบคุณมาก. ฉันสงสัยว่ามีการลดลงซึ่งเปลี่ยนอินสแตนซ์ของ 0-subset-sum เป็นอินสแตนซ์ของ K-subset-sum หนึ่ง (แทน ) หรือไม่? n
ipsec

@ipsec: คุณหมายถึงแปลงอินสแตนซ์ของ K-subset-sum เป็น 0-subset-sum หรือไม่ บางทีการรวมกลุ่มของเซตด้านบนอาจใช้งานได้ n
Aryabhata

จริง ๆ แล้วฉันกำลังคิดสองครั้งว่าฉันได้ทิศทางที่ถูกต้องในขณะนี้ เมื่อฉันต้องการแสดงให้เห็นว่า K-subset-sum นั้นเป็น NP-hard สำหรับทุก ๆ K ที่ให้ความจริง, 0-subset-sum นั้นเป็น NP-hard, ฉันสามารถใช้การลดลงจาก 0-subset-sum เป็น K-subset-sum ซึ่งฉันจะต้องแปลงโพลีเวลาจาก 0 ใด ๆ เป็น K-instance แต่ตอนนี้ฉันไม่แน่ใจว่านี่เป็นสิ่งที่ฉันถาม
ipsec

@ipsec: เมื่อคุณบอกว่า set คุณได้แสดง NP-Hardness ของK -subset-sum ที่ได้รับ NP-Hardness ของ zero-subset-sum: ปัญหาทั่วไปนั้นยากพอ ๆ กับปัญหาพิเศษ โปรดทราบว่าในแง่การลดลงคุณบอกว่าคุณได้ลด zero-subset-sum เป็นK -subset-sum นอกจากนี้ทราบว่าKเป็นอินพุท เมื่อคุณพูดถึง "ทุก ๆK ที่ได้รับ" คุณหมายถึงอะไรกันแน่? คำตอบข้างต้นแสดงให้เห็นว่ากรณีพิเศษ (zero-subset-sum) นั้นยาก (ในแง่ของความแข็งของ NP) เหมือนกับกรณีทั่วไป ( k -subset-sum โดยที่kคืออินพุต) s=0KKKKkk
Aryabhata

ไม่เป็นไร. สิ่งที่ฉันสงสัยในตอนแรกคือถ้าเรารู้ว่า 0-subset-sum คือ NP-hard เราจะได้มาซึ่งเช่น 1-subset-sum ก็เช่นกัน? Wikipedia พูดอย่างนั้น แต่ฉันกำลังมองหาการลดที่เหมาะสม อย่างไรก็ตามตอนนี้ฉันเห็นว่าถ้อยคำของฉันยุ่งเหยิงไปหมดและฉันก็ถามตรงกันข้าม อย่างไรก็ตามคุณให้ฉันพอที่จะลดจากอินสแตนซ์ K-subset-sum เป็น L-subset-sum เช่นสำหรับจำนวนเต็มใด ๆ K และ L ดังนั้นปัญหาของฉันยังคงถูกแก้ไข
ipsec

0

คำตอบของ Aryabhataสามารถแก้ไขได้โดยการใช้ความจริงที่ว่าเราสามารถคูณตัวเลขทั้งหมดด้วยcขนาดใหญ่แล้วเพิ่มสิ่งเล็ก ๆ ลงไปในแต่ละอันเพื่อทำหน้าที่เหมือน "แท็กการแสดงตน" จากนั้นใส่ตัวเลขพิเศษบางอย่างที่จะอนุญาต เราจะได้ศูนย์ถ้าเราไปถึงcKโดยไม่มีพวกมัน โดยเฉพาะเราจะใช้c=2(n+1)และ 1 เป็นแท็กการแสดงตน

เนื่องจากอินสแตนซ์(S={x1,,xn},K)ของปัญหาทั่วไปที่มีค่าเป้าหมายKเราจะสร้างอินสแตนซ์ของปัญหาเฉพาะ (ด้วยค่าเป้าหมาย 0) ที่มี:

  • Y={y1,,yn}ที่yi=2(n+1)xi+1 1
  • จำนวนz=2K(n+1)n n
  • n1สำเนาของหมายเลข 1 เพื่อเรียกว่าหมายเลข "pull-up"

ฉันจะถือว่า Aryabhatta ทำเช่นนั้นว่าKเป็นบวก (เนื่องจากเป็นเวลา 6 ปีฉันจะตอบแบบฝึกหัดของเขาสำหรับผู้อ่าน: เหตุผลที่เราสามารถทำได้คือถ้าเราสลับเครื่องหมายของตัวเลขทั้งหมดในตัวอย่างของปัญหาทั่วไปรวมถึงKแล้วเราปิดท้ายด้วย ใหม่ปัญหาที่เท่าเทียมกันซึ่งหมายความว่าอัลกอริทึมในการแก้ปัญหาอินสแตนซ์Kเพียงพอสำหรับการแก้ปัญหาใด ๆ - เพื่อแก้ปัญหาด้วยค่าลบKเราสามารถทำการลงชื่อเข้าใช้นี้เรียกใช้อัลกอริธึมนั้น คำตอบสำหรับคำถามเดิมและแน่นอนถ้าK=0 จากนั้นเราไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ ของเคสทั่วไปเป็นเคสพิเศษเลย!)

ก่อนอื่นเราจะแสดงให้เห็นว่าคำตอบของ YES สำหรับปัญหาทั่วไปนั้นหมายถึงคำตอบของ YES สำหรับตัวอย่างพิเศษที่สร้างขึ้นของปัญหาพิเศษ ที่นี่เราสามารถสรุปได้ว่าวิธีการแก้ปัญหาบาง{xj1,,xjm}เพื่อปัญหาทั่วไปที่มีอยู่นั่นคือคอลเลกชันนี้ว่างของmผลรวมหมายเลขKKดังนั้นถ้าเราใช้เวลาที่สอดคล้องกันy -values {yj1,,yjm}ในการแก้ปัญหาของเราที่จะสร้างอินสแตนซ์ที่พวกเขาจะรวมไป2K(n+1)+mม. แล้วเราสามารถเลือกที่จะรวม2K(n+1)nในการแก้ปัญหาที่ออกจากเราด้วยผลรวมของmn n ตั้งแต่1mnสิ่งนี้อยู่ในช่วง[n+1,0]ซึ่งเราสามารถดึงขึ้นมาเป็น 0 ได้สำเร็จโดยการรวมส่วนย่อยของตัวเลขแบบดึงขึ้น

2(n+1)

{yj1,,yjm}mY[1,n1]zz=2K(n+1)nnn1

zY2(n+1)nYn1Yn+n1=2n12(n+1)z2(n+1)Y2(n+1)2(n+1)z=2K(n+1)n

z

(2K(n+1)n)+i=1m(2(n+1)xji+1)+pull-ups=0

และเราสามารถจัดเรียงข้อกำหนด:

2K(n+1)+i=1m(2(n+1)xji)(n+i=1m1+pull-ups)=0

2K(n+1)+i=1m(2(n+1)xji)(n+m+pull-ups)=0

2(n+1)(K+i=1mxji)(n+m+pull-ups)=0

2(n+1)2(n+1)

(n+m+pull-ups)=0

สิ่งนี้สามารถทดแทนโดยตรงในสมการก่อนหน้าเพื่อรับ

2(n+1)(K+i=1mxji)=0

2(n+1)

K+i=1mxji=0

ซึ่งให้ผลเฉลยกับอินสแตนซ์ปัญหาทั่วไปดั้งเดิม

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