bolee.log
bolee.log

NIM Game

bolee·2022년 12월 6일
수학
0
post-thumbnail

NIM Game 이란?

NIM Game은 2명의 플레이어가 서로 다른 더미에서 개체를 번갈아 제거하는 수학적 전략 게임이다.
매 턴마다 각 플레이어는 하나 이상의 물체를 제거해야한다.
게임에 따라 마지막 개체를 가져가는 것을 피하거나 마지막 개체를 가져가는 버전이 있다.

NIM은 일반적으로 misère 게임으로 즉, 마지막 개체를 가져가는 플레이어가 패배합니다.

Misère Game
게임 규칙에 따라 지는 사람이 승자인 게임

NIM에 대한 완벽한 해법은 1901년 하버드 대학의 수학과 교수 Charles L. Bouton에 의해 제시되었고, NIM 이라는 용어도 그 때 처음 사용되었다.


NIM 게임 예시: 배스킨라빈스 31

'배스킨라빈스 31'이라는 게임을 아는 사람이 있다면 위에서 설명한 NIM 게임이 정확히 무엇인지 알 수 있을 것이다.

'배스킨라빈스 31' 게임은 1부터 31까지의 숫자를 한 사람당 1 ~ 3개씩 번갈아 불러 마지막 숫자인 31을 부르는 사람이 지는 게임으로 NIM 게임의 한 종류라고 볼 수 있다.

이 게임을 2명에서 할때의 필승법은 상당히 잘 알려져 있는데, 바로 첫번째 사람이 2개의 숫자 즉, 1과 2를 부르고 그 다음부터는 상대가 부르는 숫자의 개수와 자신이 부를 숫자의 개수의 합이 4개가 되도록 맞춰부르면 된다. (2+4×7+1=31) (2 + 4 \times 7 + 1 = 31)

물론 3인 이상의 NIM 게임은 공정한 게임이기 때문에 3명 이상이 플레이한다면 어떻게 될지 알 수 없다.
하지만 2명이 플레이 한다고 하면 NIM 게임은 항상 우승 전략이 존재하며, '배스킨라빈스 31'의 경우 더미가 1개인 경우이지만 더미가 그것보다 많더라도 우승 전략이 존재한다.


NIM 게임 우승 전략

승리 포지션(Winning Poistions)

Nim 게임에서 승리하기 위한 전략은 플레이어가 상대방을 승리 포지션에 두게 만드는 것이다.

'배스킨라빈스 31' 게임과 달리 더미가 2, 3, 4개가 있는 경우 상대방 차례에 아래 표와 같은 승리 포지션을 가지게 된다면 해당 게임을 우승할 수 있다.

2 Heaps3 Heaps4 Heaps
1 1 *1 1 1 **1 1 1 1 *
2 21 2 31 1 n n
3 31 4 51 2 4 7
4 41 6 71 2 5 6
5 51 8 91 3 4 6
6 62 4 61 3 5 7
7 72 5 72 3 4 5
8 83 4 72 3 6 7
9 93 5 62 3 8 9
n n4 8 124 5 6 7
4 9 134 5 8 9
5 8 13n n m m
5 9 12n n n n

Heaps: 더미들
*: 일반적인 게임 한정
**: misère game 한정
n, m > 0

우승 전략 구하기

nim-sum

Nim은 초기 힙과 개체 수에 관계없이 수학적으로 해결되었으며, 어떤 플레이어가 이길지, 어떤 승리 동작이 해당 플레이어에게 열려 있는지를 쉽게 계산할 수 있는 방법이 있다.

게임 전략의 핵심은 각 힙의 사이즈에 대한 이진 합(binary digital sum)이다.
해당 연산은 XOR 연산 또는 모듈로(modulo) 연산이라고도 하며, 조합 게임 이론 내에서는 일반적으로 nim-sum이라고 불린다.
(해당 연산 기호는 로 표기된다.)

힙이 A, B, C가 있고 각 힙의 사이즈가 3, 4, 5라고 했을 때 nim-sum은 다음과 같다.

Binary Decimal Sum

0112011_{2}3103_{10}  Heap A
1002100_{2}4104_{10}  Heap B
1012101_{2}5105_{10}  Heap C

=======================

0102010_2 210  The nim-sum of heaps A, B, and C, 3 ⊕ 4 ⊕ 5 = 2

