Masalah partisi di mana beberapa nomor mungkin terpotong


8

Dalam masalah partisi standar , kita diberikan beberapa angka yang jumlahnya dan harus memutuskan apakah mereka dapat dipartisi menjadi dua bagian yang jumlahnya adalah . Ini dikenal sebagai NP-keras.2s2sss

Namun, anggaplah bahwa kita diizinkan untuk menunjuk salah satu angka sebagai "nomor lunak" yang dapat dipotong menjadi jumlah potongan yang sewenang-wenang, di mana potongan yang berbeda dapat dimasukkan ke dalam himpunan bagian yang berbeda. Maka masalahnya menjadi mudah: hanya mengatur semua angka pada garis dalam urutan acak, dan memotong garis menjadi dua sub-baris dengan jumlah yang sama.

PERTANYAAN: Misalkan kita diberi beberapa angka yang jumlahnya adalah , dan harus memutuskan apakah mereka dapat dipartisi menjadi tiga himpunan bagian yang jumlahnya adalah , saat menggunakan paling banyak satu nomor lunak. Apa kompleksitas masalah ini?3s3sss

  • Jika kita diizinkan menggunakan dua nomor lunak, maka masalahnya kembali mudah - kita dapat menyelesaikannya dengan mengatur angka pada garis seperti di atas.
  • Jika kita diizinkan untuk menggunakan nol angka lunak, maka masalahnya jelas sulit - setidaknya sekeras masalah pembagian menjadi dua himpunan bagian.
  • Jika kita diizinkan untuk menggunakan satu nomor lunak, dugaan saya adalah bahwa masalahnya masih sulit, dan entah bagaimana kita dapat menguranginya dari masalah partisi standar, tetapi saya tidak dapat menemukan pengurangan yang tepat. Jadi, apakah itu mudah atau sulit?

Pertanyaan lain: jika masalahnya memang NP-hard, dapatkah dipecahkan dalam waktu semu polinomial seperti masalah partisi dua-subset?


1
Bagian dari masalah ini adalah untuk menemukan subset yang jumlahnya adalah sepertiga jumlah keseluruhan set. Namun, saya tidak dapat menemukan referensi yang sesuai mengatakan masalah subset-sum terbatas ini NP-hard.
John Dvorak

Ini setara dengan itu, sebenarnya, karena sisanya adalah untuk bipartisi dua pertiga dengan satu potong.
John Dvorak

@ JohnDvorak jika kita dapat memecahkan masalah subset-sum maka kita dapat memecahkan masalah dalam pertanyaan, tetapi yang sebaliknya tidak benar: kita mungkin memiliki solusi untuk masalah yang dimaksud di mana satu angka dipotong menjadi tiga fraksi, dan masing-masing subset mengandung satu fraksi. Solusi ini tidak memecahkan masalah subset-sum.
Erel Segal-Halevi

itulah sebabnya saya tidak mengirim jawaban. Saya yakin bahwa masalah partisi 1: 2 masih np-selesai (dan lebih umum masalah partisi untuk rasio tetap), tapi saya tidak punya bukti untuk itu. Tetapi jika memang NP-hard, maka begitu pula partisi 3-arah dengan masalah satu potong.
John Dvorak

1
Saya telah memperbarui formulasi masalah sehingga jelas bahwa angka yang dapat dipotong dapat dipotong-potong. (Ketika saya pertama kali membaca masalahnya, saya pikir Anda hanya diperbolehkan memotong satu angka satu kali.)
Gamow

Jawaban:


5

Angka terbesar adalah angka lunak

Saya mengklaim bahwa untuk setiap instance masalah Anda, jika instance dapat dipecahkan (dimungkinkan untuk mempartisi angka menggunakan satu nomor lunak) maka dimungkinkan untuk memecahkan contoh menggunakan nomor terbesar sebagai satu-satunya nomor lunak. Ini mudah dibuktikan: solusi apa pun dapat dimodifikasi menjadi solusi dengan jumlah terbesar sebagai nomor lunak; cukup tempatkan angka yang saat ini merupakan angka lunak ke dalam partisi yang berisi angka terbesar dan pisahkan angka terbesar di antara bagian-bagian partisi.

Masalah pengepakan

Berikut adalah masalah yang saya sebut masalah pengepakan:

