码迷,mamicode.com
首页 > 其他好文 > 详细

最進遇到的問題

时间:2018-11-03 02:22:45      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:元素   class   minus   解法   除了   约瑟夫   preview   .com   http   

遇到的問題文題目

思路简介:

    约瑟夫问题是学链表结构时的老问题,一般用循环链表做,但由于链表解法复杂度为m*n,当m、n较大时,这种模拟运算较为浪费时间,但观察一下,可以发现其中有一些规律。

比如说m为3,n我们从2开始,如果要使某位被选中最后获胜,则其位置必定为1,即第2个人(按0、1、2数);而当n为3时,只有位置是第2个的人才会最后获胜。

举例:下图(盗的)绿框为当n为11,m为3时,各轮元素所在位置;黄框为各轮被淘汰的元素;红框为最后一个留下的元素。

            技术分享图片

据上表,可以这样理解,当最后一轮淘汰开始的时候各元素的位置相当于最后第二轮各元素的位置向前移动了m(即3格),而前面3格的元素除了已被淘汰的,剩下的补充的队伍后面。由此反过来可以理解:

递推公式: 

           f(N,M)=(f(N1,M)+M)%N

f(N,M)表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号

f(N1,M)表示,N-1个人报数,每报到M时杀掉那个人,最终胜利者的编号

后面取模是因为防止前者相加过大,超过n。

最進遇到的問題

标签:元素   class   minus   解法   除了   约瑟夫   preview   .com   http   

原文地址:https://www.cnblogs.com/klsfct/p/9898967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!