Alt küme toplamı sorunu - Subset sum problem

alt küme toplamı sorunu bir karar problemi içinde bilgisayar Bilimi. Sorunun birkaç eşdeğer formülasyonu vardır. Bunlardan biri: verilen bir çoklu set tamsayılar, toplamı sıfır olan boş olmayan bir alt küme var mı? Örneğin, set verildiğinde , cevap Evet çünkü alt küme sıfıra eşittir. Bir başka eşdeğer formülasyon şudur: pozitif tamsayılar ve hedef toplam T, sayıların herhangi bir alt kümesinin toplamı tam olarak T?[1] Alt küme toplamı da bir optimizasyon sorunu: toplamı mümkün olduğunca yakın olan bir alt küme bulun T.

Alt küme toplamı diğer birkaç sorunla ilgilidir:

  • bölüm sorunu özel bir alt küme durumudur; burada hedef toplam T tüm giriş sayılarının toplamının tam olarak yarısıdır (yani, ).
  • sırt çantası sorunu alt küme toplamının bir genellemesidir.[2]

Alt küme toplamı problemi NP tamamlandı, ancak pratikte makul derecede hızlı çözebilen birkaç algoritma vardır.

Karmaşıklık

karmaşıklık Alt küme toplam sorununun% 50'si iki parametreye bağlıdır: n - giriş tam sayılarının sayısı ve L - problemi ifade etmek için gereken ikili basamak değerlerinin sayısı olarak ifade edilen problemin kesinliği.

  • Eğer n (tam sayıların sayısı) küçük bir sabit sayıdır, sonra bir Ayrıntılı arama çünkü çözüm pratiktir.
  • Eğer L (ikili basamak sayısı) küçük bir sabit sayıdır, o zaman dinamik program tam olarak çözebilecek algoritmalar.

Sorun her ikisi de n ve L büyüktür. En iyi bilinen algoritmaların karmaşıklığı üstel iki parametreden daha küçük olanı n ve L.

Üstel zaman algoritmaları

Alt küme toplamını zaman içinde üstel olarak çözmenin birkaç yolu vardır. n.[3]

Dahil etme hariç tutma

En çok saf algoritma tüm alt kümeleri arasında geçiş yapmak olacaktır n sayılar ve her biri için, alt kümenin doğru sayıya ulaşıp ulaşmadığını kontrol edin. Çalışma süresi düzenli olduğundan beri alt kümeler ve her alt kümeyi kontrol etmek için en fazla n elementler.

Algoritma şu şekilde uygulanabilir: derinlik öncelikli arama ikili ağaç için: ağaçtaki her seviye bir giriş numarasına karşılık gelir; sol dal, sayının kümeden çıkarılmasına karşılık gelir ve sağ dal, sayının dahil edilmesine karşılık gelir (dolayısıyla Dahil Etme-Dışlama adı). Gerekli hafıza . Çalışma zamanı birkaç buluşsal yöntemle geliştirilebilir:[3]

  • Girdi numaralarını azalan sırada işleyin.
  • Belirli bir düğümde bulunan tam sayılar şimdiye kadar bulunan en iyi alt kümenin toplamını aşarsa, düğüm budanır.
  • Belirli bir düğüme dahil olan tam sayılar artı kalan tüm tam sayılar, şimdiye kadar bulunan en iyi alt kümenin toplamından daha azsa, düğüm budanır.

Horowitz ve Sanhi

Horowitz ve Sahni[4] zamanında çalışan daha hızlı bir üstel zaman algoritması yayınladı , ancak çok daha fazla alan gerektirir - . Algoritma keyfi olarak böler n öğeleri iki set halinde her biri. Bu iki kümenin her biri için, tümünün toplamlarının bir listesini saklar. öğelerinin olası alt kümeleri. Bu iki listenin her biri daha sonra sıralanır. Bu adım için standart bir karşılaştırmalı sıralama algoritması kullanmak zaman alır . Ancak, sıralı bir toplam listesi verildiğinde öğeler, liste iki sıralı listeye genişletilebilir.) inci öğe ve bu iki sıralı liste zaman içinde birleştirilebilir . Böylelikle her liste zaman içinde sıralı biçimde oluşturulabilir. . Sıralanan iki liste göz önüne alındığında, algoritma, birinci dizinin bir öğesinin ve ikinci dizinin bir öğesinin toplamı olup olmadığını kontrol edebilir T zamanında . Bunu yapmak için, algoritma azalan sırada (en büyük öğeden başlayarak) birinci diziden ve artan sırada (en küçük öğeden başlayarak) ikinci diziden geçer. İlk dizideki geçerli öğe ile ikinci dizideki geçerli öğenin toplamı, Talgoritma, ilk dizideki sonraki öğeye geçer. Daha az ise Talgoritma, ikinci dizideki sonraki öğeye geçer. Toplamı olan iki öğe T bulunursa durur.

