Saya menulis ulang jawaban ini untuk mencoba menjawab beberapa komentar pada versi sebelumnya.
Saya berasumsi bahwa Anda telah membaca definisi Wikipedia untuk kelengkapan NP yang benar-benar tidak fokus pada game. Saya akan mempermudah arti dari kelengkapan NP dan teori permainan sedikit saja dan menjelaskan esensi dari game NP-Lengkap.
Mari kita pertimbangkan permainan 2 pemain dengan gerakan alternatif, lebih terbatas ini pada dasarnya adalah tentang permainan Kombinatorial . Pada dasarnya gim yang Anda miliki memiliki sejumlah gerakan yang dapat dilakukan dan Anda harus memilih salah satunya. Anda ingin bermain "sempurna" yang berarti Anda tidak akan pernah melakukan gerakan "buruk". Jadi dari langkah yang diijinkan Anda ingin memilih yang terbaik. (Tentu saja lawanmu memiliki tujuan yang sama ...)
Perhatikan bahwa permainan sempurna tidak berarti Anda akan selalu menang. Aturan permainan bisa sedemikian rupa sehingga pemain pertama atau kedua harus menang. Juga beberapa permainan seperti Tic-Tac-Toe harus berakhir seri. Jadi apa yang dimaksud dengan "permainan sempurna" dalam diskusi ini adalah:
(1) Bahwa Anda tidak akan pernah berada dalam posisi menang dan kemudian kehilangan permainan karena Anda membuat gerakan "buruk"
(2) Anda tidak akan pernah melewatkan kesempatan untuk mendapatkan ke posisi menang jika kesempatan seperti itu muncul.
Mengingat kondisi permainan saat ini, Anda ingin dapat menggunakan "algoritma efisien" untuk menghitung langkah terbaik. Di sisi lain, mari kita perhatikan bahwa algoritma yang harus mencari melalui seluruh pohon permainan adalah "algoritma yang tidak efisien."
CBnT
T∝aBa+bBα−1+cBα−2+...+hB0
α
T∝aBn
n
Sekarang poin penting adalah bahwa tidak mungkin untuk memiliki algoritma yang efisien, waktu polinomial, yang bermain sempurna untuk permainan yang NP-lengkap. Untuk memainkan dengan sempurna masalah NP-complete harus, secara definisi, diselesaikan dengan algoritma yang tidak efisien yang berjalan dalam waktu nonpolinomial.
Perhatikan bahwa waktu berjalan adalah tentang jumlah intrinsik perhitungan, bukan waktu respons yang dirasakan oleh manusia. Untuk gim kecil seperti Tic-Tac-Toe, komputer dapat memainkan semua kemungkinan pergerakan di masa depan dan masih merespons dengan cepat seperti yang dirasakan oleh manusia.
Untuk Nim dimungkinkan untuk membuat algoritma waktu polinomial. Pada titik mana pun dalam game, algoritme dapat menghitung pemain mana yang memiliki langkah kemenangan dan apa yang seharusnya dilakukan.
Di sisi lain mari kita ambil permainan Qubic . (Anda mencoba membuat garis 4 dalam kisi 3D. Jadi pada dasarnya tic-tac-toe pada kisi 4x4x4.) Qubic adalah NP-lengkap sehingga tidak ada algoritma waktu polinomial untuk menghitung langkah sempurna berikutnya. Satu-satunya cara untuk mengetahui apakah Anda saat ini memiliki langkah kemenangan adalah mencoba semua gerakan yang mungkin dilakukan dari kedua pemain untuk memverifikasi bahwa langkah tertentu adalah pemenang, atau setidaknya bukan pecundang.
Sejujurnya seluruh pohon permainan untuk Qubic cukup kecil sehingga dapat disandikan ke dalam program komputer yang dapat bermain dengan sempurna. Apa yang dimaksud dengan pengkodean adalah bahwa seluruh pohon permainan telah dieksplorasi dan semua gerakan dilakukan sebelumnya. Jadi program pada dasarnya dapat melakukan panggilan basis data cepat menggunakan kondisi papan saat ini dan mendapatkan kembali langkah terbaik untuk kondisi papan tanpa harus melakukan pencarian pohon setiap kali gerakan harus dilakukan. Ini benar-benar "cheat" untuk keperluan kita di sini.
Sekarang mari kita bahas catur untuk membahas fungsi evaluasi mengabaikan beberapa fitur lain dari program bermain catur. Catur masih merupakan permainan yang belum terpecahkan . Tidak diketahui apakah pemain pertama atau kedua harus menang. Tidak mungkin diberikan posisi dewan dan diprediksi dengan pasti siapa yang akan menang. Bahkan catur memiliki pohon permainan yang sangat besar sehingga mustahil untuk mencari seluruh pohon permainan. Anda akan membutuhkan komputer yang tidak hanya 10 atau 100 kali lebih cepat tetapi miliaran miliar waktu lebih cepat daripada komputer saat ini. (Ada harapan bahwa komputasi kuantum dapat memotong simpul Gordian ini.)
Pikirkan fungsi evaluasi catur sebagai memberikan setiap kemungkinan langkah selanjutnya kemungkinan menjadi langkah terbaik. Apa yang dilakukan program catur adalah menggabungkan pandangan ke depan dengan fungsi evaluasi. Dengan demikian program melihat semua kemungkinan pergerakan di masa depan hingga mencapai titik di mana skor "baik" dapat diberikan ke posisi dewan. Komputer mengevaluasi semua jalur yang mungkin melalui pohon dengan cara ini dan kemudian memilih jalur dengan skor terbaik. Karena pencarian tidak pernah sampai ke akhir permainan untuk semua jalur yang dievaluasi, semua program catur akhirnya menggunakan fungsi evaluasi yang tidak sempurna. (Jika Anda mendekati akhir permainan maka komputer mungkin dapat melihat semua kemungkinan langkah di masa depan.) Itu berarti mungkin untuk mengalahkan program bahkan jika program memiliki posisi yang menang di beberapa titik.