최소 : 0 비트
최대 : 1734 243 비트 (4.335 4.401 비트 / 보드 상각)
예상 : 351 177 비트 (4.376 4.430 비트 / 보드 상각)
그러나 입력과 출력을 결정할 수 있기 때문에이 시점까지 게임 기록을 인코딩하기로 결정했습니다. 한 가지 장점은 자신의 차례에 대한 추가 정보가 동반자이며, 파생되고 인코딩 될 수없는 위치를 성명 할 수있는 능력이 있다는 것입니다.
시도 1 :
순진하게 나는 각 비트가 3 비트 인 12 비트, 4 개의 트리플렛 (시작 x, 시작 y, 끝 x, 끝 y) 형식으로 각 움직임을 인코딩 할 수 있다고 생각했습니다.
우리는 시작 위치를 가정하고 먼저 흰색으로 이동하면서 조각을 이동합니다. 보드는 (0, 0)이 흰색의 왼쪽 아래 모서리가되도록 배열됩니다.
예를 들어 게임 :
e4 e5
Nf3 f6
Nxe5 fxe5
... ...
다음과 같이 인코딩됩니다 :
100001 100010 100110 100100
110000 101010 101110 101101
101010 100100 101101 100100
...
이것은 12m 비트 의 인코딩으로 이어지며, 여기서 m 은 이동 횟수입니다.
한편이 다른 한편으로는 각 인코딩 정말 인코딩은 그래서 자신의 게임의 수, 각 움직임을 고려할 수 있습니다, 정말 큰 얻을 수 있어요 "체스 보드". 이것을 상각하면 각 "체스 보드"가 12 비트가됩니다. 그러나 나는 이것이 약간의 속임수라고 생각합니다 ...
시도 2 :
이전 시도의 각 움직임은 많은 불법적 인 움직임을 인코딩한다는 것을 깨달았습니다. 그래서 나는 합법적 인 움직임만을 암호화하기로 결정했습니다. (0, 0) → 0, (1, 0) → 1, (x, y) → x + 8 y가되도록 각 칸에 번호를 매기면서 가능한 움직임을 열거합니다. 타일을 반복하고 조각이 있는지 그리고 움직일 수 있는지 확인하십시오. 그렇다면 위치를 추가하면 목록으로 이동할 수 있습니다. 이동하려는 목록 색인을 선택하십시오. 이 숫자에 1을 더한 가중 총 이동 수에 가능한 이동 수를 더하십시오.
위와 같은 예 : 시작 위치에서 이동할 수있는 첫 번째 조각은 사각형 1의 기사이므로 사각형 16 또는 18로 이동할 수 있으므로 목록에 추가하십시오 [(1,16),(1,18)]
. 다음은 광장 6의 기사입니다. 전반적인 결과는 다음과 같습니다.
[(1,16),(1,18),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
우리는 이동 (12, 28)을 원하기 때문에 20 개의 가능한 이동이 있기 때문에 이것을베이스 20에서 13으로 인코딩합니다.
이제 게임 번호 g 0
= 13을
얻습니다.
다음으로 이동 목록을 얻기 위해 타일의 번호를 거꾸로 한 것 (필요하지는 않지만)을 제외하고는 검은 색에 대해서도 동일하게 수행합니다.
[(1,16),(1,18),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
우리는 이동 (11, 27)을 원하기 때문에 20 개의 가능한 이동이 있기 때문에 이것을베이스 20에서 11로 인코딩합니다.
이제 게임 번호 g 1
= (11 ⋅ 20) + 13 = 233
을 얻습니다.
다음으로 흰색에 대한 다음 이동 목록을 얻습니다.
[(1,16),(1,18),(3,12),(3,21),(3,30),(3,39),(4,12),(5,12),(5,19),(5,26),(5,33),(5,40),(6,12),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27)(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
우리는 이동 (6, 21)을 원하기 때문에 29 개의 가능한 이동이 있기 때문에 이것을베이스 29에서 13으로 인코딩합니다.
이제 게임 번호 g 2
= ((13 ⋅ 20) + 11) 20 + 13 = 5433을 얻습니다.
다음으로 블랙에 대한 다음 이동 목록을 얻습니다.
[(1,11),(1,16),(1,18),(2,11),(2,20),(2,29),(2,38),(2,47),(3,11),(4,11),(4,18),(4,25),(4,32),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
우리는 이동을 원하기 때문에 $ (10, 18) $ (10, 18)
이제 게임 번호 g 3
= (((19 ⋅ 29 + 13) 20) + 11) 20 + 13 = 225833을 얻습니다.
그리고 나머지 모든 동작에 대해이 프로세스를 계속하십시오. g 를 함수 g (x, y, z) = x y + z로 생각할 수 있습니다 . 따라서 g 0
= g (1, 1, 13), g 1
= g (g (1, 1, 11), 20, 13), g 2
= g (g (g (1, 1, 13), 20), 11, 20, 13), g 3
= g (g (g (g (1,1,19), 29,13), 20, 11), 20, 13)
게임 번호 g 0 을 해독하기 위해 초기 위치에서 시작하여 가능한 모든 움직임을 열거합니다. 그런 다음 g 1 = g 0 // l , m 0 = g 0 % l을 계산합니다 . 여기서 l 은 가능한 이동 횟수이고 '//'는 정수 나누기 연산자이고 '%'는 계수 연산자입니다. g 0 = g 1 + m 0을 유지해야합니다 . 다음으로 우리는 이동 m 0을 만들고 반복합니다.
위의 예에서 g 0 = 225833이면 g 1 = 225833 // 20 = 11291 및 m 0 = 225833 % 20 = 13. 다음 g 2 = 11291 // 20 = 564 및 m 1 = 11291 % 20 = 11입니다. g 3 = 11291 // 20 = 564 및 m 2 = 11291 % 20 = 11. 따라서 g 4 = 564 // 29 = 19 및 _m_ 3 = 564 % 29 = 13. 마지막으로 g 5 = 19 // 29 = 0 및 m 4 = 19 % 29 = 19.
이런 식으로 게임을 인코딩하는 데 몇 비트가 사용됩니까?
간단히하기 위해, 매 턴마다 항상 20 개의 움직임이 있고 최악의 시나리오에서는 항상 가장 큰 것을 선택한다고 가정 해 봅시다. 우리가 얻을 수있는 숫자는 19 ⋅ 20 m입니다.
+ 19 ⋅ 20 m-1
+ 19 ⋅ 20 m-2
+ ⋯ + 19 ⋅ 20 + 19 = 20 m + 1
− 1 여기서 _m은 이동 횟수입니다. 인코딩하는데 20 m + 1
- 1 우리가 로그인 할 필요가 2
(20 m + 1
에 대해이다) 비트 (m + 1) * 로그인 2
(20)를 4.3219 = * (m + 1)
평균 m = 80 (플레이어 당 40 개 이동)이므로 인코딩하는 데 351 비트가 필요합니다. 많은 게임을 녹화하는 경우 각 숫자에 필요한 비트 수를 모르기 때문에 범용 인코딩이 필요합니다.
m = 400 (플레이어 당 200 이동) 인 최악의 경우 인코딩하는 데 1734 비트가 필요합니다.
인코딩하려는 위치는 규칙에 따라 가장 짧은 경로를 통해 제공되어야합니다. 예를 들어 여기서 이론화 된 게임 은 최종 위치를 인코딩하기 위해 m = 11741이 필요하지 않습니다 . 대신 너비 우선 검색을 실행하여 해당 위치에 대한 최단 경로를 찾아서 인코딩합니다. 모든 체스 위치를 열거하기 위해 얼마나 깊이 들어가야할지 모르겠지만 400이 과대 평가 된 것으로 생각됩니다.
빠른 계산 :
12 개의 고유 한 조각이 있거나 사각형을 비워 체스 판에 배치 할 수 있습니다 (13 64) . 잘못된 위치가 많이 포함되어 있기 때문에 이는 과대 평가 된 수치입니다. 우리가 m 게임을 할 때 우리는 약 20m 위치를 만들었습니다 . 그래서 우리는 20 m = 13 64 일 때를 찾고 있습니다. m = 64 * log 20 (13) = 54.797이되도록 양쪽을 기록 합니다. 이것은 우리가 55 번의 움직임으로 어떤 위치로든 이동할 수 있어야한다는 것을 보여줍니다.
지금은 할 최악의 경우를 계산한다는 m 55 없다 = m 내 결과를 = 400을 편집합니다. m = 55 인 위치를 인코딩하려면 243 비트가 필요합니다. 또한 평균 사례는 약 m = 40이며 인코딩하는 데 177 비트가 필요 하다고 말합니다 .
이전의 할부 상환 인수를 사용하면 1734 비트로 400 "체스 보드"를 인코딩하므로 최악의 경우 각 "체스 보드"가 4.335 비트를 차지합니다.
참고 g = 0가 유효한 게임 하나를 나타낸다는 수있는 최소 제곱 최저 사각형의 이동 부재.
추가 사항 :
게임에서 특정 위치를 참조하려면 색인을 인코딩해야 할 수도 있습니다. 이것은 수동으로 추가 될 수 있습니다. 예를 들어 인덱스를 게임에 연결하거나 매번 마지막으로 가능한 이동으로 추가 "종료"이동을 추가 할 수 있습니다. 이것은 이제 플레이어가 인정하는 것을 고려할 수 있으며, 2 명이 연속으로 추첨에 동의 한 것을 나타낼 수 있습니다. 위치에 따라 게임이 체크 메이트 나 교착 상태로 끝나지 않은 경우에만 필요합니다.이 경우에는 암시 적입니다. 이 경우 평균 필요한 비트 수는 356이며 최악의 경우 1762입니다.