Input terdiri dari daftar angka positif dan satu angka terakhir sedemikian rupa sehingga untuk semua . Tetapkan . Maka masalahnya adalah untuk partisi daftar s menjadi tiga bagian sehingga masing-masing bagian memiliki jumlah paling .a 1 , a 2 , , a kSebuah1, a2, ... , aka iasaya i sayas = 13 (+ k i = 1 ai)s = 13(+ ¢ki = 1Sebuahsaya)aiSebuahsayass

Saya mengklaim bahwa masalah pengemasan dengan input dan sama dengan masalah Anda dengan daftar input . Jika memungkinkan untuk mengemas angka ke dalam tiga grup masing-masing jumlah paling banyak maka Anda dapat menggunakan sebagai angka lunak untuk membulatkan setiap jumlah menjadi tepat ; sehingga Anda memiliki partisi dari menjadi tiga kelompok sum menggunakan satu nomor lembut. Jika di sisi lain dapat dibagi menjadi tiga kelompok suma 1 , ... , a kSebuah1, ... , aka 1 , ... , a k , Sebuah1, ... , ak, a 1 , ... , a kSebuah1, ... , ak s ss sa 1 , ... , a k , Sebuah1, ... , ak, s sa 1 , ... , a k , Sebuah1, ... , ak, s ss a i smenggunakan satu nomor lembut maka daftar tersebut dapat dibagi menjadi tiga kelompok sum menggunakan sebagai jumlah yang lembut (dengan hasil dari bagian sebelumnya). Dalam hal ini pengelompokan s menjadi tiga bagian memenuhi syarat bahwa setiap bagian memiliki jumlah paling banyak .sSebuahsayas

Masalah pengepakan tanpa nomor kecil

Katakan bahwa contoh masalah pengemasan "tidak memiliki angka kecil" jika untuk setiap , . Saya mengklaim bahwa Anda dapat mengurangi masalah pengemasan menjadi masalah pengemasan tanpa jumlah kecil.i sayaa i > 2Sebuahsaya> 2

Misalkan dalam mengemas contoh masalah beberapa memiliki . WLOG misalkan adalah ini . Kemudian saya mengklaim instance masalah pengepakan setara dengan instance asli. Perhatikan bahwa nilai tetap sama dalam kedua kasus.( a 1 , , a k ) , ( a1, ... , ak) , a i Sebuahsayaa i2Sebuahsaya2 akSebuahkaiSebuahsaya(a1,,ak-1),+ak( a1, ... , ak - 1) , + akss

Tentu saja jika Anda bisa mengemas angka menjadi tiga kelompok dengan masing-masing kelompok memiliki jumlah paling maka Anda dapat pak nomor menjadi tiga kelompok dengan masing-masing kelompok memiliki sum di kebanyakan .a 1 , , a kSebuah1, ... , ak s sa 1 , , a k - 1Sebuah1, ... , ak - 1 ss

Di sisi lain, anggaplah Anda dapat mengemas angka menjadi tiga grup dengan setiap grup memiliki jumlah paling banyak . Untuk masing-masing dari tiga grup, pertimbangkan nilai dikurangi jumlah elemen dalam grup. Sebut nilai-nilai ini ; di sini adalah jumlah "ruang kosong" dalam grup . Kita tahu bahwa , total ruang kosong, sama dengan (total ruang dikurangi ruang yang digunakan ). Tetapi dengan definisia 1 , ... , a k - 1Sebuah1, ... , ak - 1 s ss se 1 , e 2 , e 3 e1, e2, e3e iesaya i sayae 1 + e 2 + e 3e1+ e2+ e3 3 s - Σ k - 1 i = 1 a i3 s - Âk - 1i = 1Sebuahsaya 3 s 3 sΣ k - 1 i = 1 a ik - 1i = 1Sebuahsaya 3 s - k - 1 i= 1 ai=ak+3 s - Âk - 1i = 1Sebuahsaya= ak+ ssak+ak<. Dengan demikian, ketiga grup memiliki total ruang kosong . Maka sejak , kita tahu bahwa total ruang kosong lebih dari . Dengan prinsip lubang merpati, setidaknya salah satu grup memiliki atau lebih banyak ruang kosong di dalamnya. Dengan demikian, kita dapat menambahkan elemen ke salah satu grup dan berakhir dengan pengemasan angka menjadi tiga grup dengan setiap grup memiliki jumlah paling banyak .Sebuahk+ 2Sebuahk< 2 3ak3 akakSebuahkakSebuahka1,,akSebuah1, ... , akss

