您的位置:首页 > 职场人生

一道博弈的面试题及其算法正确性证明

2015-09-13 23:30 489 查看
题目是这样子的:一堆石子有N个,两个人轮流取石头,限制条件如下:

每个人一次只能取1~3个石头。

假设两人足够聪明(如果可以胜利,不会放水或者愚蠢的取石头)

胜负条件是最后取完石头的人算输(甲取完,石头正好没了,甲输),那么对于先取石头的人来说,怎么样的石头数量才能保证其一定赢得游戏,或者输掉游戏。

这道题目算是一个简单的博弈问题,分析问题的基础情况,记先取的人必赢为MW(Must Win),先取的人必输为ML(Must Lose):

N=1:ML。

N=2:MW(先取者只需取一个,即可获胜)。

N=3 : MW (先取者只需取两个,即可获胜)。

N=4:MW(先取者只需取三个,即可获胜)。

N=5:ML(无论先取几个,实际上留下的石头数量都会使后取者到达必赢得位置上)。

N=6:MW(先取者先取一个,使后取者被推到必输的位置上)

……

从上面的推理我们可以看出,博弈获胜的关键在于,N的数量决定了先取者是否能获胜,可以列出ML的时候,N=1,5,9,13.。。,即N满足N%4=1的时候,先取者必输,因为在这些点上,先取者无论用怎样的策略都会使对方进到必赢得位置上,那么如何来证明这个猜想的正确性呢?

在面试的时候,我们自然的先由以上简单的尝试来寻找规律,当总结出规律进行验证时,采用数学归纳法进行验证:

当N=1的时候,很明显ML。

假设当N%4=1的时候,ML成立。

当(N+4)%4=1的时候,有以下三种情况:先取一个,剩下N+3个石头不满足式子,后取者进入必赢模式;先取两个和先取三个同理可得。则所推公式正确性得证。

那么如果取1~K个石头,同样也可以得到关键公式为N%(k+1)=1;

考虑这类博弈问题的一个关键点就在于:

1. 对于所有的MW模式,一定存在一个MW模式到ML模式的转换。

2. 对于所有的ML模式,对于所有的转换都是ML模式到MW模式。

把握好这两个特性,便可在面试遇到这类问题时比较思路清晰的分析问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 算法