Untuk menunjukkan NP-hardness dari suatu masalah, seseorang perlu memilih masalah NP-hard yang diketahui dan menemukan pengurangan polinomial dari masalah yang diketahui ke masalahnya. Secara teoritis, setiap masalah NP-hard dapat digunakan untuk pengurangan, tetapi dalam praktiknya, beberapa masalah lebih mudah dikurangi daripada yang lain.
Misalnya, 3-SAT biasanya merupakan pilihan yang lebih baik untuk membangun pengurangan daripada SAT karena yang pertama lebih terbatas daripada yang terakhir, 3-partisi biasanya merupakan pilihan yang lebih mudah daripada pengepakan bin, ...
Salah satu cara untuk menemukan masalah "baik" untuk reduksi adalah dengan melakukan analisis statistik atas pengurangan yang ada. Misalnya, seseorang dapat membentuk semua pasangan from -> to
pengurangan buku Komputer dan Keterbukaan: Panduan untuk Teori Kelengkapan NP
(atau sumber daya lainnya) dan menggambar histogram dari masalah dalam from
set. Lalu kita bisa mencari tahu masalah mana yang lebih umum digunakan untuk reduksi.
Saya ingin tahu apakah analisis statistik seperti itu masuk akal sama sekali. Apakah penelitian semacam itu sudah dilakukan atau belum? Jika tidak, apa tebakan Anda tentang masalah yang paling umum digunakan untuk pengurangan.
Alasan saya mengajukan pertanyaan ini adalah bahwa saya telah melakukan beberapa bukti kekerasan NP, tetapi hampir semuanya bergantung pada pengurangan dari masalah yang sama (3-partisi). Saya mencari opsi lain untuk digunakan dalam bukti saya.
sumber
Jawaban:
Saya tidak tahu apakah ada cara mesin untuk melakukan ini, tetapi pengalaman pribadi kecil saya bekerja sebagai berikut.
Saya mencoba memberikan algoritma waktu polinomial untuk suatu masalah. Dalam percobaan tersebut biasanya saya dapat melihat ada beberapa versi terbatas dari masalah yang dapat dipecahkan dengan waktu polinomial. Saya juga akan mengerti bagian algoritma yang saya tangani untuk masalah aslinya. Saya dapat membandingkan dua kasus ini (perbedaan antara versi terbatas dan yang umum juga merupakan bagian dari algoritma yang sulit untuk diperbaiki). Dengan membandingkan kedua kasus tersebut, biasanya mungkin untuk menebak bagaimana masalah bottleneck itu. Jadi kita bisa menemukan masalah sulit terkait. Biasanya menyediakan algoritma untuk suatu masalah adalah pekerjaan berat, dan membutuhkan pengetahuan yang baik tentang suatu masalah. Setelah kita mendapatkan pengetahuan tentang masalah ini, kita dapat memiliki banyak ide berbeda untuk mengatasi masalah dalam skenario yang berbeda (bukan hanya hasil kekerasan).
PS: Kalau buktinya ada pada masalah tertentu, saya kira itu karena masalah itu sangat dekat dengan pekerjaan Saudara, jadi jangan salahkan diri sendiri.
sumber