约瑟夫问题

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

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

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+l 0l<2m ,则有

J(
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值