Tôi viết lại câu trả lời này để cố gắng giải quyết một số ý kiến về phiên bản trước.
Tôi cho rằng bạn đã đọc định nghĩa Wikipedia về tính đầy đủ của NP mà thực sự không tập trung vào các trò chơi. Tôi sẽ chỉ ra ý nghĩa chính xác của tính đầy đủ NP và lý thuyết trò chơi một chút và giải thích bản chất của trò chơi NP-Complete.
Chúng ta hãy xem xét một trò chơi 2 người với các động tác thay thế, hạn chế hơn, đây thực chất là về các trò chơi Kết hợp . Về cơ bản là một trò chơi mà bạn có một số động tác có thể được thực hiện và bạn phải chọn một trong số chúng. Bạn muốn chơi "hoàn hảo", điều đó có nghĩa là bạn sẽ không bao giờ thực hiện một động thái "xấu". Vì vậy, trong số các di chuyển được phép bạn muốn chọn một cách tốt nhất. (Tất nhiên đối thủ của bạn có cùng mục tiêu ...)
Lưu ý rằng chơi hoàn hảo không có nghĩa là bạn sẽ luôn thắng. Các quy tắc của trò chơi có thể là người chơi thứ nhất hoặc thứ hai nên giành chiến thắng. Ngoài ra một số trò chơi như Tic-Tac-Toe nên kết thúc với tỷ số hòa. Do đó, "chơi hoàn hảo" nghĩa là gì trong cuộc thảo luận này là:
(1) Rằng bạn sẽ không bao giờ ở vị trí chiến thắng và sau đó thua trò chơi vì bạn đã thực hiện một động thái "xấu"
(2) Bạn sẽ không bao giờ bỏ lỡ cơ hội để có được vào vị trí chiến thắng nếu có cơ hội như vậy.
Với trạng thái hiện tại của trò chơi, điều bạn thích là có thể sử dụng "thuật toán hiệu quả" để tính toán nước đi tốt nhất. Mặt khác, hãy lưu ý rằng một thuật toán phải tìm kiếm trong toàn bộ cây trò chơi là một "thuật toán không hiệu quả".
Bây giờ hãy xác định "hiệu quả" chính thức hơn một chút. Tôi sẽ đơn giản hóa điều này một chút nhưng thực chất là chính xác. Hãy xem xét số lượng tính toán, , phải được thực hiện để chọn nước đi tiếp theo, rằng trung bình mỗi lần di chuyển có khả năng ( yếu tố phân nhánh ) và có di chuyển còn lại trong trò chơi. Khái niệm cũng là mỗi phép tính mất cùng một thời gian để nỗ lực có thể được chuyển thành độ phức tạp thời gian , , thay vì tính toán thô.B n TCBnT
- Một "thuật toán hiệu quả" sẽ có: trong đó là "số nguyên nhỏ" và ah là một số con số thực. Do đó, thuật toán hiệu quả thực thi trong thời gian đa thức vì đây là biểu thức đa thức.
aT∝aBa+bBα−1+cBα−2+...+hB0
α
- Một "thuật toán không hiệu quả" sẽ có:
và thuật toán này thực thi theo thời gian theo cấp số nhân (tức là thời gian không đa thức). Vấn đề ở đây là khi càng lớn thì kết quả nổ tổ hợp càng lớn.
nT∝aBn
n
Bây giờ điểm quan trọng là không thể có một thuật toán hiệu quả, thời gian đa thức, chơi hoàn hảo cho một trò chơi mà NP-hoàn thành. Để chơi hoàn hảo, một vấn đề hoàn chỉnh NP phải, theo định nghĩa, phải được giải quyết bằng một thuật toán không hiệu quả chạy trong thời gian không đa thức.
Lưu ý rằng thời gian chạy là về số lượng tính toán nội tại, không phải thời gian phản hồi mà con người cảm nhận được. Đối với một trò chơi nhỏ như Tic-Tac-Toe, máy tính có thể chơi tất cả các chuyển động có thể trong tương lai và vẫn phản hồi nhanh chóng theo cảm nhận của con người.
Đối với Nim có thể tạo ra một thuật toán thời gian đa thức. Tại bất kỳ thời điểm nào trong trò chơi, thuật toán có thể tính toán người chơi nào có nước cờ chiến thắng và nước đi đó nên là gì.
Mặt khác, hãy chơi trò chơi Qubic . (Bạn đang cố gắng tạo một dòng 4 trong lưới 3D. Vì vậy, về cơ bản nó là tic-tac-toe trên lưới 4 x 4.) Qubic là NP-hoàn chỉnh do đó không có thuật toán thời gian đa thức để tính bước di chuyển hoàn hảo tiếp theo. Cách duy nhất để biết bạn hiện có di chuyển chiến thắng hay không là thử tất cả các nước đi có thể có của cả hai người chơi để xác minh rằng một nước đi cụ thể là người chiến thắng, hoặc ít nhất không phải là kẻ thua cuộc.
Thật ra, toàn bộ cây trò chơi cho Qubic đủ nhỏ để nó có thể được mã hóa thành một chương trình máy tính có thể chơi hoàn hảo. Điều mã hóa có nghĩa là toàn bộ cây trò chơi đã được khám phá và tất cả các động thái đã được thực hiện trước. Vì vậy, về cơ bản, chương trình có thể thực hiện một cuộc gọi cơ sở dữ liệu nhanh bằng cách sử dụng trạng thái bảng hiện tại và lấy lại nước đi tốt nhất cho trạng thái bảng đó mà không phải thực hiện tìm kiếm cây mỗi khi thực hiện di chuyển. Đây thực sự là một "mánh gian lận" cho mục đích của chúng tôi ở đây.
Bây giờ chúng ta hãy thảo luận về cờ vua để thảo luận về chức năng đánh giá bỏ qua một số tính năng khác của các chương trình chơi cờ. Cờ vua vẫn là một trò chơi chưa được giải quyết . Không biết người chơi thứ nhất hay thứ hai sẽ giành chiến thắng. Không thể đưa ra bất kỳ vị trí nào trong hội đồng quản trị và dự đoán chắc chắn ai sẽ thắng. Trong thực tế cờ vua có một cây trò chơi lớn đến mức không thể tìm kiếm toàn bộ cây trò chơi. Bạn cần máy tính không chỉ nhanh hơn 10 hoặc 100 lần mà còn nhanh hơn hàng tỷ tỷ lần so với bất kỳ máy tính hiện tại nào. (Có hy vọng rằng điện toán lượng tử có thể vượt qua nút Gordian này.)
Hãy nghĩ về chức năng đánh giá cờ vua như cho mỗi lần di chuyển tiếp theo có thể xác suất là nước đi tốt nhất. Những gì một chương trình cờ vua làm là kết hợp các hướng nhìn với chức năng đánh giá. Do đó, chương trình xem xét tất cả các động thái có thể có trong tương lai cho đến khi đạt đến điểm "tốt" có thể được trao cho vị trí ban giám đốc. Máy tính đánh giá tất cả các đường dẫn có thể đi qua cây theo cách này và sau đó chọn đường dẫn có điểm số tốt nhất. Vì việc tìm kiếm không bao giờ kết thúc trò chơi cho tất cả các đường được đánh giá, nên tất cả các chương trình cờ vua cuối cùng đều sử dụng chức năng đánh giá không hoàn hảo. (Nếu bạn ở gần cuối trò chơi thì máy tính có thể xem xét tất cả các động thái có thể có trong tương lai.) Điều đó có nghĩa là có thể đánh bại chương trình ngay cả khi chương trình có vị trí chiến thắng tại một thời điểm nào đó.