约瑟夫问题
这是约瑟夫问题的基础版,在原书的结论的基础上给出证明。
这篇应该可以算题解,可以认为是大绿本(我市优秀初中生至少人手一本)上面数学题的题解。
还是有点数学建模味的,也有点课内 21 题味了。
题目描述
题面摘自《培优竞赛》新版第 198 页。
有 n n n 张的一摞卡片,从最上面一张开始按如下的顺序进行操作:把最上面的第一张卡片舍去,把下一张卡片放在这一摞卡片的最下面。再把原来的第三张卡片舍去,把下一张卡片放在最下面……反复这样做,直到手中只剩下一张卡片。问:剩下的这张卡片是原来那一摞卡片的第几张?
注:此处题目的表述是先删再留,和流行的其他一些表述中的先留再删不同。但不难发现问题的本质仍然相同,可以通过加一或减一的方法进行转化。
解析
初步尝试,还原题意
根据题意模拟一下这个过程。以 n = 18 n = 18 n=18 时为例:
初始:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18.第一轮:
1, 2,3, 4,5, 6,7, 8,9, 10,11, 12,13, 14,15, 16,17, 18.
发现剩下的都是偶数,在二进制表示下,末位为 0。
本轮删掉的最后一个数是 17,跳过了 18,下一轮将从 2 开始删。第二轮:
1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18.
在二进制表示下,留下来的数,末两位为 00。
本轮删掉的最后一个数是 18,下一轮将跳过 4,从 8 开始删。第三轮:
1,2,3, 4,5,6,7,8,9,10,11, 12,13,14,15,16,17,18.
在二进制表示下,留下来的数,末三位为 100。
本轮删掉的最后一个数是 16,下一轮将跳过 4,从 12 开始删。第四轮:
1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18.
本轮将 12 删掉之后,只剩下 4。
经过四轮模拟,已经能够理解了题意,同时可知当 n = 18 n = 18 n=18 时结果为 4 4 4。
同时有几个发现:
- 每轮所有被保留的数,在二进制表示下,当前位上的数字相同。
- 第一轮一定删掉末位是 1 的,留下末尾是 0 的。
- 如果本轮删掉了现有的 最后一个数,那么下一轮将跳过下一轮的第一个数,从 第二个数 开始删。
- 如果本轮删掉了现有的 倒数第二个数,那么下一轮将 从 第一个数 开始删。
小规模打表,寻找规律
对 1 ≤ n ≤ 18 1 \le n \le 18 1≤n≤18 应用以上方法:
卡片总数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
剩下第几张 | 1 | 2 | 2 | 4 | 2 | 4 | 6 | 8 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 2 | 4 |
观察,寻找规律,猜想:
若 n = 2 a n = 2^a n=2a( a ∈ N a \in \mathbb N a∈N),剩下那张卡片恰好是原来一摞卡片的第 n n n 张。
若 n = 2 a + m n = 2^a + m n=2a+m ( a , m ∈ N a, m \in \mathbb N a,m∈N, 1 ≤ m < 2 a 1 \le m < 2^a 1≤m<2a),剩下那张卡片是原来一摞卡片的第 2 m 2m 2m 张。
先证明特殊情况
对于上述第一种情况,即 n = 2 a n = 2^a n=2a 时,证明相对较简单。
a ≤ 1 a \le 1 a≤1 时显然。当 a > 1 a > 1 a>1 时:
第 1 轮肯定把所有二进制下第 0 位是 1 的删掉了, 最后一个数是 2 a 2^a 2a,肯定是没有动的,删了的是倒数第二个。
假设第 ( x − 1 ) (x-1) (x−1) 轮中最后一个数 2 a 2^a 2a 还在,现在证明第 x x x ( x ≤ a x \le a x≤a)轮中 2 a 2^a 2a 还在。
因为上一轮中最后一个数还在,所以本轮中会从本轮的第一个数开始删,把当前位是 1 的数删掉。
此处的“当前位”,指的是二进制下的第 ( x − 1 ) (x-1) (x−1) 位,这一位是 1 说明在二进制表示中有一项是 2 x − 1 2^{x-1} 2x−1。
而最后一个数当前位显然一定是 0,在第 x x x 轮中不会被删去,会得到保留。
应用数学归纳法,可知在一共 a a a 轮的删除操作中, 2 a 2^a 2a 会一直被保留。
所以剩下的最后一张卡片就是原来卡片的第 n n n 张。
再看一般的情况
直接证,比较难证,需要讨论的因素比较多。
那么可以尝试着换一个思路,看看能不能把一般的情况转化成特殊的 2 2 2 的次幂的情况。
看看,如果先抛掉 m m m 张的话,是不是就转化成 2 2 2 的次幂了呢?
确实,那么删掉 m m m 个数之后是怎样?
应该是删掉了 1 , 3 , 5 , ⋯ , 2 m − 1 1, 3, 5, \cdots, 2m-1 1,3,5,⋯,2m−1 共 m m m 个数,剩下 2 a 2^a 2a 个数,越过了 2 m 2m 2m,下一个要删掉的是 2 m + 1 2m+1 2m+1。
注意到 m < 2 a m < 2^a m<2a,且 m m m 和 2 a 2^a 2a 都是整数,所以 m + 1 ≤ 2 a m+1 \le 2^a m+1≤2a,所以 2 m + 1 ≤ 2 a + m = n 2m+1 \le 2^a + m = n 2m+1≤2a+m=n, 2 m + 1 2m+1 2m+1 存在且不越界。
这意味着得到一摞共 2 a 2^a 2a 张卡片,最顶上还没删但是将要删的编号是 2 m + 1 2m+1 2m+1,最底下的编号是 2 m 2m 2m。
根据上一种情况的结论,此时答案就是最后一张, 2 m 2m 2m。
应用
- 当 n = 64 = 2 6 n = 64 = 2^6 n=64=26 时,答案为 64 64 64;
- 当 n = 100 = 2 6 + 36 n = 100 = 2^6 + 36 n=100=26+36 时,答案为 2 × 36 = 72 2 \times 36 = 72 2×36=72;
- 当 n = 2024 = 2 10 + 1000 n = 2024 = 2^{10} + 1000 n=2024=210+1000 时,答案为 2 × 1000 = 2000 2 \times 1000 = 2000 2×1000=2000。
总结
事实上,书中本讲的标题为《从简单情形看问题》,这一方法运用了三次。
第一次选一个比较有代表性的数,模拟题意,发现模拟过程中删数的基本规律,为下面的证明铺路。
第二次对小规模数据打表,寻找其中的规律。
第三次先对 n n n 为 2 2 2 的次幂的特殊情况先进行证明,再将一般情况转化为这种特殊情况。