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?
Jawaban:
Masalah ransel adalahNP-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 lemahNP-complete .
Algoritma semacam ini, yaitu polinomial dalam jumlah terbesar yang merupakan bagian dari input, tetapi eksponensial dalam panjang input disebut pseudo-polinomial .
sumber
m
(ukuran paket) dann
(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 ...actual
berapa kali Anda mengulangi melalui loop algoritma utama Anda secara langsung tergantung pada keduanyan
danW
.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.
sumber
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.
sumber