Jadi, untuk menyelesaikan masalah Anda, cukup untuk menyelesaikan masalah pengepakan tanpa jumlah kecil.

Lemma 1

Pernyataan Lemma:

Misalkan kita dapat mempartisi ke dalam grup 1 dan 2 sehingga grup 2 memiliki jumlah elemen genap dan jumlah elemen dalam grup 1 berada dalam interval . Maka dimungkinkan untuk memajukan kelompok 2 menjadi dua subkelompok 2a dan 2b yang masing-masing memiliki jumlah paling banyak . Perhatikan bahwa grup 1, 2a, dan 2b adalah solusi dari contoh masalah pengemasan.a 1 , , a k Sebuah1, ... , ak[ s - 2 ,s][ s - 2, s ]ss

Ini buktinya.

Untuk sementara tentukan setengah dari elemen grup 2 ke subkelompok 2a dan setengah lainnya untuk subkelompok 2b. Buat kecocokan antara elemen-elemen dari dua subkelompok. Tukar pasangan ini di antara dua kelompok, satu pasang setiap kali. Jika ada elemen dalam grup 2 maka proses ini melewati dengan tepat kemungkinan partisi grup 2 menjadi subkelompok 2a dan 2b. Saya mengklaim bahwa setidaknya salah satu dari partisi tersebut memiliki kedua subkelompok dengan jumlah kurang dari .2 n 2 nn + 1 n + 1ss

Biarkan dan menjadi jumlah dari dua subkelompok (kami mengizinkan nilai-nilai ini berubah saat grup berubah).S 2 aS2 a S 2 bS2 b

Pada setiap langkah dari proses di atas, grup 2a mendapatkan satu elemen dan kehilangan elemen lainnya. Karena setiap elemen memiliki nilai antara dan , kita dapat menyimpulkan bahwa pada setiap langkah dari proses di atas, berubah paling banyak dengan .22S2aS2 a22

Juga, nilai akhir dari sama dengan nilai awal karena pada akhir proses kelompok telah sepenuhnya bertukar.S 2 aS2 a S 2 bS2 b

Misalkan menjadi nilai rata-rata dan . Perhatikan bahwa ini konstan ketika grup berubah. Kita tahu bahwa nilai awal dan akhir rata-rata ke (karena nilai awal dan akhir sama dengan nilai awal dan ). Jadi, harus berada di antara nilai awal dan akhir . Saat kami mengubah grup, nilai mengambil langkah-langkah ukuran paling banyak dari satu sisi ke yang lain. Dari ini, kita dapat menyimpulkan bahwa pada titik tertentu, nilaiA SEBUAHS 2 aS2 a S 2 bS2 b S 2 aS2 a A SEBUAHS 2 aS2 a S 2 aS2 a S 2 bS2 b A SEBUAHS 2 aS2 a S 2 a S2 a22 ASEBUAHS2aS2 a harus berada dalam setengah dari ukuran langkah maksimum ( ) dari . Karena selalu memiliki jarak yang sama dari seperti , kita dapat menyimpulkan bahwa pada beberapa titik, keduanya menjumlahkan dan berada dalam dari .44 ASEBUAHS2bS2 bASEBUAHS2aS2 aS2aS2 aS2bS2 b44 ASEBUAH

3 s - - ( S 2 a + S 2 b ) 3 s - - ( S2 a+ S2 b) adalah jumlah dari elemen grup 1; dengan demikian, (berdasarkan kondisi jumlah grup 1). Penyusunan ulang, kami memilikinya . Oleh karena itu, rata-rata dan paling banyak adalah . Kemudian pada saat yang baik dan berada dalam dari , kita melihat bahwa mereka berdua paling seperti yang diinginkan.3 s - - ( S 2 a + S 2 b ) s - 23 s - - ( S2 a+ S2 b) s - 2 (S2a+S2b)2s-2(S2a+S2b)2s2 S2aS2aS2bS2bs-4s4 S2aS2aS2bS2b44 AAss

Kasus 1:k = 3 nk=3n

Jumlahkan terkecil dan juga terbesar .n nsebuah iai n na iai

Jika jumlah terkecil hingga lebih dari , maka tidak ada grup yang dapat memiliki atau lebih elemen (karena pilihan apa pun dari elemen akan menghasilkan jumlah yang terlalu besar). Tetapi prinsip lubang merpati memberi tahu kita bahwa setidaknya satu kelompok memiliki setidaknya elemen. Jadi, dalam hal ini tidak ada solusi untuk contoh masalah pengepakan.n na iai s sn nn nnn

