有趣的算法例子
约瑟夫环(Josephus problem)
问题描述
这个问题说的是一个小故事。在很久以前,有n个犹太人遭到敌人的追击,他们逃到了一个山洞中,大部分的人决定宁愿去死也不要让敌人抓住。他们围成一圈,一个个轮流报数,报到k的人就要当场自杀,然后下一个人从1开始重新数数。而约瑟夫不想自杀,于是他灵机一动,站到了圈的一个位置上,结果其他人一个个都自杀了,最后只剩下约瑟夫一个人还活着,最终他逃出了山洞。那么问题来了,约瑟夫站的是哪个位置呢?
数学公式
递推公式:f ( N , M ) = ( f ( N − 1 , M ) + M ) % N
- f ( N , M ) 表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号
- f ( N − 1 , M )表示,N-1个人报数,每报到M时杀掉那个人,最终胜利者的编号
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Frite的个人博客!