找到这个二元递推方程的公式? f(m,n)= f(m-1,n)+ f(m,n-1)

时间:2012-01-26 22:59:12

标签: algorithm math recurrence

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  

我记得有几种标准方法可以解决这种二进制递归方程,正如我几年前在算法类中学到的那样,但我现在还记不起来了。

有人可以提供任何提示吗?或关键字如何找到答案?

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吗?如果是的话,我会说最好的选择是写出一些价值,猜猜它们是什么,然后证明它。