Jika terbesar s sum untuk paling , maka setiap pilihan elemen memiliki jumlah paling . Dalam hal ini, cukup mempartisi elemen menjadi tiga kelompok dengan ukuran yang sama memecahkan contoh masalah pengepakan.n na iai s sn nss

Satu-satunya kasus yang tersisa adalah bahwa elemen terkecil dijumlahkan paling banyak dan elemen terbesar berjumlah lebih dari . Seperti dalam lemma, kita dapat secara perlahan bertransisi antara dua set ini: mulai dengan sebuah grup yang diinisialisasi dengan elemen terkecil dan elemen swap hingga grup memiliki elemen terbesar . Setiap langkah menggerakkan jumlah grup paling banyak (dengan logika yang sama seperti dalam bukti lemma) dan jumlah melintasi nilai pada beberapa titik dalam proses ini. Oleh karena itu, baik segera sebelum atau segera setelah melewati nilai , jumlahnya kurang darin ns sn ns sn nn n22 sssssstetapi paling banyak kurang dari . Dengan kata lain, pada titik tertentu dalam proses ini, grup memiliki jumlah dalam interval . Ambil grup itu sebagai grup 1 dan elemen sisanya sebagai grup 2. Lemma berlaku, memungkinkan kami untuk menemukan solusi untuk contoh masalah pengemasan.22 [s-2 ,s][s2,s]2n2n

Kasus 2:k = 3 n + 1k=3n+1

Jumlah terkecil dan juga terbesar .n + 1 n+1a iai n + 1 n+1a iai

Jika jumlah terkecil hingga lebih dari , maka tidak ada grup yang dapat memiliki elemen atau lebih (karena setiap pilihan elemen akan menghasilkan jumlah yang terlalu besar). Tetapi prinsip lubang merpati memberi tahu kita bahwa setidaknya satu kelompok memiliki setidaknya elemen. Jadi, dalam hal ini tidak ada solusi untuk contoh masalah pengepakan.n + 1 n+1a iai s sn + 1 n+1n + 1 n+1n + 1n+1

Jika jumlah terbesar hingga paling banyak , maka setiap pilihan elemen memiliki jumlah paling banyak . Dalam hal ini, cukup mempartisi elemen menjadi tiga kelompok ukuran , , dan memecahkan contoh masalah pengepakan.n + 1 n+1a iai s sn + 1 n+1s sn nn nn + 1n+1

Satu-satunya kasus yang tersisa adalah bahwa elemen terkecil berjumlah paling banyak dan elemen terbesar berjumlah lebih dari . Seperti pada kasus sebelumnya, kita dapat secara perlahan melakukan transisi antara dua set ini: mulai dengan sebuah grup yang diinisialisasi dengan elemen terkecil elemen swap hingga grup memiliki elemen . Setiap langkah menggerakkan jumlah grup paling banyak (dengan logika yang sama seperti dalam bukti lemma) dan jumlah melintasi nilai pada beberapa titik dalam proses ini. Oleh karena itu, baik segera sebelum atau segera setelah melewati nilai , jumlahnya kurang darin + 1 n+1s sn + 1 n+1s sn + 1 n+1n + 1 n+122 ssssss tetapi paling sedikit kurang dari . Dengan kata lain, pada titik tertentu dalam proses ini, grup memiliki jumlah dalam interval . Ambil grup itu sebagai grup 1 dan elemen sisanya sebagai grup 2. Lemma berlaku, memungkinkan kami untuk menemukan solusi untuk contoh masalah pengemasan.22 [s-2 ,s][s2,s]2n2n

Kasus 3: subcase mudah pertamak = 3 n + 2k=3n+2

Jumlahkan s terkecil dan terbesar .n nsebuah iai n na iai

Jika salah satu nilai berada dalam interval , segera terapkan lemma dengan pilihan elemen sebagai grup 1 dan elemen sisanya sebagai grup 2. Ini memungkinkan kita untuk menemukan solusi untuk contoh masalah pengepakan.[ s - 2 ,s][s2,s]nn2n+22n+2

