ACM新生的培训讲座.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM新生培训讲座 Flavius Josephus 弗拉维奥·约瑟夫(37-100)是第一世纪时的著名的犹太历史学家,也是军官及辩论家。 《犹太古史》(The Antiquities of the Jews):记录了由圣经创世记至公元66年的犹太人历史,以旧约圣经为蓝图以及古人的传说,编写而成的犹太巨著。由于当时的犹太人散居各地,此书成为各地土生犹太人重要学习典籍,亦为当代神学学者及历史学者所采用。 Flavius Josephus 《犹太战记》(War of the Jews) 《约瑟夫自传》(The Life of Flavius Josephus) 约瑟夫环问题 在犹太人和罗马的战争期间,约瑟夫和其他40个犹太反叛者被罗马军队困在一个山洞中,这些犹太反叛者宁愿自杀也不想被罗马军队抓住,于是他们就站成一个环,从其中某个人开始数,每数到的第三个人就要被杀掉,直到所有人都死光了。但是约瑟夫和他的一个朋友觉得自杀是没有意义的,他们并不想死,于是他很快就算出了他和他的朋友应该站在什么位置,使他们两个成为最后被杀的那两个人,并最终活了下来。 约瑟夫环问题一 问题描述:编号从1到n的n个人站成一个环,从第一个人开始,每数到 2的时候,去除该位置上的人,直到只剩下一个人,求剩下的这个人的编号。 我们用J(n)表示人数为n的时候的解。 约瑟夫环问题一 去掉的人的编号依次为2,4,6,8,10,3,7,1,9,最后只剩下5,所以J(10)=5。 约瑟夫环问题一 约瑟夫环问题一 当有偶数个人的时候,我们假设为2n个人,经过第一圈之后还剩下n个人。 约瑟夫环问题一 剩下的n个人又是一个新的约瑟夫环问题。 1 2 3 4 … n-1 n 1 3 5 7 … 2n-3 2n-1 J(2n)=2*J(n)-1. 约瑟夫环问题一 当有奇数个人的时候,我们假设为2n+1个人,经过第一圈之后还剩下n+1个人。去掉2n之后,下一个要去掉的就是1,最后还是剩下n个人。 约瑟夫环问题一 剩下的n个人还是一个新的约瑟夫环问题。 1 2 3 4 … n-1 n 3 5 7 9 … 2n-1 2n+1 J(2n+1)=2*J(n)-1 约瑟夫环问题一 综上,我们可以得到如下递推公式: 该问题可以在O(n)的复杂度解决。 约瑟夫环问题一 约瑟夫环问题一 由上图可以看出如果n为2的幂次方的时候,J(n)=1,这是显然的。而在此之后J(n)以2递增,因此我们可以猜测: 而事实上J(n)确实满足上述规律,这个可以通过归纳法得到证明,至此,约瑟夫环问题一可以用O(lg(n))的算法很好地解决。 约瑟夫环问题二 问题描述:编号从1到n的n个人站成一个环,从第一个人开始,每数到 m的时候,去除该位置上的人,直到只剩下一个人,求剩下的这个人的编号。 我们用J(n,m)表示人数为n,每次都去掉第m个人的时候的解。 约瑟夫环问题二 为了方便,在这里我们把这n个人的编号改为从0到n-1,第一个去掉的人总是m%n-1,剩下n-1个人,这n-1个人又组成了一个从第m%n个人开始的新的约瑟夫环问题。 m%n m%n+1 … n-1 0 … m%n-2 0 1 … n-m%n-1 n-m%n … 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个人,站成一个环,每个人手里拿着一个卡片,卡片上写着一个非零的数,首先去掉编号为k的人,然后看他手里的卡片上的数字m[k],如果m[k]0,则去掉他左手边的第m[k]个人,如果m[k]0,则去掉他右手边的第m[k]个人。重复上述步骤,直至只剩下一个人,问这个人的编号是多少。 约瑟夫环问题三 不要妄想再找到公式了,模拟是唯一的选择,但是直接模拟的话,该算法的复杂度将达到O(n^2). 事实上,我们可以用线段数对此做一个优化,用线段数来统计每个区间上还剩下人的个数,从而使算法的复杂度降低到O(n*logn)。 线段数??一棵平衡二叉树,它的每个节点都是一个线段,这里就不做详细介绍了。

文档评论(0)

rabbitco + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8126037011000004

1亿VIP精品文档

相关文档