Masalah ransel - NP-lengkap meskipun solusi pemrograman dinamis?

52

Masalah ransel mudah dipecahkan oleh pemrograman dinamis. Pemrograman dinamis berjalan dalam waktu polinomial; itu sebabnya kami melakukannya, kan?

Saya telah membaca itu sebenarnya adalah masalah NP-lengkap, yang berarti menyelesaikan masalah dalam masalah polinomial mungkin tidak mungkin.

Di mana kesalahan saya?

Strin
sumber
5
Perlu diingat bahwa DP adalah polinomial dalam "ukuran tabel". Tabel ini besar secara eksponensial untuk Knapsack (lihat jawaban Kaveh).
Raphael

Jawaban:

41

Masalah ransel adalah NP-complete ketika angka diberikan sebagai angka biner . Dalam hal ini, pemrograman dinamis akan mengambil banyak langkah secara eksponensial (dalam ukuran input, yaitu jumlah bit dalam input) untuk menyelesaikan .

Di sisi lain, jika angka-angka dalam input diberikan secara unary, pemrograman dinamis akan bekerja dalam waktu polinomial (dalam ukuran input).

Masalah seperti ini disebut lemah NP-complete .

2nnnnlgnO(n)=O(2lgn/2)

Algoritma semacam ini, yaitu polinomial dalam jumlah terbesar yang merupakan bagian dari input, tetapi eksponensial dalam panjang input disebut pseudo-polinomial .

Kaveh
sumber
Tapi pikirkan benda yang akan diletakkan di ransel. Objek harus berupa input dan input semacam itu harus jumlahnya banyak dengan jumlah objek. Jika objek cukup banyak, maka inputnya jumlahnya banyak dengan ukuran masalah. Jadi mengapa saya tidak bisa mengatakan bahwa Masalah Knapsack adalah masalah P dalam hal ukuran tabel? Apakah aku salah?
Strin
mm2lgmm
Bisakah Anda memecah input menjadi input yang lebih kecil yang pengkodean binernya memiliki ukuran yang menyelesaikan algoritma dalam waktu polinomial kemudian menggabungkan solusinya?
Char
@ Kaveh "Ukuran input kira-kira 2 lg m" Saya tidak mengerti dari mana Anda mendapatkan bagian itu. Hubungan antara m(ukuran paket) dan n(jumlah item) sama sekali tidak diketahui, bukan? Dan kembali "ketika angka diberikan sebagai angka biner" ... tetapi tidak bisakah Anda mengatakannya untuk sesuatu? Dengan sebagian besar algoritma, kami berbicara tentang ukuran input di basis 10. Mengapa berbicara tentang biner di sini? Dan apakah Anda menyandikan dalam biner, oktal, desimal, dll ... actualberapa kali Anda mengulangi melalui loop algoritma utama Anda secara langsung tergantung pada keduanya ndan W.
The111
1
@ The111, saya pikir lebih baik jika Anda memposting itu sebagai pertanyaan baru dan saya akan mengirim jawaban. Saya pikir pertanyaan Anda lebih mendasar dan tidak ada komentar yang terkait dengan pertanyaan ini.
Kaveh
33

Kebingungan utama terletak pada perbedaan antara " ukuran " dan " nilai ".

" Waktu Polinomial " menyiratkan polinomial wrt ukuran input.

" Waktu Pseudopolinomial " menyiratkan polinomial wrt nilai input. Dapat ditunjukkan (di bawah) bahwa ini setara dengan eksponensial dengan ukuran input.


NsizeNval

O(Nsizex)xN

O(Nvalx)xN

O(nW)W

Nsize=Logb(Nval)NvalbNval

Nval=bNsize

Nsize

O(bxNsize)b,xN

bcorso
sumber
7
Buat akun di sini hanya untuk mengucapkan terima kasih banyak! Hanya setelah contoh Anda, saya akhirnya mengerti.
Inoryy
2
Jawaban Anda mengalahkan semua orang, bravo!
Muhammad Razib
1
Untuk menambah jawaban hebat ini, kita dapat mengatakan bahwa jika kita mengubah W dari 100 menjadi 101 ukuran masalahnya tidak meningkat, ukurannya bertambah jika kita menambahkan bit lain ke W yang membuatnya dua kali lebih besar, sehingga tabel akan memiliki dua kali lebih banyak baris dan oleh karena itu dengan meningkatkan ukuran satu, waktu masalah menjadi dua kali lipat, itulah sebabnya itu eksponensial.
Amin
@ bcorso Misalkan Anda diberi nilai N. Dan Anda harus menemukan jumlah angka dari 1 hingga N dan Anda menggunakan metode loop, itu akan menjadi algoritma Waktu pseudopolinomial?
DollarAkshay
8

P=NP

Namun, ada berbagai varian (mis., 0-1 Knapsack dan lainnya ) yang mungkin atau mungkin tidak memiliki solusi waktu polinomial atau perkiraan yang baik. Tapi ini tidak sama dengan masalah Knapsack umum. Juga, mungkin ada algoritma efisien yang bekerja untuk instance (keluarga) tertentu , tetapi algoritma ini akan membutuhkan waktu lebih lama pada instance lain.

Ran G.
sumber