Jika jumlah terkecil menjadi kurang dari dan jumlah terbesar menjadi lebih dari maka kita dapat mulai dengan terkecil dan menukar elemen hingga kita berakhir dengan the terbesar s. Pada setiap langkah jumlah bergerak paling banyak , jadi pada beberapa titik dalam proses ini kami memiliki sekelompok elemen yang jumlahnya berada dalam interval . Ambil grup itu sebagai grup 1 dan sisanyan na iai s - 2s2 nnaiaissnnaiainnaiai22 nn[s-2 ,s][s2,s]2n+22n+2 elemen sebagai grup 2. Lemma berlaku, memungkinkan kami untuk menemukan solusi untuk contoh masalah pengepakan.

Jika jumlah terkecil hingga lebih dari , maka tidak ada grup yang dapat memiliki atau lebih elemen (karena pilihan apa pun dari elemen akan menghasilkan jumlah yang terlalu besar). Tetapi prinsip lubang merpati memberi tahu kita bahwa setidaknya satu kelompok memiliki setidaknya elemen. Jadi, dalam hal ini tidak ada solusi untuk contoh masalah pengepakan.n na iai s sn nn nn + 1n+1

Satu-satunya kasus yang tersisa adalah bahwa terkecil dan terbesar menambahkan kurang dari .n nn na iai s - 2s2

Kasus 3: subkunci mudah keduak = 3 n + 2k=3n+2

Jumlah terkecil dan terbesar .n + 2 n+2a iai n + 2 n+2a iai

Jika salah satu nilai berada dalam interval , segera terapkan lemma dengan pilihan elemen sebagai grup 1 dan elemen sisanya sebagai grup 2. Hal ini memungkinkan kami untuk menemukan solusi untuk contoh masalah pengepakan.[ s - 2 ,s][s2,s]n+2n+22n2n

Jika jumlah terkecil menjadi kurang dari dan jumlah terbesar hingga lebih dari maka kita dapat mulai dengan terkecil dan swap elemen sampai kita berakhir dengan terbesar . Pada setiap langkah jumlah bergerak paling banyak , jadi pada beberapa titik dalam proses ini kami memiliki sekelompok elemen yang jumlahnya berada dalam interval . Ambil grup itu sebagai grup 1 dan sisanyan + 2 n+2a iai s - 2s2 n+2n+2aiaissn+2n+2aiain+2n+2aiai22 n+2n+2[s-2 ,s][s2,s]2n2n elemen sebagai grup 2. Lemma berlaku, memungkinkan kami untuk menemukan solusi untuk contoh masalah pengepakan.

Jika terbesar s sum untuk paling , maka setiap pilihan elemen memiliki jumlah paling . Dalam hal ini, cukup mempartisi elemen menjadi tiga kelompok ukuran , , dan memecahkan contoh masalah pengepakan.n + 2 n+2a iai s sn + 2 n+2s sn nn + 1 n+1n + 1n+1

Satu-satunya kasus yang tersisa adalah bahwa terkecil dan terbesar ditambahkan ke lebih dari .n + 2 n+2n + 2 n+2a iai ss

Kasus 3: hard subcasek = 3 n + 2k=3n+2

Misalkan tidak satu pun dari dua sub-bagian di atas menangani instance. Maka kita tahu yang berikut:

  • baik terkecil dan terbesar s add kurang dari .n nn na iai s - 2s2
  • baik terkecil dan terbesar menambah lebih dari .n + 2 n+2n + 2 n+2a iai ss

Karena terkecil ditambahkan ke lebih dari , tidak ada grup yang dapat memiliki atau lebih elemen. Satu-satunya cara untuk mencapai hal ini adalah jika kelompok memiliki ukuran , , dan .n + 2 n+2a iai s sn + 2 n+2n nn + 1 n+1n + 1n+1

Perhatikan bahwa karena terbesar ditambahkan kurang dari , tidak masalah elemen apa saja yang ada di grup ukuran : grup itu akan memiliki jumlah lebih sedikit daripada . Jelas, kita dapat memodifikasi solusi apa pun dengan menukar terbesar ke dalam kelompok ukuran . Swap ini hanya mengurangi jumlah dari dua kelompok lain, sehingga terdapat solusi untuk packing masalah misalnya jika dan hanya jika ada solusi di mana terbesar bentuk s salah satu kelompok.n na iai s - 2s2 nnssnnaiainnnnaiai

Dengan demikian, tugas yang ada hanyalah ini: apakah mungkin untuk mempartisi terkecil menjadi dua kelompok ukuran sehingga masing-masing dari kedua kelompok memiliki jumlah paling banyak . WLOG menganggap bahwa s dalam urutan yang meningkat sehingga terkecil adalah2 n + 2 2n+2a iai n + 1 n+1s sa iai 2 n + 2 2n+2a i aia 1 , , a 2 n + 2a1,,a2n+2

