Altküme Toplamı: özel durumu genel duruma düşür


20

Wikipedia , alt küme toplamı problemini, toplamı sıfır olan belirli bir tamsayı çoklu kümesinin bir alt kümesini bulmak olarak belirtir. Bundan başka, bu miktar ile bir alt bulmak eşdeğer olduğunu bildiren herhangi bir için .ss

Bu yüzden eşdeğer oldukları için her iki tarafta da bir azalma olması gerektiğine inanıyorum. Bir ila sıfıra ayarlama ile önemsiz . Ama sıfırdan bir azalma bulma şansı olmadığını , tam sayı verilen bir dizi, yani , tam sayılar, bir dizi yapı toplamı olan bir alt kümesini ihtiva eden (herhangi ), ancak ve ancak bir alt kümesi olarak var ise ile toplam sıfır.ss=0sABssA

Bana bazı işaretçiler verebilir misin?

Yanıtlar:


11

Aslında zaten özelden genele bir indirim var. ayarlandığında , temel sorunu özel sorunu çözmek için kullanırsınız.s=0

Diğer yol için (yani genelden özelliğe bir azalma):

Size bir set ve bir sayısı verildiğini ve ile toplanan bazı alt kümelerinin olup olmadığını belirlemeniz gerektiğini varsayalım .S={x1,,xn}KSK

Şimdi, bazı alt kümelerin toplamının olup olmadığını belirleyebileceğiniz durum için bir algoritma verildiğinde bu sorunu çözmek istiyorsunuz .0

Şimdi , kolay bir indirgememiz var: .xi>0S={x1,x2,,xn,K}

S toplamı bir alt kümesi IFF toplamı bir alt kümesi .0SK

Bazı için olduğunda sorun oluşur .xi0i

(neden?) Olduğunu varsayabiliriz .K>0

Pozitif değerinin toplamının ve negatif değerinin olduğunu varsayalım .xiPxiN

Şimdi yeni bir set oluşturunS={y1,y2,yn}

yi=xi+M burada .M=P+|N|+K

Her .yi>0

Şimdi setlerde sıfır alt küme toplamı algoritmasını çalıştırın

S{(K+M)}

S{(K+2M)}

S{(K+3M)}

S{(K+nM)}

toplamının bir alt kümesine sahip olması durumunda , yukarıdaki kümelerden en az birinin toplamın sıfır alt kümesine sahip olduğunu göstermek kolaydır .SK

Diğer yönün kanıtını sana bırakacağım.


Çok teşekkür ederim. Acaba, 0-alt-küme toplamı örneğini bir K-alt küme-toplamı örneğine ( yerine ) dönüştüren bir azalma var mı? n
ipsec

@ipsec: K-altkümesi-toplamı örneğini 0-altkümesi-toplamına mı dönüştürmek istiyorsunuz? Belki de yukarıdaki setlerin birleşimini almak işe yarayacaktır. n
Aryabhata

Aslında, şu anda sert yönü seçip seçmediğimi iki kez düşünüyordum. K-altkümesi toplamının her K için NP-zor olduğunu göstermek istediğimde, 0-altkümesi toplamının NP-sert olduğunu, 0-altkümesi toplamından K-altkümesi-toplamına bir azalma kullanabilirim bunun için herhangi bir 0-örneğinden bir K-örneğine bir poli-zaman dönüşümüne ihtiyacım olacaktı. Ama şimdi sorumun aslında sorduğumdan emin değilim.
ipsec

@ipsec: set derken , sahip NP-Sertlik göstermek sıfır alt kümesi-sum NP-Sertlik verilmiş -subset-sum: Genel sorun özel sorunu olarak sert olarak en az olduğunu. İndirgeme açısından, sıfır alt küme toplamını -alt küme toplamına indirdiğinizi unutmayın. Ayrıca, bir girdi olduğuna dikkat edin . "Verilen her " hakkında konuşurken tam olarak ne demek istiyorsun? Yukarıdaki cevap, özel durumun (sıfır alt küme toplamı) genel durum ( -alt küme toplamı, burada bir girdi) kadar sert (NP sertlik anlamında) olduğunu göstermektedir . s=0KKKKkk
Aryabhata

Boşver. Aslında merak ettiğim şey şu ki, eğer 0-alt-küme toplamının NP-zor olduğunu bilirsek, örneğin 1-alt-küme toplamının da olduğunu söyleyebilir miyiz? Wikipedia öyle diyor, ancak uygun bir indirim arıyordum. Ancak şimdi ifadelerimin tamamen bozulduğunu görüyorum ve aslında tam tersini soruyordum. Her neyse, bana herhangi bir K-altkümesi toplamı örneğinden bir K-L tamsayıları için bir L-altkümesi-toplamı örneğine indirgemek için yeterli girdi verdiniz, bu yüzden sorunum hala çözüldü.
ipsec

0

Aryabhata'nın cevabı , tüm sayıları büyük bir çarpabileceğimizden ve "varlık etiketi" gibi davranmak için her birine küçük bir şey ekleyebileceğimizden ve daha sonra eğer onlar olmadan ulaşabilirsek sıfıra . Özellikle, varlık etiketi olarak ve 1 kullanacağız .ccKc=2(n+1)

