canvas dClock
您的浏览器太古董了,升级吧!

约瑟夫问题

约瑟夫问题

准备了下初赛,然而发现有好多约瑟夫问题都不会...

首先是明确一下问题及其细节.

问题是有\(n\)个人,从\(0\)开始标号(这样接下来的运算会比较方面,因为%%%),围成环状,数到第\(k\)个人就杀掉,再继续数数,问最后留下的是哪个人.

\(k=2\)的特殊情况.

我们考虑一轮杀下来,再重新编号的话.

如果\(n\%2==0\),重新标号后位置为\(x\)的人就是
原来标号为\(x\times 2\)的人

否则\((n\%2==1)\),重新标号后位置为\(x\)的人就是原来表还为\(x\times 2+2\)的人.

由此得出递推式

\[f(n)=2\times f(n/2)(n\%2==0) \]

\[f(n)=2\times f(\lfloor n/2\rfloor)+2(n\%2==1) \]

然后打出一张表

\[n=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 \]

\[f(n)=0,0,2,0,2,4,6,0,2,4,6,8,10,12,14,0 \]

可以发现

\[f(n)=2\times l(将n表示为2^m+l,0<=l<2^m) \]

\[=将n的二进制最高位去掉再左移一位 \]

Proof:

应用数学归纳法.嘛...oier不需要详细证明

一般情况(to be continued..)

posted @ 2017-10-13 18:28  DOlaBMOon  阅读(194)  评论(0编辑  收藏  举报