Biarkan menjadi rata-rata dari terbesar . Biarkan untuk setiap . Kemudian .v vn na i aix i = v - a ixi=vai i i3 s = + 3 n + 2 i = 1 a i = + 2 n + 2 i = 1 a i + 3 n + 2 i = 2 n + 2 a i = + 2 n +2 i = 1 (v-xi)+nv=+(3n+2)v- 2 n + 2 i = 1 (xi)=(-v)+(3n+3)v- 2 n + 2 i = 1 (xi )3s=+3n+2i=1ai=+2n+2i=1ai+3n+2i=2n+2ai=+2n+2i=1(vxi)+nv=+(3n+2)v2n+2i=1(xi)=(v)+(3n+3)v2n+2i=1(xi)

Kemudian .s = ( n + 1 ) v + - v3 -13 2 n + 2 i = 1 (xi)s=(n+1)v+v3132n+2i=1(xi)

Jika kita memilih beberapa indeks dari indeks, maka jumlah s dengan sama dengan . Satu set indeks adalah pilihan yang valid untuk salah satu grup asalkan jumlah ini paling banyak . Dengan kata lain, menggunakan definisi alternatif diturunkan di atas, kondisi yang kami minati adalah . Jelas, indeks juga harus memenuhi ketentuan ini:Aku In + 1 n+1a iai i I iIΣ i I a i = Σ i I v - x i = ( n + 1 ) v - Σ i I x iiIai=iIvxi=(n+1)viIxi I Is ss sΣ i I x i13 2 n + 2 i = 1 (xi)--v3iIxi132n+2i=1(xi)v3 n+1n+1I={1,,2n+2}IiIxi13 2 n + 2 i = 1 (xi)--v3 ΣiI'xi=Σ 2 n + 2 i = 1 xi-ΣiIxiΣiIxi2 . Karena , kita dapat menulis ulang kondisi kedua sebagai .3 2 n + 2 i = 1 (xi)+-v3

Jadi kami telah menyatakan kembali subproblem ini menggunakan alternatif yang setara: kami mencoba untuk memilih satu set dari indeks di antara sedemikian rupa sehingga .I n + 1 { 1 , , 2 n + 2 } 23 2 n + 2 i = 1 (xi)+-v3iIxi13 2 n + 2 i = 1 (xi)--v3

Perhatikan bahwa (dan karena itu ) karena adalah rata-rata dari beberapa dan adalah batas atas pada semua . Biarkan . Kondisi kami di atas dapat ditulis ulang sebagai berikut: pilih satu set dari indeks di antara sehingga berada dalam interval mana .v - v 0 v a ia i X = 2 n + 2 i = 1 ( x i ) I n + 1 { 1 , , 2 n + 2 } i I x i [ c X , ( 1 - c ) X ] c =13 --v3 X13

Misalkan untuk beberapa , memiliki nilai setidaknya . Dalam hal ini, izinkan terdiri dari indeks dan juga indeks sesuai dengan s terkecil . Jika ini ditambahkan paling banyak maka pilihan memenuhi batasan di atas: jumlah setidaknya dan paling . Dengan demikian, kumpulan indeks ini dapat digunakan untuk memilih salah satu kelompok ukuranj x j X3 Ijn-1xixi(1-c)XIiIxixjX3 =13 XcX(1-c)XIn+1dalam solusi untuk contoh masalah pengepakan. Di sisi lain, jika ini menambahkan lebih dari maka instance tidak dapat diselesaikan: salah satu dari dua bagian akan termasuk dan jumlah setengahnya akan selalu lebih dari (karena lebih dari itu bahkan ketika kita meletakkan elemen terkecil dengan ).xi(1-c)Xxj(1-c)Xxj

