约瑟夫环问题——数学证明 干货!通俗易懂

本文详细介绍了约瑟夫环问题,从数学角度进行证明,并提供了清晰的递推关系式。通过通俗易懂的方式解析问题,帮助读者理解算法,并附带了Java代码实现。

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

前言

看了好多博客抄来抄去,没有一个把事情说清楚的。当然也可能是我蠢看不懂人家高深的论述...

最终找到一篇我能看懂的帖子,现在用我的思路复述一遍...

如果你看我的帖子看不明白,可以选择移步原帖 地址:https://www.cnblogs.com/cmmdc/p/7216726.html

我相信这篇你一定能看懂,拿上纸笔跟我一起推公式,废话不多说...

什么是约瑟夫环问题

现在有n个人,从1编号至n。编号为1的人开始报数,当报到key时,报数为key的人出局。从key+1个人的位置继续从1开始报数。一直循环。试问最后一个出局人的人是谁?

 

干货! 干货! 干货!

我们把这n个人从0开始编号。这样做是因为key是有可能大于n的,所以出局的人编号应该是key%n,显然key也可能等于n,这就导致key%n=0 所以为了描述方便,我们从0开始编号,所以对我们来说 数到key-1的那个人出列

所以现在这些人的顺序是 0 1 2  ... n-2 n-1

显然出局人的序号将是(key-1)%n。那么下一次报0的人在原序列中的序号就将是 key%n,记为k1

我们重新进行排列,将k1作为第一个人, 剩下的n-1个人将得到如下序列

k1, k1+1, k1+2, ... , 0, 1, 2 ... k1-3, k1-2 (k1-1已经出局了&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值