我正在嘗試使遞歸函數的動態函數,我有點卡住了。遞歸動態函數
遞歸:
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