Schroeppel ve Shamir

Schroeppel ve Shamir[5] benzer çalışma süresi gerektiren Horowitz ve Sanhi'ye dayalı bir algoritma sundu - , çok daha az alan - . Tüm alt kümelerini oluşturmak yerine n/ 2 öğe önceden, öğeleri 4 sete bölerler n/ 4 öğenin her biri ve alt kümelerini oluştur n/ 2 öğe dinamik olarak bir min yığın.

Alan gereksinimleri nedeniyle, HS algoritması yaklaşık 50 tam sayıya kadar pratiktir ve SS algoritması 100 tam sayıya kadar pratiktir.[3]

Howgrave-Graham ve Joux

Howgrave-Graham ve Joux[6] bir olasılık algoritması öncekilerden daha hızlı çalışan - zamanında . Yalnızca karar problemini çözer, belirli bir toplam için çözüm olmadığını ispatlayamaz ve en yakın alt küme toplamını döndürmez T.

Sözde polinom zaman dinamik programlama çözümü

Sorun şu şekilde çözülebilir sözde polinom zaman kullanma dinamik program. Sıranın şöyle olduğunu varsayalım

artan sırada sıralanır ve toplamı sıfır olan bir boş olmayan alt küme olup olmadığını belirlemek isteriz. Boole değerli işlevi tanımlayın değer olmak ( veya ) nın-nin

"boş olmayan bir alt küme var toplamı ."

Böylece, "Bir tam sayı kümesi verildiğinde, toplamı sıfır olan boş olmayan bir alt küme var mı?" değeridir .

İzin Vermek negatif değerlerin toplamı ve pozitif değerlerin toplamı. Açıkça, , Eğer veya . Dolayısıyla bu değerlerin saklanması veya hesaplanması gerekmez.

Değerleri tutmak için bir dizi oluşturun için ve .

Dizi artık basit bir özyineleme kullanılarak doldurulabilir. Başlangıçta , Ayarlamak

nerede true döndüren bir boole işlevidir eşittir aksi takdirde yanlış.

Bundan dolayı , Ayarlamak

veya veya .

Her bir ödev için değerleri sağ taraf zaten biliniyor, çünkü bunlar, önceki değer için tabloda depolandılar. veya çünkü Eğer veya . Bu nedenle, toplam aritmetik işlem sayısı . Örneğin, tüm değerler bazı , o zaman gerekli zaman .

Bu algoritma, varsa, toplamı 0 olan alt kümeyi döndürmek için kolayca değiştirilebilir.

Dinamik programlama çözümünün çalışma süresi var nerede sette bulmak istediğimiz toplam sayılar. Bu çözüm, karmaşıklık teorisinde polinom zaman olarak sayılmaz çünkü polinom değildir boyut problemin, onu temsil etmek için kullanılan bit sayısıdır. Bu algoritma, değerlerinde polinomdur ve bit sayılarında üstel olan.

Her biri için pozitiftir ve sabit bir sabitle sınırlıdır Pisinger, zaman karmaşıklığına sahip doğrusal bir zaman algoritması buldu (Bunun, hedef toplamın mutlaka sıfır olmadığı problem versiyonu için olduğuna dikkat edin, aksi takdirde problem önemsiz olacaktır).[7][8] 2015 yılında Koiliaris ve Xu belirleyici bir alt küme toplamı problemi için algoritma nerede bulmamız gereken miktar.[9] Bringmann 2017'de bir randomize zaman algoritması [10].

Polinom zaman yaklaşık algoritması

Bir yaklaşık alt küme toplamının versiyonu şöyle olacaktır: bir dizi verilir sayılar ve bir sayı , çıktı:

  • Evet, özetleyen bir alt küme varsa .
  • Hayır, aralarında bir sayıyı toplayan bir alt küme yoksa ve bazıları için .
  • Aralarında bir sayıyı toplayan bir alt küme varsa herhangi bir cevap ve ancak özetleyen alt küme yok .

Tüm sayılar negatif değilse, yaklaşık alt küme toplamı, zaman polinomunda çözülebilir. ve .

Alt küme toplamının çözümü, sayıların küçük olduğu durumda (yine, negatif olmayan sayılar için) orijinal alt küme toplamı sorununa da çözüm sağlar. Sayıların herhangi bir toplamı en fazla ile belirtilebiliyorsa bitler, ardından sorunu yaklaşık olarak çözme tam olarak çözmeye eşdeğerdir. Ardından, yaklaşık alt küme toplamı için polinom zaman algoritması, çalışma süresi polinomu ile kesin bir algoritma haline gelir. ve (yani üstel olarak ).

