论坛首页 综合技术论坛

作为面试题目不错的,有意思的兔子问题。

浏览 10166 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-13   最后修改:2011-05-13
http://www.cnblogs.com/j2eedesigner/archive/2008/12/26/1362743.html 

   g(0)=1;g(n)=g(n-1)+2g(n-2)+3g(n-3)+...+(n-1)g(1)+ng(0);

  偶遇,某大牛(高中数学老师),他一道题目比较有意思(属于加强型的兔子问题),纠结了蛮久,想不出如何推导出通项,看到人家推出结果,自己推不出,难免不爽。。。。。
找百度,GOOGLE根本木有。。。。。
  还是感谢oeis,老实说我英文菜的要死,小学单词量都没。

  如何求解:其实也是蛮简单的

根据条件:g(0)=1;g(n)=g(n-1)+2g(n-2)+3g(n-3)+...+(n-1)g(1)+ng(0);

我们可以推导出:
g(n+1)=3g(n)-g(n-1)(证明过程很长,不写了)基本方法就是化成冥次方法: g(n)=x^(n-1)+2x^(n-2)+....n


然后有了g(n+1)=3g(n)-g(n-1)我们设
g(n)=x^n
x^(n+1)-x^n+x^(n-1)=0
提取x^(n-1)
求解x^2-x+1=0的解
因为x^(n-1) 不等于0
所以x^2-x+1=0才是所求的。(到这步就和求普通兔子问题一样的方法了。)
   发表时间:2011-05-13   最后修改:2011-05-13
你这本质是一样的,证明过程也很简单,2步就可以了
g(n)-g(n-1)=g(n-1)+g(n-2)+g(n-3)+........+g(0)
g(n+1)-g(n)=g(n)+g(n-1)+g(n-2)+........+g(0)
再相减就是g(n+1)=3g(n)-g(n-1)
其实和f(n)=f(n-1)+f(n-2)差不多


0 请登录后投票
   发表时间:2011-05-13  
膜拜数学系大牛。我还发过一题。加强型汉诺塔,本论坛至今无人解答,盼望看看。。。
fivestarwy 写道
你这本质是一样的,证明过程也很简单,2步就可以了
g(n)-g(n-1)=g(n-1)+g(n-2)+g(n-3)+........+g(0)
g(n+1)-g(n)=g(n)+g(n-1)+g(n-2)+........+g(0)
再相减就是g(n+1)=3g(n)-g(n-1)
其实和f(n)=f(n-1)+f(n-2)差不多



0 请登录后投票
   发表时间:2011-05-13   最后修改:2011-05-13
cttnbcj 写道

N根塔,M个盘子,M>N,盘子在第一根塔上(可以标为塔1),所有盘子移动到最后一根塔(标为塔N),所有塔都可以用。条件:保证任何时候每根塔上的盘子,大盘在下,小盘在上,求最少需要多少次移动盘子,可以把盘子都放到第N根塔上?(只要次数,不需要流程)  给出代码或这公式都可以(最好公式)


汉诺塔的问题找最优解估计比较麻烦,网上给的递归解只是一种可行解,不一定是次数最少的。
N根塔,M个盘子,先把前N-3个盘子放在中间的N-3个塔上,再按照3个塔的那样玩法把第一个塔的所有盘子移到第N个塔上(中间要借用第N-1个塔),再把剩下的塔移到第N个塔上。
设G(3,M)为3根塔,M个盘子所要的移动步数,则G(N,M)=G(3,M)+2(N-3)

0 请登录后投票
   发表时间:2011-05-14   最后修改:2011-05-14
fivestarwy 写道
cttnbcj 写道

N根塔,M个盘子,M>N,盘子在第一根塔上(可以标为塔1),所有盘子移动到最后一根塔(标为塔N),所有塔都可以用。条件:保证任何时候每根塔上的盘子,大盘在下,小盘在上,求最少需要多少次移动盘子,可以把盘子都放到第N根塔上?(只要次数,不需要流程)  给出代码或这公式都可以(最好公式)


汉诺塔的问题找最优解估计比较麻烦,网上给的递归解只是一种可行解,不一定是次数最少的。
N根塔,M个盘子,先把前N-3个盘子放在中间的N-3个塔上,再按照3个塔的那样玩法把第一个塔的所有盘子移到第N个塔上(中间要借用第N-1个塔),再把剩下的塔移到第N个塔上。
设G(3,M)为3根塔,M个盘子所要的移动步数,则G(N,M)=G(3,M)+2(N-3)


恩,这个就是我在CSDN发过的题目。。
最优解:你把多余N-3<K个盘子放到N-3个盘子上时候,多出的次数,和你把在K-N-3盘子从第一根用三根塔方法放到第N根盘子的次数是一样的。。。。
0 请登录后投票
   发表时间:2011-05-18   最后修改:2011-05-18
瞄了第一个递推的,如果令前n项和的数列为s(n)的话,有:
g(n) = g(n-1) + s(n-1)
以此递推的话估计也能完成……

修改:
发现自己也是看贴不仔细啊,LZ的走的路线和我的差不多。
不过推导前n项和的关系没那么麻烦:
我们注意到:
g(n) = g(n-1) + 2g(n-2) + ... + (n-1)g(1)
g(n-1) = g(n-2) + 2g(n-3) + ... + (n-2)g(1)
于是有
g(n) - g(n-1) = g(n-1) + g(n-2) + g(n-3) + ... + g(1) = s(n-1)
于是有:
g(n) = g(n-1) + s(n-1)
s(n) = s(n-1) + g(n) = 2s(n-1) + g(n-1) = 2s(n-1) + s(n-1) - s(n-2) = 3s(n-1) - s(n-2)
也就是:
s(n+1) = 3s(n) - s(n-1)
不过LZ和引用文献里的用方程求解的方法,应该是通用的,这个是特例的

0 请登录后投票
   发表时间:2011-05-18   最后修改:2011-05-18
此题很简单的说吧,学过高等数学的都应该知道吧,但是要考虑临界点的问题。
设n=k+1 n-1=k,然后用g(n)+g(n-1)....= g(k+1)+g(k)....
又g(k)+g(k-1)....=g(0);错位相消
这样应该就可以算出来了吧呵呵
还有就是楼主给的那个展开式好像是(1+x)^n 级数展开式吧,貌似叫什么麦克劳伦公式,是当泰勒级数展开后 中令g(x) x=0的时候的特殊情况
0 请登录后投票
   发表时间:2011-05-19  
高中的替代法
0 请登录后投票
   发表时间:2011-05-19  
blackbeans 写道
此题很简单的说吧,学过高等数学的都应该知道吧,但是要考虑临界点的问题。
设n=k+1 n-1=k,然后用g(n)+g(n-1)....= g(k+1)+g(k)....
又g(k)+g(k-1)....=g(0);错位相消
这样应该就可以算出来了吧呵呵
还有就是楼主给的那个展开式好像是(1+x)^n 级数展开式吧,貌似叫什么麦克劳伦公式,是当泰勒级数展开后 中令g(x) x=0的时候的特殊情况

不是泰勒级数 ,冥次生成函数。
公式差不多,但系数的意义和公式应用范围不一样。
0 请登录后投票
   发表时间:2011-05-19  
这是高中数学,不是高数
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics