SORRY GUYS!我的错!谢谢你的提醒,我发现f(0,k)== f(k,0)== 1.这个问题是关于如何计算从网格(0,0)到(m,n)的最短路径数)。
我现在必须解决以下等式,确切地找出f(m,n)等于。
1) f(m,n) = 0 : when (m,n) = (0,0)
**2) f(m,n) = 1 : when f(0,k) or f(k,0)**
3) f(m,n) = f(m-1,n) + f(m,n-1) : when else
例如:
1) f(0,0) = 0;
2) f(0,1) = 1; f(2,0) = 1;
3) f(2,1) = f(1,1) + f(2,0) = f(0, 1) + f(1, 0) + f(2, 0) = 1 + 1 + 1 = 3
我记得有几种标准方法可以解决这种二进制递归方程,正如我几年前在算法类中学到的那样,但我现在还记不起来了。
有人可以提供任何提示吗?或关键字如何找到答案?
答案 0 :(得分:10)
呃,我只是通过我的旧教科书来生成函数,然后你再次改变了问题!
这个问题是关于如何计算从网格(0,0)到(m,n)的最短路径数。
这是一个基本的组合问题 - 它不需要了解有关生成函数甚至是递归关系的任何信息。
要解决这个问题,想象一下路径是作为U((用于“向上”)和R(用于“向右”)的序列写出的。如果我们从(0,0)移动到(例如)(5,8),则必须有5个R和8个U.只举一个例子:
RRUURURUUURUU
在这个例子中,总会有8个U和5个R;不同的路径只会让它们按不同的顺序排列。所以我们可以为我们的U选择8个位置,其余的必须是R'。因此,答案是
(8+5) choose (8)
或者,一般来说,
(m+n) choose (m)
答案 1 :(得分:3)
这只是二项式系数
f(m,n) = (m+n choose m) = (m+n choose n)
你可以通过注意它们满足相同的递归关系来证明这一点。
要导出公式(如果您不能猜测然后检查),请使用生成函数,正如Chris Nash正确建议的那样。
答案 2 :(得分:2)
尝试在文献中查找“生成函数”。一种方法是设想函数P(x,y),其中x ^ m y ^ n的系数是f(m,n)。重复行(第3行)告诉你P(x,y) - xP(x,y) - yP(x,y)=(1-xy)P(x,y)应该非常简单,除了那些讨厌的边缘值。然后求解P(x,y)。
你确定f(k,0) = f(0,k) = k
,而不是1吗?如果是的话,我会说最好的选择是写出一些价值,猜猜它们是什么,然后证明它。