具体数学 - 约瑟夫问题 The Josephus Problem

问题定义:从围成标有记号 \(1\)\(n\) 的圆圈的 \(n\) 个人开始,每隔一个删去一个人,直到只有一个人幸存下来,记最后幸存者的编号为 \(J_n\)

我们假设一开始有 \(2n\) 个人,第一轮后剩下的人编号为 \(1,3,5,\dots,2n-1\),而这恰好是游戏从 \(n\) 个人开始的情形,只不过每个人的编号恰好是 \(n\) 人情形的两倍减一。所以我们可以推断

\[J_{2n} = 2J_n - 1, n \geq 1. \]

对于 \(J_{2n+1}\) 个人的情形,编号为 \(1\) 的人恰好是在编号为 \(2n\) 的人后面被删除,那么第一轮后剩下的人编号为 \(3,5,7,\dots,2n-1,2n+1\),这也恰好是游戏从 \(n\) 个人开始的情形,只不过每个人的编号恰好是 \(n\) 人情形的两倍加一。所以我们可以推断

\[J_{2n+1} = 2J_n + 1, n \geq 1. \]

综上我们得到约瑟夫问题的递归关系

\[\begin{align*} J_1 &= 1, \\ J_{2n} &= 2J_n - 1, n \geq 1, \\ J_{2n+1} &= 2J_n + 1, n \geq 1. \end{align*} \]

封闭形式求解

关于约瑟夫问题封闭形式求解方法,我们一般先列出递归关系的前几项, 观察数据的规律,猜测出封闭形式的解,然后使用数学归纳法进行证明。

数学归纳法证明

首先我们列出递归关系的前几项

\(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\) 则是剩下的数,那么递归式的解看起来是

\[J_{2^m+l} = 2l + 1, m \geq 0, 0 \leq l < 2^m. \]

下面我们对 \(m\) 使用数学归纳法证明:

  1. \(m=0\) 时必定有 \(l=0\), 那么 \(J_1=1\),符合初值;

  2. 假设 \(m=k-1\) 时命题成立;

  3. \(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\) 一样的递归性质。那么我们猜测递归式的解为

\[\begin{align*} I_2 &= 2, \\ I_{3 \times 2^m + l} &= 2l + 1, m \geq 0, 0 \leq l < 2^m. \end{align*} \]

下面我们使用数学归纳法证明

  1. \(m=0\) 时必定有 \(l=0\) ,那么 \(I_3 = 1\),符合初值;
  2. 假设 \(m=k-1\) 时命题成立;
  3. \(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\),有

\[\begin{align*} n &= (1b_{m-1} \dots b_1b_0)_b, \\ l &= (0b_{m-1} \dots b_1b_0)_b, \\ 2l &= (b_{m-1} \dots b_1b_00)_b, \\ 2l+1 &= (b_{m-1} \dots b_1b_01)_b, \\ J_n &= (b_{m-1} \dots b_1b_0b_m)_b. \end{align*} \]

这里我们得到了

\[J_{(b_mb_{m-1} \dots b_1b_0)_b} = (b_{m-1} \dots b_1b_0b_m)_b. \]

即我们将 \(n\) 向左循环移动一位就可以得到 \(J_n\)

问题3:约瑟夫问题的一般形式。

我们对约瑟夫问题进行进一步推广,假设其递归关系为

\[\begin{align*} f(1) &= \alpha, \\ f(2n) &= 2f(n) + \beta, \\ f(2n+1) &= 2f(n) + \gamma. \end{align*} \]

我们先列出递推关系前几项

\(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 的幂次减一。基于上述规律,我们假设约瑟夫一般问题递归关系的封闭形式解可以表示为

\[f(n) = A(n)\alpha + B(n)\beta + C(n)\gamma. \]

其中各项系数为

\[\begin{align*} A(n) &= 2^m, \\ B(n) &= 2^m - 1 - l, \\ C(n) &= l. \end{align*} \]

满足 \(n=2^m+l, 0 \leq l < 2^m, n \geq 1\)。上式可以使用数学归纳法进行证明。

posted @ 2025-02-24 14:57  WenbinTeng  阅读(158)  评论(0)    收藏  举报