约瑟夫问题

博客探讨了约瑟夫问题的解决方案,包括递归公式J(2n)=2J(n)-1和J(2n+1)=2J(n)+1,并通过二进制表示揭示了幸存者编号的循环移位规律。此外,还讨论了如何将这种方法拓展到更一般的形式f(n),并给出了其他递归式的解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天闲着无聊整理下《具体数学》中关于约瑟夫问题的讨论。

n个人围成一圈,从 1 n标号,每隔一个人处死一个人,求最后幸存下来的人的编号,例如 n=10 ,则被杀的人按顺序依次是:

2,4,6,8,10,3,7,1,9

当然可以直接模拟杀人的过程直到剩下最后一个,但这种方法不够快。

可以考虑递归做法,如果杀了一圈,那么这个时候我们可以把剩下的人从1开始重新排列,这样如果能够找到两次排列的编号关系,就可以用递归来解决了。

假设 n 为偶数,那么因为隔一个杀一个,因此,所有标号为偶数的人都会被杀掉,因此,我们如果将剩下幸存的人重新标号可得:

n=10为例,

杀之前: [1,2,3,4,5,6,7,8,9,10]

杀之后: [1,  ,2,  ,3,  ,4,  ,5,    ]

其中空出来的表示在这轮中阵亡的。

可以很轻松的发现这两者之间的关系(21),因此我们可得:

假设J(n)n个人的约瑟夫环最后剩下的幸存者的编号,因此有

J(2n)=2J(n)1

同理如果是奇数呢

n=9为例,

杀之前: [1,2,3,4,5,6,7,8,9]

杀之后: [  ,  ,1,  ,2,  ,3,  ,4]

其中空出来的表示在这轮中阵亡的。

因此,我们也可以得到他们之间的关系:(2+1),所以有:

J(2n+1)=2J(n)+1

因此合起来我们可以得到递推式:

J(2n)=2J(n)1

J(2n+1)=2J(n)+1

n=1时,则有J(n)=1

接下来求J(n)的闭形式:

根据J(2n)=2J(n)1,且J(1)=1可得,J(2m)=1恒成立,因此假设对于所有的数都能表示为2m+l0l<2m,则有

J(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值