JAVA算法:约瑟夫环问题(Josephus Problem)
故事描述:
Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
又一个版本的描述:
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。
在计算机科学和数学中,约瑟夫问题(或约瑟夫排列)是一个理论问题。问题陈述如下:
有N个人围成一个圈等着被处决。计数从圆中的某一点开始,以固定的方向围绕圆进行。在每个步骤中,跳过一定数量的人,然后执行下一个人。消除的过程围绕着这个圈子进行(随着被处决的人被清除,这个圈子变得越来越小),直到最后一个被给予自由的人仍然存在。给定总人数n和k,表示跳过k-1人,在圈内杀死kth人。任务是选择初始圆中的位置,使您成为最后一个剩余的ÿ