约瑟夫环
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACM新生培训讲座
约瑟夫环问题
主讲人:nuanran
Flavius Josephus
弗拉维奥·约瑟夫(37-100)是第一世纪时的 著名的犹太历史学家,也是军官及辩论家。 《犹太古史》(The Antiquities of the Jews):记录了由圣经创世记至公元66年的 犹太人历史,以旧约圣经为蓝图以及古人的 传说,编写而成的犹太巨著。由于当时的犹 太人散居各地,此书成为各地土生犹太人重 要学习典籍,亦为当代神学学者及历史学者 所采用。
而事实上J(n)确实满足上述规律,这个可以通过 归纳法得到证明,至此,约瑟夫环问题一可以用 O(lg(n))的算法很好地解决。
约瑟夫环问题二
问题描述:编号从1到n的n个人站成一个 环,从第一个人开始,每数到 m的时候, 去除该位置上的人,直到只剩下一个人, 求剩下的这个人的编号。 我们用J(n,m)表示人数为n,每次都去掉 第m个人的时候的解。
约瑟夫环问题一
剩下的n个人还是一个新的约瑟夫环问题。 1 3 2 5 3 4 … n-1 7 9 … 2n-1 n 2n+1
J(2n+1)=2*J(n)-1
约瑟夫环问题一
综上,我们可以得到如下递推公式:
该问题可以在O(n)的复杂度解决。
约瑟夫环问题一
约瑟夫环问题一
由上图可以看出如果n为2的幂次方的时候, J(n)=1,这是显然的。而在此之后J(n)以2递增, 因此我们可以猜测:
约瑟夫环问题一
约瑟夫环问题一
当有偶数个人的时候,我们假设为2n个人, 经过第一圈之后还剩下n个人。
约瑟夫环问题一
剩下的n个人又是一个新的约瑟夫环问题。 1 1 2 3 3 4 … n-1 5 7 … 2n-3 n 2n-1
J(2n)=2*J(n)-1.
约瑟夫环问题一
当有奇数个人的时候,我们假设为2n+1个人, 经过第一圈之后还剩下n+1个人。去掉2n之后, 下一个要去掉的就是1,最后还是剩下n个人。
约瑟夫环问题三
不要妄想再找到公式了,模拟是唯一的选择, 但是直接模拟的话,该算法的复杂度将达到 O(n^2). 事实上,我们可以用线段数对此做一个优化, 用线段数来统计每个区间上还剩下人的个数, 从而使算法的复杂度降低到O(n*logn)。 线段数??一棵平衡二叉树,它的每个节点 都是一个线段,这里就不做详细介绍了。
Flavius Josephus
《犹太战记》(War of the Jews) 《约瑟夫自传》(The Life of Flavius Josephus)
约瑟夫环问题
在犹太人和罗马的战争期间,约瑟夫和其他40个 犹太反叛者被罗马军队困在一个山洞中,这些犹 太反叛者宁愿自杀也不想被罗马军队抓住,于是 他们就站成一个环,从其中某个人开始数,每数 到的第三个人就要被杀掉,直到所有人都死光了。 但是约瑟夫和他的一个朋友觉得自杀是没有意义 的,他们并不想死,于是他很快就算出了他和他 的朋友应该站在什么位置,使他们两个成为最后 被杀的那两个人,并最终活了下来。
约瑟夫环问题二
为了方便,在这里我们把这n个人的编号改为从0到n-1, 第一个去掉的人总是m%n-1,剩下n-1个人,这n-1个人 又组成了一个从第m%n个人开始的新的约瑟夫环问题。 m%n 0 m%n+1 1 … … n-1 n-m%n-1 0 n-m%n … … m%n-2 n-2
J(1,m)=0; J(n,m)=(m%n+J(n-1,m))%n, n>=2. 最后的结果加1就OK了。 这个问题可以用O(n)的算法去解决。
约瑟夫环问题一
问题描述:编号从1到n的n个人站成一个 环,从第一个人开始,每数到 2的时候, 去除该位置上的人,直到只剩下一个人, 求剩下的这个人的编号。 我们用J(n)表示人数为n的时候的解。
约瑟夫wenku.baidu.com问题一
去掉的人的编号依次为2,4,6,8,10,3,7,1,9,最 后只剩下5,所以J(10)=5。
约瑟夫环问题三
问题描述:编号从1到n的n个人,站成一个环,每个 人手里拿着一个卡片,卡片上写着一个非零的数,首 先去掉编号为k的人,然后看他手里的卡片上的数字 m[k],如果m[k]>0,则去掉他左手边的第m[k]个人, 如果m[k]<0,则去掉他右手边的第m[k]个人。重复上 述步骤,直至只剩下一个人,问这个人的编号是多少。