Kompleksitas varian jumlah subset

9

Apakah varian masalah jumlah subset ini mudah / diketahui?

Dengan bilangan bulat , dan satu set bilangan bulat positif sedemikian rupa sehingga setiap x_i memiliki paling banyak k = 2 bit diatur ke 1 ( x_i = 2 ^ {b_ {i_1} } + 2 ^ {b_ {i_2}}, \; \; b_ {i_1}, b_ {i_2} \ geq 0 ); apakah ada himpunan bagian A '\ subseteq A sehingga jumlah unsur-unsurnya sama dengan m ?mx i k = 2 1 x i = 2 b i 1 + 2 b i 2 ,A={x1,x2,...,xn}xik=21A A mxi=2bi1+2bi2,bi1,bi20AAm

Apakah itu di P ? Apakah masih NP lengkap } ?

Dan jika setiap xi memiliki paling banyak k=3 bit diatur ke 1 ? Untuk k=1 masalahnya adalah sepele.

Vor
sumber

Jawaban:

8

Itu masih NP -lengkap, bahkan untuk k=2 . Diberikan contoh jumlah himpunan bagian, kita dapat mengubahnya ke varian ini dengan memisahkan angka-angka dan menambahkan beberapa bit tambahan.

Pertama, jumlah semua angka dalam masalah akan kurang dari 2m untuk beberapa nilai m .

Sekarang, mari kita ambil angka dari masalah awal yang memiliki bit set. Kami akan membagi angka ini menjadi angka dengan set tepat 2 bit sehingga jumlah angka-angka itu adalah . Kita dapat melakukan ini secara rekursif, dengan menemukan nomor yang meringkas hingga bit ditambah dan nomor yang jumlah hingga bit terakhir ditambah .k k n + 2 k + mkk2 k + m - 1kk2 k + m - 1nkkn+2k+mkk2k+m1kk2k+m1

Selain nomor itu, kami juga akan menambahkan angka ke masalahnya. Suatu solusi harus mengandung angka ini atau semua angka dibangun sebelumnya. Jika nilai target asli adalah , nilai target baru adalah . k t t + 2 k + m2k+mktt+2k+m

Jika masalah awal memiliki lebih dari satu angka, kita dapat mengulangi proses ini dengan mengambil untuk nilai baru .mk+m+1m

Hanya ada dua cara bit pada posisi dapat diatur: jawabannya dapat berisi angka atau semua angka yang berjumlah . Jadi kami telah mengurangi jumlah subset ke varian jumlah subset Anda.2 k + mk+m2k+mn + 2 k + mkn+2k+m

Sebagai contoh, mari kita ambil dengan nilai target . Masalah ini dapat dikodekan sebagai varian jumlah subset yang disajikan di sini dengan mengambil nomor biner berikut: 7{2,3,5}7

2 dipetakan ke dan . (Menggunakan bit ekstra tidak sepenuhnya diperlukan di sini.)0000 10100 10000 1

3 dipetakan ke dan0000 00 011000 00 1,0100 00 10000 00 01

5 dipetakan ke dan .1000 00 000 1,0010 00 000 10000 00 000 01

Nilai target baru akan menjadi .1110 10 010 01

Jika masalah asli direpresentasikan dengan bit, maka masalah yang ditransformasi memiliki paling banyak bit. Masalah aslinya akan memiliki paling banyak angka masing-masing dengan paling banyak bit, jadi jumlah semuanya juga O (n). Masalah yang ditransformasikan akan memiliki angka (karena setiap nomor bit dibagi menjadi bit, dengan panjangnya paling banyak karena kami menggunakan bit tambahan untuk setiap angka. Jadi ukuran total dari masalah yang ditransformasikan adalah bit.O ( n 4 ) O ( n ) O ( n ) O ( n 2 ) n n + 1 2 O ( n 2 ) n O ( n 4 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)

Tom van der Zanden
sumber
apakah Anda yakin bahwa penyandian tidak mengarah ke ukuran eksponensial dari pita kerja?
Vor
Tidak, saya pikir masalah yang ditransformasikan dalam ukuran kuartik. Jika input memiliki n bit, maka ada paling banyak n angka masing-masing dengan n bit yang ditetapkan. Jadi akan ada angka O (n ^ 2) dalam masalah yang ditransformasikan (karena angka k-bit dibagi menjadi angka k + 1). Setiap angka panjang (2n) bit untuk mengakomodasi jumlah maksimal ditambah n bit untuk masing-masing nomor n dalam masalah asli. Jadi setiap angka akan memiliki bit O (2n + n ^ 2), untuk total bit O (n ^ 4).
Tom van der Zanden
@TomvaderZanden: Saya menambahkan gambar pengurangan Anda dalam pertanyaan; lihat apakah saya menafsirkannya dengan benar
Vor
@ TomvaderZanden: hari ini saya melihat pengurangan Anda lagi, tetapi tidak jelas bagaimana dari angka arbitrer dengan bit yang ditetapkan Anda dapat membaginya menjadi angka 2-bit di mana bagian "tertinggi" berjumlah . Misalkan Anda memiliki angka dengan bit yang ditetapkan; Anda memerlukan 13 angka 2-bit, tetapi 13 adalah 1101 dan Anda tidak dapat "menutupinya" dengan nomor dua bit (contoh Anda berfungsi karena untuk 3 dan 5 k = 2). Saya pikir ini dapat dengan mudah diperbaiki jika Anda menggunakan bit tinggi yang berbeda untuk masing-masing angka 2-bit; mereka akan menjumlahkan menjadi 01111 ... 1, lalu Anda menambahkan dummy 0000 ... 1 yang akan memungkinkan jumlahnya menjadi . k k 2 k n k = 13 k 2 knkk2knk=13k2k
Vor
Ini agak kabur, tetapi tentu saja mungkin menggunakan prosedur "induktif". Anda sebenarnya tidak membutuhkan bit, Anda hanya perlu . Jika Anda ingin menemukan 13 angka 1-bit yang menjumlahkan hingga , maka Anda perlu menemukan 6 angka yang menjumlahkan hingga dan 7 yang juga menjumlahkan hingga . Kita dapat mengambil yang memang berjumlah hingga . c e i l ( log k ) 2 4 2 3 2 3 10 2 0 + 3 2 1 2 4kceil(logk)2423231020+32124
Tom van der Zanden
0

Ini adalah informasi yang diambil dari pertanyaan oleh Vor.

Untuk masalahnya tetap NP-complete. Saya menemukan pengurangan cepat dari monoton X-SAT ( lihat skema pengurangan di sini ).k3

Masalahnya tetap NP-lengkap bahkan jika , lihat jawaban Tom untuk detailnya. Berikut ini adalah representasi kecil dari pengurangannya dari SUBSET SUM:k=2

masukkan deskripsi gambar di sini

Juho
sumber