Jadi, kami telah menangani kasus bahwa beberapa memiliki nilai setidaknya . Kasus yang tersisa adalah bahwa setiap memiliki nilai paling banyak . Kemudian tetapkan untuk dua grup, 1 dan 2, secara sewenang-wenang. Buat elemen yang cocok dari dua kelompok dan tukar pasangan itu satu pasang pada suatu waktu. Selama proses ini, jumlah elemen grup 1 akan berpindah dari jumlah awal itu ke jumlah awal elemen grup 2. Dengan kata lain, jumlah grup 1 akan melewati nilai rata-rata . Setiap langkah dalam proses ini melibatkan grup 1 yang kehilangan dan mendapatkannya; karena memiliki nilai paling banyakx j X3 xiX3 xiX2 xixiX3 , sepasang berbeda paling banyak dan setiap langkah menggerakkan jumlah grup 1 paling banyak . Dengan demikian, akan ada beberapa poin dalam proses tersebut ketika jumlah kelompok 1 berada dalam setengah ukuran langkah maksimum rata-rata. Dengan demikian, pada titik tertentu jumlah grup 1 akan termasuk dalam . Tetapi ini adalah interval , yang merupakan subinterval dari . Jadi, pada titik tertentu selama proses ini, grup 1 pada saat itu akan memenuhi kondisi yang kita inginkan. Kita dapat menggunakan grup untuk memilih grup yang sesuai dari ; ini xiX3 X3 X2 ±X6 [13 X,23 X][cX,(1-c)X]xiaiain+1Bentuk salah satu dari dua kelompok ukuran diperlukan untuk menyelesaikan contoh masalah pengepakan.

Kesimpulan

Kasus kerja lengkap di atas dapat digunakan sebagai algoritme untuk mempartisi daftar menjadi tiga kelompok dengan jumlah yang sama menggunakan satu nomor lunak. Kasus ini juga akan mengidentifikasi saat ini tidak mungkin. Runtime dari algoritma ini bersifat polinomial.


Terima kasih! Bukti Lemma 1 dapat dipersingkat: pesan elemen grup 2 dengan meningkatkan pesanan. Biarkan grup 2a menjadi elemen indeks aneh dan grup 2b elemen indeks rata. Setiap elemen dalam 2a lebih kecil dari elemen berikutnya yaitu 2b, jadi . Di sisi lain, jika kita menghapus elemen terkecil dari 2a dan elemen terbesar dari 2b, jumlah elemen yang tersisa di 2a setidaknya jumlah elemen yang tersisa di 2b. Jadi elemen minus terbesar terkecil = . Dengan asumsi, . Menjumlahkan ketidaksetaraan menghasilkan . S 2 bS 2 a S 2 b - S 2 al / 2 S 2 b + S 2 a2 s - l / 2 S 2 bs
Erel Segal-Halevi

Pertanyaan: Anda menyebutkan sub-masalah: "apakah mungkin untuk mempartisi -s terkecil menjadi dua kelompok dengan ukuran sehingga masing-masing dari kedua kelompok memiliki jumlah paling banyak ?". Mengapa masalah ini tidak sesulit masalah PARTISI? 2 n + 2 a i n + 1 s
Erel Segal-Halevi

Anda benar, bukti Lemma 1 saya tidak sesederhana mungkin. Saya agak terlalu malas untuk memasukkan suntingan (terutama karena bagian lain dari bukti referensi teknik yang digunakan dalam bukti). Adapun sub-masalah, alasannya tidak sesulit PARTISI adalah bahwa Anda tidak benar-benar harus menyelesaikan subproblem itu secara umum penuh: nilai tidak sembarang. Untuk masuk ke dalam kasus itu, ada batasan tambahan khusus pada dan pada yang harus dipegang. Jika kendala ini hilang, Anda akan benar: masalahnya akan sama sulitnya dengan PARTISI. s s a i
Mikhail Rudoy

Terima kasih banyak atas solusi yang jelas dan terperinci.
Erel Segal-Halevi

Hai Mikhail, kami sedang mengerjakan kertas yang hasilnya bermanfaat. Anda ingin bergabung? Jika demikian maka silakan kirimi saya email.
Erel Segal-Halevi

3

Jawaban ini tidak menyelesaikan pertanyaan. Ini hanya menyelesaikan masalah tambahan berikut yang diformulasikan oleh @JohnDvorak dalam komentar (mempartisi satu set dalam rasio 1: 2):

Masalah bantu:
Instance: Rasional positif dengan . Pertanyaan: Apakah ada set indeks dengan ?a 1 , , a m m i = 1 a i = 3 A I { 1 , , n } i I a i = A

  • Ambil contoh PARTISI klasik (rasional dengan jumlah , dapatkah Anda membaginya menjadi dua grup dengan jumlah ).b 1 , , b n 2 B B
  • Ambil bersama dengan empat angka untuk membuat turunan masalah tambahan. Jumlah dari semua angka adalah , sehingga .b 1 , , b n 5 B , 5 B , 5 B , 7 B n + 4 24 B A = 8 B
  • Memisahkan angka menjadi grup dengan jumlah dan grup dengan jumlah dimungkinkan jika dan hanya jika instance PARTISI telah menjawab YA.n + 4 A = 8 B 2 A = 16 B

