Untuk dapat menjelaskan masalah P vs NP kepada non-matematikawan, saya ingin memiliki contoh pedagogis tentang kapan pencarian Brute Force dapat dihindari. Masalahnya idealnya harus segera dimengerti dan triknya seharusnya tidak terlalu mudah atau terlalu sulit.
Yang terbaik yang saya hasilkan sejauh ini adalah
SUBSET_PRODUCT_IS_ZERO
Masalahnya mudah dipahami (diberikan satu set bilangan bulat, dapatkah subset dengan produk 0 dibentuk?), Tetapi triknya terlalu mudah (periksa apakah 0 ada di antara angka-angka yang diberikan, yaitu tidak perlu melihat banyak himpunan bagian).
Ada saran?
Jawaban:
Saya merekomendasikan Jenga !
Dengan asumsi Anda memiliki dua pemain yang sepenuhnya logis, bijaksana, dan cekatan, Jenga adalah permainan dua pemain dengan informasi lengkap, seperti Checkers atau Go. Misalkan permainan dimulai dengan tumpukan batu bata, dengan 3 batu bata di setiap level. Untuk sebagian besar permainan, setiap pemain memiliki Θ ( N ) pilihan pada setiap gilirannya untuk langkah selanjutnya, dan dengan tidak adanya kesalahan bodoh, jumlah putaran selalu antara N dan 6 N . Jadi kasar, pohon permainan memiliki N Θ ( N ) menyatakan. Jika Anda menjelajahi pohon permainan dengan kekerasan, Anda mungkin menghabiskan waktu secara eksponensial untuk menemukan langkah kemenangan atau meyakinkan diri sendiri bahwa Anda tidak bisa menang.3N Θ(N) N 6N NΘ(N)
Namun pada kenyataannya, Uri Zwick membuktikan pada 2005 bahwa Anda dapat memainkan Jenga dengan sempurna dengan melacak hanya tiga bilangan bulat, menggunakan seperangkat aturan sederhana yang dapat dengan mudah Anda paskan pada kartu bisnis. Tiga angka yang Anda butuhkan adalah
m mod 3 n mnmod3 mmod3 n m
Di sini II berarti Anda harus memindahkan bata tengah dari setiap 3-layer bagian atas, II- berarti Anda harus memindahkan bata sisi dari 3-layer ke atas, -I- berarti Anda harus memindahkan bata sisi dari 2-layer ke atas, dan bob-omb berarti Anda harus berpikir tentang kematian dan menjadi sedih dan semacamnya . Jika ada lebih dari satu gerakan yang disarankan dalam sebuah kotak, Anda dapat memilih salah satunya. Ini sepele untuk menjalankan strategi ini dalam waktu jika Anda sudah tahu triple , atau dalam waktu jika Anda tidak tahu.( m , n , t ) O ( N )O(1) (m,n,t) O(N)
Moral: Jenga hanya menyenangkan jika semua orang canggung dan / atau mabuk.
sumber
Seorang kasir harus mengembalikan sen uang kembalian kepada pelanggan. Mengingat koin yang ia miliki tersedia, dapatkah ia melakukannya dan bagaimana caranya?x
Ada dua varian masalah:
Varian yang mudah dapat diselesaikan dengan algoritma serakah. Yang lebih sulit membutuhkan pemrograman yang dinamis.
Sebenarnya, cara untuk mempresentasikan ini adalah dengan mengusulkan solusi brute force, membuat orang mengerti bahwa itu sangat tidak efisien, dan kemudian bertanya kepada mereka apa yang dilakukan kasir, pertama untuk varian yang mudah, kemudian dalam yang sulit. Anda harus memiliki beberapa contoh yang tersedia dari yang mudah ke yang jahat.
sumber
Saya pikir saya menemukan contoh yang berguna sendiri!
Mungkin saya agak kabur, tetapi saya mencari masalah yang memenuhi spesifikasi berikut:
Untuk Eulerian Cycle mudah untuk menjelaskan bahwa ini adalah kondisi yang diperlukan bahwa setiap node harus memiliki derajat yang sama, tetapi tidak mudah untuk menjelaskan mengapa ini merupakan kondisi yang cukup.
Ini adalah masalah yang menurut saya sejauh ini paling memenuhi spesifikasi di atas:
FORM_TARGET_SET_WITH_UNIONS
Algoritma yang jelas tetapi tidak efektif:
Algoritma yang lebih baik
Ada juga masalah saudari
FORM_TARGET_SET_WITH_INTERSECTIONS
untuk algoritma yang lebih baik
Seperti yang Anda lihat, saya mencari sesuatu yang sangat sederhana (hampir sesederhana SUBSET_PRODUCT_IS_ZERO).
Masalahnya juga dapat dikontraskan dengan SUMBER SUBSET dan PRODUK SUMBER, yang NP-lengkap tetapi serupa dalam formulasi mereka. Dalam semua masalah ini orang disajikan dengan koleksi objek dan ditanya apakah operasi pada pemilihan objek-objek ini dapat menghasilkan hasil yang diinginkan.
sumber