Mengapa kelas NP-Complete penting dibandingkan dengan NP-hard?

19

Saya mempelajari kompleksitas komputasi dan saya bertanya-tanya mengapa masalah NP-Complete (NPC) adalah kelas yang penting sama sekali. Saya merasa jelas mengapa kami tertarik untuk menunjukkan masalah NP yang diberikan adalah NP-hard.

Saya juga mengerti definisi NPC, dan bahwa menunjukkan masalah keputusan yang diberikan adalah NP-hard, mengetahui itu dalam NP, sebenarnya adalah sarana NPC.

Namun, yang tidak saya mengerti adalah: mengapa konsep ini sangat penting? Tentunya, jika kita menemukan algoritma NP-keras yang berjalan dalam waktu P (apakah yang ada di NP), kami telah menunjukkan bahwa .NP=P

Mengapa konsep ini begitu penting?

Amnestik
sumber
3
Saya telah menghapus pertanyaan kedua Anda karena sama sekali terpisah dari yang pertama. Namun, ini adalah pertanyaan yang sangat bagus dan saya mendorong Anda untuk mengajukannya sebagai pertanyaan baru. Untuk memulihkan teks, klik tautan "diedit [kapan saja]", yang akan menunjukkan kepada Anda riwayat edit dan memungkinkan Anda menyalin-menempelkan teks.
David Richerby

Jawaban:

16

Setidaknya ada beberapa alasan mengapa NPC menarik:

  • Kelas NP mengandung banyak masalah yang menarik (baik secara praktis maupun secara teoritis), apalagi banyak dari masalah ini berubah menjadi NP-hard (dan karenanya NP-complete), tetapi banyak masalah di luar NP hampir pasti terlalu sulit untuk diselesaikan. lebih dari sekadar minat teoretis , jadi NPC menyediakan kelompok masalah (kasar) yang tampaknya sulit, tetapi tidak terlalu sulit sehingga kami tidak dapat mencoba melakukan sesuatu dengannya.
    Dengan kata lain, NPC mungkin merupakan batas dari apa yang dapat kita harapkan dapat dipecahkan polinomial-waktu, akan terasa sulit untuk mencoba PSPACE = P (misalnya).
  • Kelasnya adalah NP yang secara struktural menarik. Ini adalah contoh dasar dari "kita mendapatkan 'kecepatan' komputasi dari nondeterminisme". Jadi kami tertarik apakah P = NP atau tidak, dan NPC (mungkin) merupakan komponen penting untuk menyelesaikannya.
  • NP-hard (sebagai sebuah kelas) benar-benar terlalu besar dan bervariasi untuk ditangani sebagai satu hal, itu semua yang dapat direduksi menjadi dari masalah NP-complete , termasuk sejumlah besar hal di luar NP, jadi dari sudut pandang pandangan untuk mencoba mengembangkan hasil dan teknik umum, tidak ada yang bisa diraih.
Luke Mathieson
sumber
Karena pertanyaan awal saya diedit untuk mencerminkan judul, mungkin Anda juga harus menyembunyikan jawaban pertanyaan kedua.
Amnestic
1
NP-hard bukanlah "segala sesuatu di luar NP", karena ini termasuk (setidaknya) masalah NP-complete dalam NP. Saya mengerti apa yang Anda maksud, tetapi tidak tahu bagaimana menyatakannya dengan lancar.
vonbrand
@vonbrand, ya, saya terlalu melebih-lebihkan (tentang kegilaan mungkin?). Versi baru ini akurat, tetapi sayangnya rasanya tidak begitu.
Luke Mathieson
9

Dari sudut pandang seseorang yang menulis kode untuk mencari nafkah, memiliki keakraban yang baik dengan kelengkapan NP adalah penting untuk:

1. Mengenali saat Anda menggonggong pohon yang salah

Masalah NP-complete adalah yang paling mudah dari masalah NP-hard, namun sejauh yang kami tahu, butuh waktu yang eksponensial dengan ukuran input untuk menyelesaikan masalah keputusan seperti itu. Jadi, sebagai hal praktis jika Anda dapat menunjukkan bahwa masalah yang Anda coba selesaikan adalah NP-hard (biasanya dengan menunjukkan bahwa solusi yang efisien untuk itu juga akan memberikan solusi yang efisien untuk beberapa masalah NP-complete), Anda tahu bahwa Anda dapat berhenti mencari algoritma yang efisien untuk menyelesaikannya secara umum. Sebagai gantinya, Anda dapat memilih dari algoritma yang dikenal yang menjanjikan perkiraan yang baik untuk masalah optimasi NP-hard dan melanjutkan sisa proyek Anda.

2. Menemukan pohon yang tepat

Karena komputer sering digunakan untuk menyerang masalah NP-hard, pemecah khusus telah dikembangkan yang secara efisien dapat menyelesaikan beberapa contoh masalah NP-hard. Mengenali bahwa masalah Anda adalah NP-complete adalah langkah pertama menuju menemukan alat yang ada (SAT, ILP, SMT, CSP untuk beberapa nama) yang mungkin membantu Anda menemukan solusi yang tepat dalam beberapa kasus di mana Anda sebaliknya harus puas dengan suatu perkiraan.

Kyle Jones
sumber
-4

"Tentunya, jika kita menemukan algoritma NP-hard yang berjalan dalam waktu P (apakah itu dalam NP), kami telah menunjukkan bahwa NP = P. Mengapa konsep ini sangat penting?"

Setiap masalah NP berkurang menjadi masalah NPC, tetapi tidak benar bahwa setiap masalah NP berkurang menjadi masalah NP-hard, jadi membuktikan algoritma NP-hard dalam P tidak membuktikan P = NP sama sekali. Akan tetapi, untuk masalah NPC, itulah yang berarti "mengurangi". Jadi, jika kita menemukan algoritma P untuk masalah NPC, maka, kita akan membuktikan bahwa P = NP.

anonim
sumber
3
XX