Karenanya masalah tambahan @ JohnDvorak adalah NP-complete


Hai Gamow, kami sedang mengerjakan kertas yang hasilnya mungkin bermanfaat. Anda ingin bergabung? Jika demikian maka silakan kirimi saya email.
Erel Segal-Halevi

3

Sunting: Hasilnya salah, lihat pembahasan di bagian akhir.

Terinspirasi oleh jawaban Mikhail Rudoy, ​​kita dapat menggeneralisasi untuk mempartisi menjadi bagian dengan jumlah yang sama. Masalahnya adalah waktu polinomial yang dapat dipecahkan untuk setiap konstanta .k k

Inputnya sedemikian rupa sehingga adalah angka terbesar. Pengamatan Mikhail adalah, wlog,a 1 , , a n a n

  • angka adalaha n
  • a i > a nk - 1 untuk setiap i

wlog, asumsikan bahwa jumlah adalah (yaitu, ). Perhatikan bahwa , jadi untuk setiap . Masalahnya sama dengan mempartisi angka menjadi himpunan bagian sehingga jumlah setiap subset paling banyak adalah .a 1 , , a n - 1 1 1 = k s - a n a n1n - 1 ai>1( k - 1 ) ( n - 1 ) >1k n ia1,,an-1ks:=1+ank

Kami menganggap pembatasan masalah beberapa ransel . Definisikan masalah knapsack sebagai instance dari masalah knapsack ganda dengan knapsack dengan kapasitas yang sama, di mana nilai setiap item sama dengan berat item.k k

Biarkan input untuk masalah -knapsack menjadi , dan masing-masing ransel memiliki kapasitas . Klaim berikut jelas.k a 1 , , a n - 1 s

Klaim : A -aplikasi algoritma untuk masalah -kembali mengembalikan , jika dan hanya jika semua angka dapat dimasukkan ke dalam ransel.( 1 - 1k n )k1a1,,an-1k

Dengan klaim di atas, kita hanya perlu menemukan algoritma untuk masalah -knapsack.( 1 - 1k n )k

Klaim : Ada algoritma waktu pseudopolinomial untuk knapsack menggeneralisasi untuk -knapsack untuk setiap konstan .k k

Bukti : Tentukan menjadi nilai maksimum menggunakan elemen , di mana ransel memiliki kapasitas . Relasi perulangan adalah . Kasing sederhana. Waktu berjalan adalah .D [ b 1 , ... , b k , i ] a 1 , ... , a i b 1 , ... , b k D [ b 1 , ... , b k , i + 1 ] = maks ( maks j ( D [ b 1 , ... , b j - sebuah i + 1 ,bk,i])+ai+1,D[b1,,bk,i])O(skkn)

Merupakan standar untuk mendapatkan FPTAS dengan menskalakan semua angka dan bulat ke bilangan bulat, lihat bagian 5 dari ini . Ini berarti kita dapat menemukan -approximation to -knapsack problem dalam waktu polinomial. Oleh karena itu untuk setiap konstanta , masalah aslinya dapat diputuskan dalam waktu polinomial.(11kn)kk

Di atas tidak benar, karena algoritma waktu pseudopolinomial tidak berubah menjadi FPTAS. Namun, pendekatan ini mungkin masih memberi kita beberapa wawasan karena kami memiliki kasus masalah -knapsack yang sangat spesial .k


Saya menemukan makalah ini: epubs.siam.org/doi/abs/10.1137/S0097539700382820 yang menunjukkan PTAS untuk multple-knapsack. Bagaimana Anda mendapatkan FPTAS darinya? (maksud Anda bahwa ada FPTAS untuk kasus khusus di mana nilainya sama dengan bobot?)
Erel Segal-Halevi

Saya telah membuat pembaruan. FPTAS adalah untuk kasus ketika adalah konstanta. Jika jumlah ransel adalah bagian dari input, tidak ada FPTAS. k
Chao Xu

Hai Chao, kami sedang mengerjakan kertas yang hasilnya bermanfaat. Anda ingin bergabung? Jika demikian maka silakan kirimi saya email.
Erel Segal-Halevi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.