Saya mencoba membuat daftar algoritma / masalah yang "sangat berguna", seperti dalam, memecahkan masalah yang 'tampak' sangat eksponensial di alam, tetapi memiliki beberapa algoritma yang sangat pintar yang akhirnya menyelesaikannya. Contoh yang saya maksud:
- Linear Programming (Algoritma simpleks adalah waktu eksponensial; butuh waktu lama untuk menemukan solusi waktu polinomial!)
- Lebih umum, Pemrograman Semidefinite
- Pengujian primality
- 2-SAT dan HORNSAT
- Penentu komputasi (jika ini kedengarannya tidak sulit, pertimbangkan yang permanen)
- Menemukan pasangan yang sempurna
- Berbagai masalah teori kelompok keras yang dapat diselesaikan dengan menggunakan Klasifikasi Kelompok Sederhana Hingga
- Berbagai masalah grafik keras yang dapat diselesaikan dengan menggunakan karakterisasi Forbidden Minor yang rumit (dapat ditanamkan pada permukaan yang sewenang-wenang; pembatas jalur lebar dan lebar cabang; grafik yang dapat direduksi Delta-Wye)
- Komputasi eksponensial dalam grup terikat (mis. Menghitung dalam \ log b langkah, seperti yang dilakukan dengan kuadrat ulang)log b
- Komputasi mengandalkan algoritma LLL. (Sebagai kasus khusus: Algoritma Euclidean. Sebagai kasus yang lebih umum: Algoritma PSLQ atau HJLS.)
- Kendala masalah tanpa istilah Taylor (?). Saya akui saya tidak sepenuhnya memahami hal ini, tetapi sepertinya ini mungkin merangkum kasus 2-SAT / HORNSAT di atas, dan aljabar linear apa pun di bidang terbatas. Lihat di sini untuk posting yang lebih panjang
- Masalah dapat dihitung melalui pengurangan holografik .
Sebagai penyebutan terhormat, saya juga akan menyebutkan Graph Isomorphism, karena itu masih sangat mudah ( ), dan setara dengan begitu banyak masalah isomorfisma lainnya:
- Digraphs / multigraphs / hypergraphs (semacam masalah 'sulit')
- Automata / CFG terbatas
Jelas ada sejumlah kesulitan dalam hal ini, tetapi semua meninggalkan setidaknya beberapa orang dengan perasaan 'terkejut' dalam arti bahwa masalahnya bisa terdengar sulit tetapi ternyata bisa diselesaikan. LP mungkin terdengar relatif mudah, tetapi orang butuh waktu cukup lama untuk membangun solusi aktual. Mengkuadratkan atau memecahkan 2-SAT berulang adalah sesuatu yang mungkin dapat dilakukan oleh seorang sarjana, tetapi jika Anda hanya belajar tentang masalah NP-Complete tanpa melihat HORNSAT, itu mungkin terdengar seperti kandidat alami untuk NP-Completeness. Memecahkan CFSG atau memiliki cara polinomial untuk memeriksa reducabilitas Delta-Wye bukanlah prestasi yang berarti.
Saya harap ini masuk akal; jelas ada banyak atribut subjektif di sini, tetapi saya ingin tahu apa yang orang lain temukan sebagai solusi efisien untuk masalah yang "jelas sulit".
sumber
Jawaban:
Bagi saya salah satu algoritma yang paling efisien adalah algoritma Blossom V yang menemukan pencocokan sempurna berat maksimum dalam grafik umum:
https://en.m.wikipedia.org/wiki/Blossom_algorithm
sumber
Bagi saya semua klasik dan algoritma yang lebih efisien baru-baru ini untuk memverifikasi atau menemukan pohon spanning minimum (MST) dari graf berbobot tepi yang terhubung adalah kandidat yang baik. Banyak dari algoritma ini terdaftar di wikipedia .
Pada pandangan pertama, masalah ini seperti masalah salesman keliling, salah satu dari beberapa masalah NP-hard yang paling terkenal. Yang paling menakjubkan, ada algoritma linier untuk memverifikasi MST dan banyak algoritma linier dekat untuk menemukan MST! Bahkan, salah satu masalah terbuka yang paling terkenal dalam algoritma adalah apakah ada algoritma linear deterministik untuk menemukan MST dalam grafik umum. Ternyata ada matematika kaya dan struktur grafik dan properti serta banyak aplikasi praktis yang terkait dengan MST, menjadikannya salah satu topik yang lebih menyenangkan dan diperluas dalam kursus ilmu komputer. Untuk pengantar komprehensif yang sedikit usang tetapi sangat ditulis dengan baik, silakan lihat tutorial oleh Jason Eisner .
sumber