我正在尝试使递归函数的动态函数,我有点卡住了。递归动态函数
递归:
static int F(int m, int n)
{
if(n == 0)
return m;
if (m == 0 && n > 0)
return n;
else
return Math.Min((1 + F(m - 1, n)), Math.Min((1 + F(m, n - 1)), (D(m-1, n-1) + F(m - 1, n - 1))));
}
static int D(int i, int j)
{
Console.WriteLine("i:{0} | j:{1}", i, j);
if (x[i] == y[j])
{
return 1;
}
return 0;
}
动态(所有我至今):
static int F2(int m, int n)
{
if (n == 0)
{
return m;
}
if(m==0 && n > 0)
{
return n;
}
else
{
//Math.Min((1 + F(m - 1, n)), Math.Min((1 + F(m, n - 1)), (D(m-1, n-1) + F(m - 1, n - 1))));
}
}
,问题是有人可以给我解释一下我怎么转换这个Math.Min((1 + F(m - 1, n)), Math.Min((1 + F(m, n - 1)), (D(m-1, n-1) + F(m - 1, n - 1))));
代码到动态?我对递归有点新。
DP算法的主要复杂性是弄清楚如何定义一个单元的方式。你已经做到了。除此之外,它看起来几乎与任何其他DP算法相同。我真的很努力地看到你想与哪一部分转换 - 这一切都非常简单。 – Dukeling