이것이 NP-Complete 문제 일 수 있습니까?


10

다음 문제점 설명을 고려하십시오.

초기 숫자가 주어지면, 당신과 당신의 친구는 교대로 완벽한 정사각형을 뺍니다. 제로에 도착하는 첫 번째 승리. 예를 들면 다음과 같습니다.

초기 상태 : 37

플레이어 1 빼기 16. 상태 : 21

플레이어 2 빼기 8. 상태 : 13

플레이어 1 빼기 4. 상태 : 9

플레이어 2 빼기 9. 상태 : 0

Player2가 승리합니다!

초기 상태를 제공하고 최적의 움직임, 즉 게임에서 승리하도록 보장되는 움직임을 반환하는 프로그램을 작성하십시오. 가능한 이동으로 승리 상태가 될 수 없으면 -1을 반환하십시오.

이 문제는 동적 프로그래밍을 사용하여 의사 다항식 시간 으로 해결할 수 있습니다 . 아이디어는 최적의 이동 으로 길이 n (여기서 n 은 초기 상태) 의 배열을 채우 거나 이동이 없으면 승리 -1을 채우는 것입니다 . 모든 숫자에 대해 가능한 모든 완벽한 제곱을 빼는 것을 고려해야하기 때문에 O (n * sqrt (n))이 필요합니다 (~ sqrt (n)). 그러나 런타임은 실제로 2 진 (입력을 나타내는 데 사용되는 비트 수)의 입력 크기와 관련하여 지수 적으로 확장되므로 의사 다항식 런타임 복잡성입니다.

누구나이 문제를 해결하기위한 다항식 알고리즘을 생각할 수 있습니까? 그렇지 않다면 NP-Complete 일 수 있습니까? 왜?


1
호기심 때문에 왜 NP가 완전한지 묻는 이유는 무엇입니까? (개인적으로, 나는 그것이 실제로는 모르지만 NP에도 없다고 추측했을 것입니다.)
ruakh

@ruakh 나는 최근 코딩 인터뷰 에서이 문제에 직면하여 설명 한 동적 프로그래밍을 사용하여 의사 다항식 솔루션을 제안했습니다. 그러나 문제에 대해 신중하게 생각한 후에 다항식 시간 알고리즘을 만들 수 없었습니다. 이것이 실제로 NP (-Complete) 문제가 아닌지 궁금해지기 시작했습니다.
Martin Copes 2012

어느 포지션이이기는지, 어느 포지션이 지는지를 계산해 보셨습니까? 아마도 패턴이 생길 것입니다.
Yuval Filmus

@YuvalFilmus Wikipedia 에 따르면 이 패턴에 대한 알려진 공식은 없습니다 ( OEIS의 시퀀스 A030193 )
Martin Copes

맞아, 나는이 정보에 대한 답변을 게시하려고했습니다. A224839도 참조하십시오.
Yuval Filmus 2012

답변:


6

잃어버린 위치의 순서는 OEIS A030193 에서 찾을 수 있으며 , Grundy 값 1, A224839 의 위치 순서와 같습니다 . 백과 사전은 몇 가지 관련 기사를 인용합니다. 아마도 그들 중 일부는 시퀀스 계산을위한 사소한 알고리즘에 대해 논의 할 것입니다.


언급했듯이이 순서는 패배 위치를 나타냅니다. 일정 시간 내에 위치가 잃어 버렸는지 아닌지 (어려워 보이는지) 확인할 수 있었다고해도 문제는 여전히 최적의 이동, 즉 현재 상태로 빼기 위해 어떤 제곱을 가져 오도록 요구합니다. 지는 위치. 문제는 현재 상태에서 제곱을 빼서지는 위치를 찾는 것으로 요약됩니다. 따라서 일정 시간 내에 위치가 손실되는지 확인할 수 있더라도 여전히 상태보다 작은 모든 사각형을 반복해야합니다.
Martin Copes 2012

3
충분하지는 않지만 좋은 출발이 될 것입니다. 아마도 당신은 위치의 승리 상태를 계산할 수 있다는 통찰력을 얻을 것입니다. 또한, 어떤 포지션이 지는지 결정하기 어렵다는 것을 보여 주기만해도 합리적인 결정판에서 언급 된 문제가 NP-hard라는 것을 보여주기에 충분합니다.
Yuval Filmus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.