정상적인 규칙에서의 우승 전략

정상적인 규칙 즉, 마지막으로 옮길 객체가 없는 사람이 이기는 규칙에서의 전략은 모든 턴에서 이러한 nim-sum0을 만드는 것이다.
자기 차례 전에 nim-sum0이 아니라면 이것을 항상 가능하며, nim-sum0이라면 상대는 지게된다.

어떤 힙에서 얼마나 제거해야 하는지 알기 위해서는 먼저 모든 힙 사이즈들의 nim-sumX를 알아야 한다.
그 후 각각의 힙의 사이즈와 Xnim-sum하여 기존 힙 사이즈보다 작은 힙을 찾고, 기존 힙의 사이즈와 Xnim-sum하여 얻은 값의 차이만큼 해당 힙에서 제거하면 된다.

예를 들어, 사이즈 3, 4, 5를 가지는 힙 A, B, C가 있다고 했을 때, X는 다음과 같다.

X=345=2X = 3 ⊕ 4 ⊕ 5 = 2

그 다음 X와 각 힙 사이즈과 nim-sum을 하면 다음과 같다.

A ⊕ X = 3 ⊕ 2 = 1
B ⊕ X = 4 ⊕ 2 = 6
C ⊕ X = 5 ⊕ 2 = 7

이 상황에서 유일하게 줄어드는 힙은 A이기 때문에 A의 크기를 2개 제거하여 1로 줄인다.
이러면 nim-sum0이 되기 때문에 항상 이기는 상황이 만들어져 상대를 이길 수 있다.

misère game에서의 우승 전략

misère game 즉, 객체를 마지막으로 옯기는 사람이 지는 규칙에서의 전략은 정상적인 규칙에서의 우승 전략과 같지만 최소 2개의 객체가 있는 더미수가 홀수개가 될 때까지 수행한다는 점에서 다르다.

예를 들어, 사이즈 3, 4, 5를 가지는 힙 A, B, C가 있다고 했을 때 misère game 전략은 다음과 같이 적용된다.

player1, player2
A B C nim-sum
3 4 5 0102=210010_2=2_{10} - 1
1 4 5 0002=010000_2=0_{10} - 2
1 4 3 1102=610110_2=6_{10} - 3
1 2 3 0102=010010_2=0_{10} - 4
1 2 2 0102=110010_2=1_{10} - 5
0 2 2 0102=010010_2=0_{10} - 6
0 2 1 0102=310010_2=3_{10} - 7
0 0 1 0102=110010_2=1_{10} - 8

  1. A에서 2개를 가져오면 nim-sum0이 되기 때문에 player1이 이길 것이다.
  2. player2가 C에서 2개를 가져간다.
  3. player1이 B에서 2개를 가져간다.
  4. player2가 C에서 1개를 가져간다.
  5. player1이 A에서 1개를 자겨산다.
  6. player2가 C에서 1개를 가져간다.
  7. player1이 B에서 2개를 가져간다.
  8. player2가 C에서 1개를 가져가야 하기 때문에 player2가 지고, player1이 이긴다.

우승 전략 증명

NIM 게임의 우승 전략의 증명은 Charles L. Bouton에 의해 입증되었다.

Theorem
일반적인 NIM 게임에서의 초기에 nim-sum0이 아니라면 첫번째 플레이어가 이긴다.
먄약 초기에 nim-sum0이라면 두번때 플레이어가 이긴다.

이러한 이론의 증명은 다음과 같다.

nim-sum(⊕)은 결합 법칙, 교환 법칙을 따르며, 추가적으로 xx=0x ⊕ x = 0도 만족한다.
x1,...,xnx_1, ..., x_n이 이동 전 힙의 크기이고, y1,...,yny_1, ..., y_n이 이동 후 힙의 크기라고 할 때, nim-sum s,ts, t에 대해 s=x1...xns = x_1 ⊕ ... ⊕ x_n, t=y1...ynt = y_1 ⊕ ... ⊕ y_n이라고 하자.
이 때, 이동이 힙 kk에 있었다면, iki \neq k에 대해 xi=yix_i = y_i이고 xkykx_k \geq y_k이다.

그렇다면 nim-sum의 성질의 의해 다음과 같이 표현할 수 있다.

