지역 스쿼시 클럽에는 다음과 같은 사다리 가 있습니다.
- 시즌 초에 우리는 클럽의 각 회원의 이름을 별도의 줄에 테이블을 구성합니다.
- 그런 다음 승리 한 게임 수와 각 이름 옆에 플레이 한 게임 수를 기록합니다 (플레이어 승 / 게임 형식).
따라서 시즌이 시작될 때 테이블은 다음과 같습니다.
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
한 명의 플레이어가 이기면 두 명의 플레이어가 경기를 할 수 있습니다. 테이블 바닥에 가장 가까운 플레이어가 승리하면 플레이어의 위치가 바뀝니다. 그런 다음 2 단계를 반복하여 각 플레이어 옆에있는 승리 및 게임 수를 업데이트합니다. 예를 들어 앨리스가 빌리를 이길 경우
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
이 경기는 시즌 내내 진행되며 결국 선수는 대략적인 강도 순서로 나열됩니다.
불행히도 업데이트는 다소 우연한 방식으로 발생하므로 실수가 발생합니다. 아래는 유효하지 않은 테이블의 예입니다. 즉, 일부 시작 순서 (계절이 시작될 때 사용한 순서를 잊어 버렸습니다) 및 일치 및 결과 시퀀스에 대해 위의 단계를 올바르게 수행하여 생성 할 수없는 테이블입니다.
Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0
Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0
Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1
테이블이 주어지면 테이블이 유효한지 어떻게 효율적으로 결정할 수 있습니까? 우리는 다음을 주목함으로써 시작할 수 있습니다.
이름의 순서는 중요하지 않습니다. 원래 시작 순서를 잊었 기 때문입니다.
총 승리 횟수는 플레이 한 게임 수의 절반입니다. (이는 위의 첫 번째 예가 유효하지 않음을 나타냅니다.)
- 테이블이 유효하다고 가정하십시오. 그런 다음 멀티 그래프 (다중 에지를 허용하지만 루프는 허용하지 않는 그래프)가 있습니다. 그런 다음 각 플레이어가 재생 한 총 게임 수는 멀티 그래프에서 플레이어의 정점 정도에 해당합니다. 따라서 적절한 정점도를 가진 다중 그래프가 없으면 테이블이 유효하지 않아야합니다. 예를 들어, 차수가 1이고 차수가 3 인 다중 그래프가 없으므로 두 번째 예는 유효하지 않습니다. [우리는 그러한 다중 그래프의 존재를 효율적으로 확인할 수 있습니다.]
따라서 처음부터 적용 할 수있는 두 가지 검사가 있지만 세 번째 예와 같이 여전히 유효하지 않은 테이블을 허용합니다. 이 테이블이 유효하지 않다는 것을 확인하기 위해 테이블이 발생할 수있는 모든 가능한 방법을 모두 사용하여 뒤로 작업 할 수 있습니다.
이 결정 문제를 해결하는 다항식 시간 (플레이어 수 및 게임 수) 알고리즘을 누구나 생각할 수 있는지 궁금합니다.