Hedef değer ile ilgili genel sorunun bir örneği verildiğinde , aşağıdakileri içeren belirli bir sorunun (hedef değeri 0 olan) bir örneğini oluşturacağız:(S={x1,,xn},K)K

  • Y={y1,,yn} ; burada .yi=2(n+1)xi+1
  • sayısı .z=2K(n+1)n
  • n1"yukarı çekme" sayıları olarak anılacak olan 1 numaralı kopyaları.

Aryabhatta'nın yaptığı gibi pozitif olduğunu varsayacağım . (6 yıl geçtiğinden beri, okuyucunun egzersizine cevap vereceğim: Bunu yapmamızın nedeni , dahil genel sorunun bir örneğindeki tüm sayıların işaretlerini değiştirirsek , o zaman bir Yeni, eşdeğer bir sorun örneği Bu, pozitif- örneklerini çözmek için bir algoritmanın herhangi bir sorunu çözmek için yeterli olduğu anlamına gelir - negatif ile bir örneği çözmek için bu oturum değiştirmeyi gerçekleştirebilir, bu algoritmayı çalıştırabilir ve yanıtını Ve asıl sorunun cevabı. Ve elbette ise, genel davanın özel duruma hiçbir şekilde dönüştürülmesine gerek yok!)KKKKK=0

İlk olarak, genel sorunun belirli bir örneğine bir YES cevabının, özel sorunun yapılandırılmış örneğine bir YES cevabı gerektirdiğini gösterelim . Burada , genel soruna çözümünün var olduğunu varsayabiliriz : yani sayılarının bu boş olmayan toplamı, . Biz gelen alır Böylece, eğer -değerlerine inşa örneğine eden çözelti içine, bunlar için Özetle . Daha sonra eklemeyi seçebilir ve bizi toplam ile bırakabiliriz . Yana aralığında, bu{xj1,,xjm}mKy{yj1,,yjm}2K(n+1)+m2K(n+1)nmn1mn[n+1,0] , çekmeli numaraların bazı alt kümelerini ekleyerek başarılı bir şekilde 0'a kadar çekebiliriz.

Şimdi , oluşturulmuş örneğe bir YES cevabının orijinal verilen örneğe bir YES cevabı ima ettiğini gösterelim . Burada çarpma önemli hale gelir - dahil ettiğimiz ekstra sayıların "çok fazla yapamayacağından" emin olmamızı sağlayan şey budur.2(n+1)

Burada, çözümünün var olduğunu varsayabiliriz : yani sayılarının bu boş olmayan toplamı 0'dır. Sorunlu gereksinimlere göre, bu çözüm en az bir öğe içerir. Ayrıca, en az bir eleman içermelidir , çünkü bu olmadan toplam 0'a ulaşmak imkansızdır: Sadece yukarı çekme sayıları varsa, toplam mutlaka aralığındadır ( bu durumda en az bir pull-up numarasının olması gerektiğini ve hepsinin kesinlikle pozitif olduğunu unutmayın, bu nedenle toplam 0 olamaz); çözüm sadece ve bazı pull-up numaralarından oluşuyorsa , toplam mutlaka negatiftir, çünkü{yj1,,yjm}mY[1,n1]zz=2K(n+1)nn ve pull-up numaralarının toplamı artırabileceği en fazla .n1

Şimdi, çözümün içermediğine dair çelişki olduğunu varsayalım . Her öğe , iki terim içerir: bir çoklu ve bir + 1 "varlığı, takı". öğesinin öğesinin her birindeki +1 teriminin , seçilen öğe en fazla çekme sayısının her biri gibi seçildiği takdirde toplamı 1 arttırdığına dikkat edin , böylece toplam bu 2 herhangi bir çözümün kaynağı en az 1'dir (çünkü önceki paragrafta en az bir elementinin seçilmesi gerektiğini belirledik ) ve en fazla . Özellikle, bu modulo alındığında bu iki terim toplamınınzY2(n+1)nYn1Yn+n1=2n12(n+1) sıfır değildir. Çözeltinin içermediği varsayımı altında, bu toplamdaki tek diğer bileşenler , seçilen üyeleri tarafından katkıda bulunan katlarıdır ve modulo . Dolayısıyla, modulo alındığında, çözümdeki tüm terimlerin toplamı sıfır değildir, yani 0 hedef toplamına eşit olamaz, yani geçerli bir çözüm olamaz: yani bir çelişki bulduk yani her çözeltide olması gerekir.z2(n+1)Y2(n+1)2(n+1)z=2K(n+1)n

Yani her çözüm içerir . Biz biliyoruz kiz

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

ve şartları yeniden düzenleyebiliriz:

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 .

Toplam 0 olduğu için, modulo alındığında 0 olarak kalmalıdır ; bu , yeni denklemi elde etmek için katını içeren tüm terimleri atabileceğimizi gösterir.2(n+1)2(n+1)

(n+m+pull-ups)=0 .

Bunu elde etmek için doğrudan önceki denkleme geri yerleştirilebilir

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

Son olarak, her iki tarafı yaprakla bölmek2(n+1)

K+i=1mxji=0 ,

bu da orijinal genel problem örneğine bir çözüm getirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.