锁定老帖子 主题:作为面试题目不错的,有意思的兔子问题。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-13
最后修改:2011-05-13
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才是所求的。(到这步就和求普通兔子问题一样的方法了。) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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)差不多 |
|
返回顶楼 | |
发表时间: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)差不多 |
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间: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根盘子的次数是一样的。。。。 |
|
返回顶楼 | |
发表时间: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和引用文献里的用方程求解的方法,应该是通用的,这个是特例的 |
|
返回顶楼 | |
发表时间: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的时候的特殊情况 |
|
返回顶楼 | |
发表时间:2011-05-19
高中的替代法
|
|
返回顶楼 | |
发表时间: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的时候的特殊情况 不是泰勒级数 ,冥次生成函数。 公式差不多,但系数的意义和公式应用范围不一样。 |
|
返回顶楼 | |
发表时间:2011-05-19
这是高中数学,不是高数
|
|
返回顶楼 | |