约瑟夫问题的推导

Posted $mathcal{Lance1ot}$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫问题的推导相关的知识,希望对你有一定的参考价值。

对于约瑟夫问题,若暴力模拟游戏过程,则时间复杂度会变为报的数*人数。

如果问题只是询问的最终留的人数,则可以达到o(n)的算法

利用递推的思想。若只有一个人游戏,则肯定那个人获胜。
逆向思维一下,一个人的游戏肯定是由两个人的游戏转化过来。
两个人的游戏肯定是从三个人的游戏转化过来。

可是怎么递推呢?

我们先想一下,我们一开始会认为:对于某一个人来说,使他出队的是他所报的编号,而不是他的编号。可是,仔细想想,假设有有一个0~n-1的人队,报道k出队,k号为最后的赢家。
那么编会是k-1号人出队。

我们来看一下每个人所报的号

 k-2 k-1 k k+1 k+2 k+3 
 
 k-1 k   1 2   3   4
 
 我们将k作为队首在编一次号
 
 k-2          k-1          k k+1 k+2 k+3
 
 k-1          k            1 2   3   4
 
 (n+k-2)-k    (n+k-1)-k    0 1   2   3
 n-2          n-1          0 1   2   3

将原来的k-1去掉,不难发现,游戏变成了n-1个人的游戏,且编号为0~n-2。

除去出的人,其余的每个人的编号都减去了k(k-1、k-2加n是为了保证正数)

那么我们从n-1个人的游戏中还原出n个人的游戏赢者的编号,只需要将k加回来即可(不过要保证编号在0~n-1中,这也就是为什么下的递推式中%n的原因

设f(n)表示n个人的游戏中的赢者

f(1)=0(因为第一个人的标号是0)
f(n)=(f(n-1)+k)%n

ps:这里的n式随着函数f中的n变化而变化的

以上是关于约瑟夫问题的推导的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 62. 圆圈中最后剩下的数字思路推导(约瑟夫环DP递归)

剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环,数学推导,动态规划)

剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环,数学推导,动态规划)

剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环,数学推导,动态规划)

快速查找约瑟夫问题的最后活体编号

约瑟夫环的java解决