【发布时间】:2015-07-27 15:33:55
【问题描述】:
我正在阅读Josephus Problem 的算法。
我遇到了以下算法:
int josephusIteration(int n,int k) {
int a=1;
for(int i=1;i<=n;i++) {
a=(a+k-1)%i+1;
}
return a;
}
我无法理解它的逻辑。假设 n=5 和 k=2。
i=1, a=1
i=2, a=1
i=3, a=3
i=4, a=1
i=5, a=3
谁能举个例子解释一下?
【问题讨论】:
-
您在理解约瑟夫斯问题方面是否有问题,或者您是否特别想了解这个特定的算法。我问是因为它有一个更容易理解的递归解决方案。
-
我在理解问题本身时遇到了问题。我的意思是为什么它不断地服用%i?每次迭代代表什么?
-
i 表示当您从只剩下一个人到原始总数的点向后计算时活着的人数。非递归解决方案的关键是通过执行向后工作。模 i 是因为我们在每一步都有一个圆圈,并计算圆圈周围的 k 个位置。 a 代表幸存者在圈子内的位置。
-
@RichaTibrewal 阅读下面我的回答,了解约瑟夫斯问题的递归解决方案。如果您不完全理解,请告诉我。