约瑟夫斯问题中的递归关系

时间:2012-08-28 08:11:56

标签: math recurrence josephus

以下递归josephus problem可以是solved

 josephus(n, k) = (josephus(n - 1, k) + k-1) % n + 1
 josephus(1, k) = 1

如何推导出这种递归关系?

2 个答案:

答案 0 :(得分:1)

这一段就足够来自维基百科..

  

当索引从1开始时,那个s的人就从   第一个人在位((s-1)\ bmod n)+1,其中n是总数   人数。设f(n,k)表示幸存者的位置。   在第k个人被杀之后,我们留下了一个n-1圈,并且   我们开始下一个计数与原始人数     问题是(k \ bmod n)+1。幸存者在中国的地位   如果我们从1开始计数,剩余的圆将是f(n-1,k);   转移这个以解释我们从(k \ bmod。)开始的事实   n)+1产生复发

     

f(n,k)=((f(n-1,k)+k-1) \bmod n)+1,\text{ with }f(1,k)=1\,,

答案 1 :(得分:1)

josephus(n,k)=(josephus(n - 1,k)+ k-1)%n + 1 ......(1)

用简单的话说 - 从公式中的“+1”开始。这意味着已经完成了1次重复迭代。现在,我们将留下n-1个人/元素。我们需要以k的间隔递归地处理n-1个元素。但是,现在,由于要移除的最后一个元素位于第k个位置,我们将从中继续。因此,k-1增加了。此外,这种添加可能会扰乱数组的索引。因此%n完成了将数组索引保持在边界内。 希望它清晰而精致:)。