问题定义:从围成标有记号 \(1\) 到 \(n\) 的圆圈的 \(n\) 个人开始,每隔一个删去一个人,直到只有一个人幸存下来,记最后幸存者的编号为 \(J_n\)。
我们假设一开始有 \(2n\) 个人,第一轮后剩下的人编号为 \(1,3,5,\dots,2n-1\),而这恰好是游戏从 \(n\) 个人开始的情形,只不过每个人的编号恰好是 \(n\) 人情形的两倍减一。所以我们可以推断
对于 \(J_{2n+1}\) 个人的情形,编号为 \(1\) 的人恰好是在编号为 \(2n\) 的人后面被删除,那么第一轮后剩下的人编号为 \(3,5,7,\dots,2n-1,2n+1\),这也恰好是游戏从 \(n\) 个人开始的情形,只不过每个人的编号恰好是 \(n\) 人情形的两倍加一。所以我们可以推断
综上我们得到约瑟夫问题的递归关系
封闭形式求解
关于约瑟夫问题封闭形式求解方法,我们一般先列出递归关系的前几项, 观察数据的规律,猜测出封闭形式的解,然后使用数学归纳法进行证明。
数学归纳法证明
首先我们列出递归关系的前几项
\(n\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ... |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
\(J_n\) | 1 | 1 | 3 | 1 | 3 | 5 | 7 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 1 | ... |
我们可以观察到,根据 2 的幂次可以将数据进行分组。每组的初始 \(J_n\) 总是 1,每次递增 2,最后 \(J_n\) 总是等于 \(n\)。因此,如果我们将 \(n\) 写成 \(n = 2^m + l\) 的形式, 其中 \(2^m\) 是不超过 \(n\) 的 2 的最大幂,而 \(l\) 则是剩下的数,那么递归式的解看起来是
下面我们对 \(m\) 使用数学归纳法证明:
-
当 \(m=0\) 时必定有 \(l=0\), 那么 \(J_1=1\),符合初值;
-
假设 \(m=k-1\) 时命题成立;
-
当 \(m = k\) 时,
- 如果 \(l\) 是偶数,则 \(J_{2^k+l} = 2J_{2^{k-1}+\frac{l}{2}} - 1 = 2(2\frac{l}{2}+1) - 1 = 2l+1,\)
- 如果 \(l\) 是奇数,则 \(J_{2^k+l} = J_{2^k+l-1+1} = 2J_{2^{k-1}+\frac{l-1}{2}} + 1 = 2(2\frac{l-1}{2}+1)+1 = 2l+1.\)
则命题成立。
约瑟夫问题扩展
问题1:在约瑟夫游戏中,倒数第二个幸存者的编号 \(I_n\) 是多少?
我们可以先列出 \(n\) 较小时的几种情况
\(n\) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ... |
---|---|---|---|---|---|---|---|---|---|---|---|---|
\(I_n\) | 2 | 1 | 3 | 5 | 1 | 3 | 5 | 7 | 9 | 11 | 1 | ... |
我们可以观察到,根据 2 的幂次可以依然将数据进行分组,而且其拥有与 \(J_n\) 一样的递归性质。那么我们猜测递归式的解为
下面我们使用数学归纳法证明
- 当 \(m=0\) 时必定有 \(l=0\) ,那么 \(I_3 = 1\),符合初值;
- 假设 \(m=k-1\) 时命题成立;
- 当 \(m=k\) 时,
- 如果 \(l\) 是偶数,则 \(I_{3\times2^k+l} = 2I_{3\times2^{k-1}+\frac{l}{2}}-1 = 2(2\frac{l}{2}+1)-1 = 2l+1,\)
- 如果 \(l\) 是奇数,则 \(I_{3\times2^k+l} = I_{3\times2^k+l-1+1} = 2I_{3\times2^{k-1}+\frac{l-1}{2}}+1 = 2(2\frac{l-1}{2}+1)+1 = 2l+1.\)
则命题成立。
问题2:约瑟夫问题的二进制性质。
假设 \(n\) 的二进制表示为 \(n=(b_mb_{m-1}\dotsb_1b_0)_b,m = \lfloor \log n \rfloor\),其中 \(b_m=1\)。注意到 \(n=2^m+l\),有
这里我们得到了
即我们将 \(n\) 向左循环移动一位就可以得到 \(J_n\)。
问题3:约瑟夫问题的一般形式。
我们对约瑟夫问题进行进一步推广,假设其递归关系为
我们先列出递推关系前几项
\(n\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... |
---|---|---|---|---|---|---|---|---|---|---|
\(f(n)\) | \(\alpha\) | \(2\alpha+\beta\) | \(2\alpha+\gamma\) | \(4\alpha+3\beta\) | \(4\alpha+2\beta+\gamma\) | \(4\alpha+\beta+\gamma\) | \(4\alpha+3\gamma\) | \(8\alpha+7\beta\) | \(8\alpha+6\beta+\gamma\) | ... |
我们可以观察到以下规律:\(\alpha\) 的系数是 2 的幂且不超过 \(n\),\(\beta\) 的系数从 2 的幂次减一开始逐渐递减到 0,\(\gamma\) 的系数从 0 逐渐递增到 2 的幂次减一。基于上述规律,我们假设约瑟夫一般问题递归关系的封闭形式解可以表示为
其中各项系数为
满足 \(n=2^m+l, 0 \leq l < 2^m, n \geq 1\)。上式可以使用数学归纳法进行证明。