t=0t=sst=s(x1...xn)(y1...yn)=s(x1y1)..(xnyn)=s0...0(xkyk)0...0=sxkyk\begin{aligned} t &= 0 ⊕ t\\ &= s ⊕ s ⊕ t\\ &= s ⊕ (x_1 ⊕ ... ⊕ x_n) ⊕ (y_1 ⊕ ... ⊕ y_n) = s ⊕ (x_1 ⊕ y_1) ⊕ .. ⊕ (x_n ⊕ y_n)\\ &= s ⊕ 0 ⊕ ... ⊕ 0 ⊕ (x_k ⊕ y_k) ⊕ 0 ⊕ ... ⊕ 0\\ &= s ⊕ x_k ⊕ y_k \end{aligned}
()t=sxkyk(*) t = s ⊕ x_k ⊕ y_k

Theorem은 아래 두 보조정리(Lemma)으로부터 증명된다.

보조정리(Lemma)
다른 정리를 증명하는 데 쓸 목적으로 증명된 명제

보조정리 1
s=0s = 0이면, 어떤 이동을 하든 t0t \neq 0이다.

만약 s=0s = 0이라고 가정했을 때, 이동할 객체가 있다면 승패가 명확하게 결정된 상태이기 때문에 의미가 없다. 따라서 이동할 객체가 있다고 하자.
그렇다면 ()(*)에 의해 t=0xkykt = 0 ⊕ x_k ⊕ y_k이고, xkykx_k \neq y_k이므로 t=xkyk0t = x_k ⊕ y_k \neq 0이다.

보조 정리 2
s0s \neq 0이면, t=0t = 0으로 만들 수 있는 수가 존재한다.

이제 s0s \neq 0이라고 가정하자.
ss를 2진법으로 나타냈을 때, 제일 왼쪽에 존재하는 1의 자리 수를 dd라고 한다면, s0s \neq 0이기 때문에 dd의 존재가 보장된다.

이제 2진법으로 나타냈을 때, dd번째 자리의 수가 0이 아닌 xkx_k를 고른다.
만약 이런 xkx_k가 존재하지 않는다면, 모든 xix_idd번째 자리는 0이고, nim-sum을 구하면 ssdd번째 자리는 0이 되어 모순이다.

이제 yk=sxky_k = s ⊕ x_k라고 하자. xk>ykx_k \gt y_k임을 보일 것이다.
xkx_kyky_kdd자리 왼쪽은 전부 똑같고, ssdd자리 왼쪽은 전부 0이므로 dd자리의 수는 1에서 0으로 줄어든다.
이 차이는 10진법으로 2d2^d이고, dd자리 오른쪽의 수는 아무리 차이나 봤자 2d12^d - 1이다. 따라서 xkx_kyky_k보다 적어도 1 크다.
이는 곧 xkykx_k - y_k개의 돌을 kk번째 더미에서 가져갈 수 있음을 보장한다.
또한, ()(*)에서, t=sxkyk=sxk(sxk)=0t = s ⊕ x_k ⊕ y_k = s ⊕ x_k ⊕ (s ⊕ x_k) = 0이다.

따라서 보조정리에 의해 Theoreum이 증명된다.


참고 자료

玻璃钢生产厂家泰州玻璃钢广场雕塑价格福建走廊商场美陈多少钱上城区玻璃钢金属雕塑图片北京户外商场美陈费用威海玻璃钢卡通雕塑定制临汾玻璃钢卡通雕塑厂家鑫益玻璃钢人物雕塑杭州创意玻璃钢雕塑销售电话辽宁玻璃钢红军雕塑兴化玻璃钢门头雕塑绍兴环保玻璃钢雕塑供应商滑县玻璃钢雕塑设计玻璃钢雕塑做法浙江常用商场美陈销售企业义乌玻璃钢雕塑热线电话西宁彩色玻璃钢雕塑公司佛山会发光的玻璃钢雕塑制作佛山玻璃钢艺术雕塑广东熊猫玻璃钢卡通雕塑广东欧式玻璃钢雕塑销售厂家玻璃钢鹿雕塑制作方法山西人物玻璃钢雕塑图片合浦玻璃钢雕塑绵阳玻璃钢公仔雕塑报价上蔡玻璃钢雕塑定制成都玻璃钢花盆制品厂湖北长方形玻璃钢花盆做玻璃钢雕塑联系方式鹤壁校园玻璃钢人物雕塑制作徐州玻璃钢雕塑常用解决方案香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化