Jika saya tahu benar, masalah jumlah subset adalah NP-complete. Di sini Anda memiliki array n bilangan bulat dan Anda diberi jumlah target t, Anda harus mengembalikan angka dari array yang dapat menjumlahkan hingga target (jika mungkin).
Tapi tidak bisakah masalah ini diselesaikan dalam waktu polinomial dengan metode pemrograman dinamis di mana kita membangun sebuah tabel n X t dan mengambil kasus-kasus seperti mengatakan angka terakhir pasti termasuk dalam output dan kemudian target menjadi t-a [n]. Dalam kasus lain, angka terakhir tidak termasuk, maka target tetap sama tetapi array menjadi ukuran n-1. Karena itu dengan cara ini kami terus mengurangi ukuran masalah.
Jika pendekatan ini benar, bukankah kerumitan n * t ini, yang jumlahnya banyak? dan jadi jika ini milik P dan juga NP-complete (dari apa yang saya dengar) maka P = NP.
Tentunya, saya kehilangan sesuatu di sini. Di mana celah dalam alasan ini?
Terima kasih,
Jawaban:
Logika Anda benar - dan apa yang Anda uraikan adalah algoritma subset-sum yang valid yang menyelesaikannya
O(nt)
.Namun, jenis algoritma ini adalah pseudopolinomial , yang berarti bahwa itu eksponensial dengan jumlah bit yang digunakan untuk mewakili input. Artinya, jika Anda
t
adalah 1000, maka saya dapat membuat program Anda 10 kali lebih lambat dengan menambahkan 0 lainnya (t
sekarang 10.000).Jadi sementara algoritma adalah polinomial dengan nilai dari
n
dant
, itu adalah eksponensial dengan ukuran dari input (jumlah karakter, bit, apa pun yang Anda ingin memanggil mereka, di input).Dan karenanya, masalah ini bukan di P (kecuali P = NP atau yang serupa).
Sumber dan bacaan lebih lanjut
sumber