约瑟夫环问题映射关系的推导

         关于约瑟夫环问题的解题方法可参考:

        http://www.cnblogs.com/woodfish1988/archive/2007/02/18/652251.html。

       http://blog.163.com/elite_lcf/blog/static/678395382009931105328270/

     本文着重介绍用递归思想解题时,映射关系的推导,这部分很多文章都一笔带过没有讲清楚,以下即为从长度为n-1序列中得出的解如何映射到长度为n的序列:

(1)若序列从1开始编号

映射关系的推导:
序列一: 1 2 3 ... k-1 k k+1 ... n   长度为n的序列
序列二: 1 2 3 ... k-1  k+1 ... n      删除K
序列三: k+1 k+2 ... n 1 2 ... k-1   重排序
序列四:1 2 3 ... n-k n-k+1 n-k+2 ... n-1
若求出序列四中胜利者编号为x,则它映射到序列三的编号为x`(在序列三中编号即为在长度为n序列的编号):
(1)当x<n-k时(k>0,n>0)
 x` = k+x;->k+x=(k+x-1)%n + 1
(2)当x>n-k时(且x<=n-1)
x` = x-(n-k);->x-(n-k)=(x-n+k)%(n)=(x-n+k+n)%n=(x+k)%(n)=(x+k-1)%n + 1
(3)当x=n-k时
x`= n = (x+k-1)%n +1

因此不论x为何值都有x` = (x+k-1)%n +1

显然:f(1)=1

因此有:从1开始编号的映射关系为:
f(1)=1
f(n)=((f(n-1)+k-1)%n +1)

(2)从0开始编号
序列一: 0 1 2 ... k-1 k k+1 ... n-1
序列二: 0 1 2  ... k  k+1 ... n-1   删除k-1
序列三: k k+1 ... n-1 0 1  ... k-2  重排序
序列四:0 1   ... n-k-1  n-k n-k+1 ... n-2
若求出序列四中胜利者编号为x,则它映射到序列三的编号为x`(在序列三中编号即为在长度为n序列的编号):
//从0开始编号
1)当x<=n-k时(k>0,n>0)
 x` = k+x;->k+x=(k+x)%n
(2)当x>n-k时
x` = x-(n-k);->x-(n-k)=(x-n+k)%(n)=(x-n+k-n)%n=(x+k)%(n)

因此不论x为何值都有x`= (f(n-1)+k)%n

显然:f(1) = 0;
因此有:从0开始的映射关系为:
f(1) = 0;
f(n)=((f(n-1)+k)%n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值