Baru-baru ini, ketika berbicara dengan seorang ahli fisika, saya menyatakan bahwa dalam pengalaman saya, ketika masalah yang secara naif sepertinya membutuhkan waktu eksponensial ternyata secara nontrivial berada di P atau BPP, "alasan menyeluruh" mengapa pengurangan terjadi biasanya dapat diidentifikasi. --- dan hampir selalu, alasan itu masuk dalam daftar selusin "tersangka biasa" (misalnya: pemrograman dinamis, aljabar linier ...). Namun, itu kemudian membuat saya berpikir: bisakah kita benar-benar menuliskan daftar alasan yang layak seperti itu? Inilah upaya pertama dan tidak lengkap pada satu:
(0) Karakterisasi matematika. Masalah memiliki karakterisasi "murni-matematis" yang tidak jelas yang, begitu diketahui, membuatnya segera bahwa Anda dapat melakukan pencarian lengkap pada daftar kemungkinan pol (n). Contoh: grafik planaritas, yang diikuti oleh algoritma O (n 6 ) dari teorema Kuratowski.
(Seperti yang ditunjukkan "planar" di bawah, ini adalah contoh yang buruk: bahkan setelah Anda mengetahui karakterisasi kombinasional dari planaritas, memberikan algoritme waktu polinomial untuk itu masih sangat tidak berarti. Jadi, izinkan saya mengganti contoh yang lebih baik di sini: bagaimana kalau , katakanlah, "diberi masukan dan ditulis dalam biner, hitung berapa banyak warna yang diperlukan untuk mewarnai peta yang berubah-ubah yang tertanam pada permukaan dengan n lubang." Tidak jelas apriori bahwa ini dapat dihitung sama sekali (atau bahkan terbatas!). Tapi ada rumus yang diketahui memberikan jawabannya, dan begitu Anda tahu rumusnya, itu sepele untuk dihitung dalam waktu polinomial. Sementara itu, "mengurangi menjadi anak di bawah umur / teori Robertson-Seymour" mungkin harus ditambahkan sebagai alasan menyeluruh yang terpisah mengapa sesuatu bisa menjadi dalam P.)
Bagaimanapun, ini secara khusus bukan situasi yang paling menarik minat saya.
(1) Pemrograman dinamis. Masalah dapat dipecahkan dengan cara yang memungkinkan solusi rekursif tanpa ledakan eksponensial - seringkali karena kendala yang harus dipenuhi diatur dalam linear atau urutan sederhana lainnya. "Murni kombinasi"; tidak diperlukan struktur aljabar. Dapat diperdebatkan, jangkauan grafik (dan karenanya 2SAT) adalah kasus khusus.
(2) Matroid. Masalah memiliki struktur matroid, memungkinkan algoritma serakah bekerja. Contoh: cocok, pohon spanning minimum.
(3) Aljabar linier. Masalah dapat direduksi menjadi penyelesaian sistem linier, menghitung determinan, menghitung nilai eigen, dll. Dapat disangkal, sebagian besar masalah yang melibatkan "pembatalan ajaib," termasuk yang dipecahkan oleh formalisme matchgate Valiant, juga berada di bawah payung linear-aljabar.
(4) Convexity. Masalah dapat dinyatakan sebagai semacam optimasi cembung. Pemrograman semidefinite, pemrograman linier, dan permainan zero-sum adalah kasus khusus yang semakin meningkat.
(5) Pengujian identitas polinomial. Masalah dapat direduksi menjadi pengecekan identitas polinomial, sehingga Teorema Dasar Aljabar mengarah ke algoritma acak yang efisien - dan dalam beberapa kasus, seperti primality, bahkan algoritma yang terbukti dapat menentukan.
(6) Rantai Markov Monte Carlo. Masalah dapat direduksi menjadi sampling dari hasil jalan cepat yang bercampur. (Contoh: kira-kira menghitung kecocokan sempurna.)
(7) Algoritma Euclidean. GCD, fraksi lanjutan ...
Lain-lain / Tidak jelas bagaimana mengklasifikasikan: Perkawinan yang stabil, anjak piutang, masalah keanggotaan untuk kelompok permutasi, berbagai masalah lain dalam teori bilangan dan teori kelompok, masalah kisi dimensi rendah ...
Pertanyaan saya adalah: apa hal terpenting yang saya tinggalkan?
Untuk memperjelas:
Saya menyadari bahwa tidak ada daftar yang mungkin lengkap: berapapun jumlah alasan yang Anda berikan, seseorang akan dapat menemukan masalah eksotis yang ada di P tetapi tidak dengan alasan tersebut. Sebagian karena alasan itu, saya lebih tertarik pada ide-ide yang menempatkan banyak masalah berbeda, yang tampaknya tidak terkait dalam P atau BPP, daripada ide-ide yang hanya bekerja untuk satu masalah.
Saya juga menyadari bahwa itu subjektif bagaimana membagi sesuatu. Misalnya, haruskah matroid hanya menjadi kasus khusus pemrograman dinamis? Apakah solvabilitas dengan pencarian mendalam-pertama cukup penting untuk alasannya sendiri, terpisah dari pemrograman dinamis? Juga, sering kali masalah yang sama dapat di P karena beberapa alasan, tergantung pada bagaimana Anda melihatnya: misalnya, menemukan nilai eigen utama dalam P karena aljabar linier, tetapi juga karena itu adalah masalah optimasi cembung.
Singkatnya, saya tidak berharap untuk "teorema klasifikasi" - hanya untuk daftar yang berguna mencerminkan apa yang saat ini kita ketahui tentang algoritma yang efisien. Dan itulah mengapa yang paling menarik minat saya adalah teknik untuk menempatkan hal-hal di P atau BPP yang memiliki penerapan luas tetapi itu tidak masuk dalam daftar di atas - atau ide-ide lain untuk meningkatkan upaya mentah saya pertama kali untuk membuat yang baik pada kesombongan saya ke ahli fisika.