约瑟夫环公式法解释

公式法:
F(N,M) = (F(N-1,M) + M) % N
F(1,M) = 0 (索引从0开始)
F是每一轮中存活的人对应的编号。
递推过程如下:设编号为2的出局(即M=3)

  1. 已知F(1,M) = 0,即只有一个人的队伍中,存活的肯定是编号0
  2. 从最后一轮F(1,M)求解倒数第二轮F(2,M):
    倒数第二轮有两个人,杀掉一个人后剩余一人;
    那对应的报号顺序为: 0 1 2 0,(最后一个0对应的存活的人,也就是最后一轮的编号)
    实际报号顺序对应的编号是:0 1/ 0 1 (上下对应,最后剩的人对应编号为1.)
    故倒数第二轮(0,1),剩余的是编号为1
  3. 倒数第三轮同理
    报号顺序: 0 1 2 0 1(最后的0,1表示这轮之后存活的人,也就是倒数第二轮中人的编号)
    实际编号: 0 1 2/ 0 1(这一轮实际有三个人,对应实际编号,最后剩余的人也是编号1)
    故倒数第三轮(0,1,2),剩余的是编号为1
  4. 倒数第四轮
    报号顺序: 0 1 2 0 1 2(最后的0,1,2表示这轮之后存活的人,也就是倒数第三轮轮中人的编号)
    实际编号: 0 1 2 3/ 0 1(这一轮实际有4个人,对应实际编号,最后剩余的人也是编号1)
    故倒数第三轮(0,1,2,3),剩余的是编号为0
  5. 倒数第五轮
    报号顺序:0 1 2 0 1 2
    实际顺序:0 1 2 3 4/ 0
    故下一轮中这一轮中对应的是编号3

归纳可以得到结论,如果我们知道N-1个人中,最终剩余的人的编号,那么,就可以得到N个人最终剩余的编号
因为从N个人到N-1个人,一定经过了1次,0到M-1的报号,如图所示
N中的报号顺序
红色的N-1个编号就是就是下一轮N-1个人的实际编号顺序,也可以与N中的编号相对应了
所以N-1中幸存者编号对应N中幸存者编号就是:
F(N,M) = (F(N-1,M)+M)%N
例如,如果F(N-1,M)=1,那么它在F(N,M)中的编号为M+1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值