Yaklaşık alt küme toplam problemi için algoritma aşağıdaki gibidir:

bir liste başlatmak S bir öğe içermesi 0.her biri için ben 1'den N yapmak    İzin Vermek T oluşan bir liste olmak xben + y, hepsi için y içinde S    İzin Vermek U birliği olmak T ve S    çeşit U    Yapmak S boş izin y en küçük unsur olmak U     Ekle y -e S    her biri için element z nın-nin U artan sırada yapmak        // Birbirine yakın sayıları ortadan kaldırarak listeyi kırpın // ve şundan büyük öğeleri atın s.        Eğer y + cs/N < zs sonra            y = z            Ekle z -e SEğer S arasında bir sayı içerir (1 - c)s ve s sonra    dönüş EvetBaşka    dönüş Hayır

Algoritma polinom zamandır çünkü listeler , ve daima boyutta polinom kalın ve ve polinom boyutunda oldukları sürece, üzerlerindeki tüm işlemler polinom zamanında yapılabilir. Listelerin boyutu, yalnızca bir sayı eklediğimiz kırpma adımıyla polinom olarak tutulur. içine öncekinden daha büyükse ve daha büyük değil .

Bu adım, her bir öğenin en az bir sonrakinden daha küçük ve şundan büyük öğeler içermez . Bu özelliğe sahip herhangi bir liste, en fazla elementler.

Algoritma doğrudur çünkü her adım, en fazla ve birlikte adımlar, en fazla .

Ayrıca bakınız

Referanslar

  1. ^ Kleinberg, Jon; Tardos, Éva (2006). Algoritma Tasarımı (2. baskı). s.491. ISBN  0-321-37291-3.
  2. ^ Martello, Silvano; Toth, Paolo (1990). "4 Alt küme toplamı sorunu". Sırt çantası problemleri: Algoritmalar ve bilgisayar yorumları. Wiley-Interscience. pp.105–136. ISBN  0-471-92420-2. BAY  1086874.CS1 bakimi: ref = harv (bağlantı)
  3. ^ a b c Richard E. Korf, Ethan L. Schreiber ve Michael D. Moffitt (2014). "Optimal Sıralı Çok Yönlü Numara Bölümleme" (PDF).CS1 bakimi: birden çok ad: yazarlar listesi (bağlantı)
  4. ^ Horowitz, Ellis; Sahni, Sartaj (1974), "Sırt çantası sorununa yönelik uygulamalarla bölümleri hesaplama" (PDF), Bilgisayar Makineleri Derneği Dergisi, 21 (2): 277–292, doi:10.1145/321812.321823, hdl:1813/5989, BAY  0354006
  5. ^ Schroeppel, Richard; Shamir, Adi (1981-08-01). "A $ T = O (2 ^ {n / 2}) $, $ S = O (2 ^ {n / 4}) $ Belirli NP-Tam Sorunlar için Algoritma". Bilgi İşlem Üzerine SIAM Dergisi. 10 (3): 456–464. doi:10.1137/0210033. ISSN  0097-5397.
  6. ^ Howgrave-Graham, Nick; Joux, Antoine (2010). Gilbert, Henri (ed.). "Sert Sırt Çantaları için Yeni Genel Algoritmalar". Kriptolojideki Gelişmeler - EUROCRYPT 2010. Bilgisayar Bilimi Ders Notları. Berlin, Heidelberg: Springer: 235–256. doi:10.1007/978-3-642-13190-5_12. ISBN  978-3-642-13190-5.
  7. ^ http://hjemmesider.diku.dk/~pisinger/codes.html
  8. ^ Pisinger D (1999). "Sınırlı Ağırlıklı Sırt Çantası Problemleri için Doğrusal Zaman Algoritmaları". Algoritmalar Dergisi, Cilt 33, Sayı 1, Ekim 1999, s. 1-14
  9. ^ Koiliaris, Konstantinos; Xu, Chao (2015-07-08). "Alt Küme Toplamı için Daha Hızlı Bir Pseudopolynomial Zaman Algoritması". arXiv:1507.02318 [cs.DS ].
  10. ^ Bringmann K. Alt küme toplamı [C] için neredeyse doğrusal bir sözde-polinom zaman algoritması // Ayrık Algoritmalar Üzerine Yirmi Sekizinci Yıllık ACM-SIAM Sempozyumu Bildiriler. Endüstriyel ve Uygulamalı Matematik Derneği, 2017: 1073-1084

daha fazla okuma