问一道具体数学上的题目,期待高手进来解决

lyg_wangyushi 2007-12-30 09:07:39
在《具体数学》(concrete mathmatics)中第一章,作者给出了Joesephus Problem的一个非常漂亮的数学上的递归求解的办法。Joesephus Problem具体的说就是n个人围成一圈,从第一个人开始,依次杀死第q,2q,3q……个人,循环不断,直至最后
还称下q-1个人,但作者只给了每次杀死第二个人的数学的递归求解,后面就讨论递归式的求解,并没有给出原问题41个人围成一圈,每次杀死第三个人的求解。我想问一下,愿问题的递归式该如何建立,推广到n个人每次杀死第q个人的递归式如何建立,是否也有作者在第一章章的那种巧妙的数学递归解法,我想了一天多,无法自己解决,期待高手进来解决。
...全文
211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyg_wangyushi 2007-12-31
  • 打赏
  • 举报
回复
同样谢谢medie2005的回复
medie2005 2007-12-31
  • 打赏
  • 举报
回复
那是因为q=3的递归式中含取整运算符,而第一章没有提供解这个递归式的任何基础,因此,作者没有在第一章就解决q=3时的问题,而是在第三章讨论上整以及下整运算时,解决了它。

当然,q>2时的递归式也是不难建立的。

我们记i个人报数,依次杀死第q,2q,3q……个人,最后剩下的人为J(i,q),现在我们要求J(n,q)。

显然第一次出队是第q个人(假设n>=q),现在考虑剩下的n-1个人.
则在下一圈报数中,剩下的n-1个人是如下报数的:
q+1, q+2, ... , n, 1, 2, ... , q-1
记这个序列为T(n-1,i)。

我们将其标上序号,也就是:
T(n-1,i): q+1 , q+2 , ..., n, 1, 2, ... , q-1
i : 1, 2, ..., n-q, n-q+1, n-q+2, ..., n-1
观察上面两行,可得两者的关系式: T(n-1,i)=(i+q-1)%n+1。 (1)

若我们知道:n-1个人报数,依次杀死第q,2q,3q……个人,最后剩下的人的序号x,那么,由关系式(1),我们就可以得到原来n个人报数最后剩下的人的序号y=(x+q-1)%n+1。

即,我们得到了如下的递归式:
J(n,q)=( J(n-1,q)+q-1 )%n+1 (2)
lyg_wangyushi 2007-12-31
  • 打赏
  • 举报
回复
谢谢Vitin的回复
lyg_wangyushi 2007-12-31
  • 打赏
  • 举报
回复
to medie2005(阿诺)

谢谢你的回复,我知道对q要按模q的形式建立递归式,但就是无法像第一章一样找到那么巧妙的求解,
所以上社区来提问.非常感谢您的讲解,希望以后有不明白的地方还可以向您请教.过几天结贴
medie2005 2007-12-31
  • 打赏
  • 举报
回复
非常遗憾,目前并未发现这样的公式。而且也不太可能存在这样的公式。

其实,这样的结果也很好理解。
不知道楼主注意到没,《具体数学》中的推导其实按分类讨论来进行的:作者对n%2的两中情况分别得到了J(2*n)=2*J(n)-1;和J(2*n+1)=2*J(n)+1;这2个递归式,再将这2个式子统一为J(2^m+r)=2*r+1。

其实,对q=3的情形,递归式的获得也是按上面的方法的。不难发现,q为任意数时,按n%q的结果,要分q类来讨论,因此,得到的递归式有q个。而要将这q个递归式归结为1个,在q很小的时候(q=2,3),可能还能做到,但是,
随着q的增大,这项工作的难度是相当大的,可以说几乎是“不可能完成的任务”。
lyg_wangyushi 2007-12-31
  • 打赏
  • 举报
回复
对任意的q递归式可以转化成如第一章中一步求解的形式吗?
lyg_wangyushi 2007-12-31
  • 打赏
  • 举报
回复
是的
medie2005 2007-12-31
  • 打赏
  • 举报
回复
你想要什么样的递归式?
是像J(2^m+r)=2*r+1这样一步求解的吗?
lyg_wangyushi 2007-12-30
  • 打赏
  • 举报
回复
给出我思考的部分结果,比方有n个人,假设最终都要杀到只剩下一个人,
则J(1)=1;
J(2)=2;
J(3^m+k)=3*k+1,(当3*k+1<3^m+k时)
也可以将3^m+k表示成三进制形式。
但3*k+1>3^m+k时该如何处理。期待高手给一点思路。我顶!!!
lyg_wangyushi 2007-12-30
  • 打赏
  • 举报
回复
我晕,怎么还没有人回?我顶!
lyg_wangyushi 2007-12-30
  • 打赏
  • 举报
回复
怎么没人回复阿?这样吧,我把作者对于杀死每次的第二个人的解法贴一下
设有n个人,n可以表示成二进制(bmbm-1……b1b0)2,n=bm*2^m+bm-1*2^(m-1)……+b1*2+b0
设J(n)表示当有n个人时最终活下来得人的号码
我们可以得到如下递归式:
J(1)=1;
J(2*n)=2*J(n)-1;
J(2*n+1)=2*J(n)+1;
基于以上递归式,我们不难证明J(2^m+r)=2*r+1;
则当=n=2^m+r时,J(n)=2*r+1;(0<=r<2^m)
我们考察n的二进制表示n=(bmbm-1……b1b0)2=(1bm-1……b1b0)2
r=(0bm-1bm-2……b0)
2*r=(bm-1bm-2……b00)
2*r+1=(bm-1bm-2……b01)
则只要将n的二进制表示左移一位,再加上一,即得到结果。
lyg_wangyushi 2007-12-30
  • 打赏
  • 举报
回复
怎么没人回阿?我顶!!
Vitin 2007-12-30
  • 打赏
  • 举报
回复
Joesephus Problem当q>=3的情况在《具体数学》第三章3.3节FLOOR/CEILING RECURENCES中给出了解答(英文版79-81页)。因为公式不是很简单,需要一些预备知识,所以没有出现在第一章中。

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