Đây có thể là một vấn đề NP-Complete?


10

Xem xét các báo cáo vấn đề sau:

Cho một số ban đầu, bạn và bạn của bạn lần lượt trừ đi một hình vuông hoàn hảo từ nó. Người đầu tiên có được chiến thắng bằng không. Ví dụ:

Trạng thái ban đầu: 37

Người chơi1 trừ 16. Bang: 21

Người chơi2 trừ 8. Bang: 13

Player1 trừ 4. Bang: 9

Player2 trừ 9. Trạng thái: 0

Người chơi2 thắng!

Viết chương trình đưa ra trạng thái ban đầu, trả về một nước đi tối ưu, tức là một chương trình được đảm bảo để dẫn đến chiến thắng trò chơi. Nếu không có động thái nào có thể đưa bạn đến trạng thái chiến thắng, hãy trả về -1.

Vấn đề này có thể được giải quyết trong thời gian giả đa thức bằng cách sử dụng lập trình động. Ý tưởng chỉ là lấp đầy một mảng có độ dài n (trong đó n là trạng thái ban đầu) từ dưới lên với các bước di chuyển tối ưu, hoặc -1 nếu không có động thái nào dẫn đến chiến thắng. Điều này sẽ mất O (n * sqrt (n)) vì với mỗi số chúng ta cần xem xét trừ đi mỗi hình vuông hoàn hảo có thể nhỏ hơn nó (có ~ sqrt (n) của chúng). Tuy nhiên, đây là độ phức tạp thời gian chạy giả đa thức vì thời gian chạy thực sự chia tỷ lệ theo cấp số nhân liên quan đến kích thước của đầu vào trong nhị phân (# bit được sử dụng để biểu thị số).

Bất cứ ai cũng có thể nghĩ về một thuật toán đa thức để giải quyết vấn đề này? Nếu không, nó có thể là NP-Complete? Tại sao?


1
Vì tò mò, tại sao bạn lại hỏi cụ thể là nó đã hoàn thành NP chưa? (Cá nhân, tôi đã đoán rằng nó thậm chí không ở NP, mặc dù tôi thực sự không biết.)
ruakh

@ruakh Gần đây tôi gặp phải vấn đề này trong một cuộc phỏng vấn mã hóa và đề xuất giải pháp giả đa thức bằng lập trình động mà tôi đã mô tả. Tuy nhiên, sau khi suy nghĩ cẩn thận về vấn đề, tôi không thể đưa ra thuật toán thời gian đa thức. Tôi sớm bắt đầu tự đặt câu hỏi nếu đây thực sự không phải là vấn đề NP (-Complete).
Martin Copes

Bạn đã thử tính toán vị trí nào là vị trí chiến thắng và vị trí nào đang mất vị trí? Có lẽ một mô hình sẽ phát sinh.
Yuval Filmus

@YuvalFilmus Theo Wikipedia , không có công thức nào được biết đến cho mẫu này (trình tự A030193 trong OEIS)
Martin Copes

Phải, tôi vừa mới đăng một câu trả lời với thông tin này. Xem thêm A224839.
Yuval Filmus

Câu trả lời:


6

Trình tự mất vị trí có thể được tìm thấy trong OEIS, A030193 , cũng như chuỗi các vị trí có giá trị Grundy 1, A224839 . Bách khoa toàn thư trích dẫn một số bài viết có liên quan. Có lẽ một số trong số họ thảo luận về các thuật toán không tầm thường để tính toán trình tự.


Như bạn đã đề cập, trình tự này đại diện cho các vị trí mất. Ngay cả khi bạn có thể kiểm tra trong thời gian liên tục xem một vị trí có bị mất hay không (có vẻ khó!), Vấn đề vẫn yêu cầu bạn trả lại bước di chuyển tối ưu, tức là bạn cần phải trừ hình vuông nào về trạng thái hiện tại để có được một vị trí mất. Vấn đề sẽ sôi sục khi tìm vị trí thua bằng cách trừ các ô vuông khỏi trạng thái hiện tại. Vì vậy, bạn vẫn cần phải lặp qua tất cả các ô vuông nhỏ hơn trạng thái, ngay cả khi bạn có thể kiểm tra xem một vị trí có bị mất trong thời gian không đổi.
Martin Copes

3
Phải, nó sẽ không đủ, nhưng nó sẽ là một khởi đầu tốt. Có lẽ bạn sẽ hiểu rõ hơn về việc chỉ có thể tính toán trạng thái chiến thắng của một vị trí. Thêm vào đó, cho thấy thật khó để quyết định vị trí nào bị mất sẽ đủ để cho thấy rằng vấn đề của bạn như đã nêu là NP-hard, trong bất kỳ phiên bản quyết định hợp lý nào.
Yuval Filmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.