Saya sedang membaca pertanyaan di Stack Overflow menanyakan apakah NP -hard mendaftar semua siklus sederhana dalam grafik yang berisi simpul tertentu dan terpikir oleh saya bahwa saya tidak bisa memikirkan kelas kompleksitas yang ada yang cocok untuk berbicara tentang masalah pada formulir "daftar semua solusi untuk masalah ini." NP kelas dalam beberapa hal terdiri dari masalah yang menanyakan apakah setidaknya ada satu solusi, kelas FNP meminta untuk menghasilkan solusi tunggal, dan kelas #P meminta untuk menghitung berapa banyak solusi yang ada, namun tidak satupun dari ini berurusan dengan kompleksitas secara lengkap menyebutkan semua solusi yang mungkin.
Apakah ada kelas kompleksitas untuk menggambarkan masalah yang berbentuk "diberi predikat computable polinomial-time dan string , sebutkan semua y yang P ( x , y ) benar-benar tunduk pada [masukkan beberapa batasan kompleksitas yang sesuai]? " Saya mengerti bahwa mungkin sulit untuk menjabarkan pembatasan yang diberikan bahwa jumlah solusi mungkin secara eksponensial lebih besar daripada ukuran input x , meskipun itu tampaknya tidak dapat diatasi.
sumber
Jawaban:
Konsep yang Anda cari disebut kompleksitas enumerasi , yang merupakan studi tentang kompleksitas komputasi enumerasi (daftar) semua solusi untuk masalah (atau anggota bahasa / set). Algoritma enumerasi dapat dimodelkan sebagai proses dua langkah: langkah pra - komputasi dan fase enumerasi dengan penundaan . Kedua langkah ini memiliki kompleksitas ruang dan waktu mereka sendiri (mungkin juga entropi). Dalam semangat kerumitan yang umum, sering kali ada pertukaran antara hal-hal ini untuk dipertimbangkan.
Langkah precomputation melakukan beberapa pekerjaan yang diperlukan sebelum solusi pertama disebutkan. Ini mungkin melibatkan menemukan solusi itu sendiri atau menginisialisasi beberapa struktur data besar yang akan mengurangi keterlambatan keseluruhan antara setiap solusi.
The delay adalah biaya sumber daya yang terkait dengan perhitungan yang diperlukan di antara solusi enumerasi sewenang-wenang. Dengan kata lain, penundaan adalah ukuran ruang dan waktu yang diperlukan untuk menghasilkan solusi setelah i t h satu. Masalah yang solusinya membutuhkan waktu O ( 1 ) untuk setiap enumerasi dikatakan mengalami keterlambatan konstan. Persyaratan waktu O ( p o l y ( n ) ) dikatakan memiliki polinomial delay.i+1th ith O(1) O(poly(n))
Mengapa kita peduli dengan waktu dan penundaan precomputasi?
Demikian juga, kita juga perlu tahu berapa banyak perhitungan dilakukan. Kami dapat mengurangi penundaan untuk masalah enumerasi menjadi waktu dan ruang yang konstan dengan menghitung sebelumnya semua solusi dan menyimpannya dalam daftar untuk disebutkan ulang di lain waktu. Tantangannya adalah menemukan keseimbangan terbaik antara kedua sumber.
Urutan di mana Anda menghitung elemen juga dapat mempengaruhi kompleksitas. Mengharuskan hasil dikembalikan dalam urutan urutan tertentu mungkin mengharuskan kami untuk melakukan perhitungan tambahan di kedua langkah. Meskipun situasi di mana setiap pesanan cukup (selama setiap elemen yang disebutkan adalah unik) tentu juga dipelajari.
Sumber daya
Survei ini (benar-benar upaya formalisasi) akan membantu Anda memulai. Ini juga membuktikan beberapa teorema hierarki dasar.
Pencacahan: Algoritma dan Kompleksitas (Johannes Schmidt, 2009)
https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf
Untuk enumerasi hasil dalam kerumitan enumerasi, lihat kompilasi ini yang dikuratori oleh Kunihiro Wasa. Karena dikategorikan berdasarkan jenis masalah, Anda dapat dengan mudah menemukan sejumlah makalah yang didedikasikan untuk menghitung siklus grafik. Seharusnya mudah untuk memodifikasi algoritma yang terlibat untuk hanya mempertimbangkan siklus dengan node yang diberikan.
http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html
sumber