【问题标题】:C# Dynamic programming conversionC# 动态编程转换
【发布时间】:2020-09-13 01:04:29
【问题描述】:

您好,我的任务是将指数代码转换为线性代码,但我不知道该怎么做。您能给我一些提示或指出正确的方向吗?

代码如下:

        int F (int m, int n)
        {
            if(n == 0)
            {
                return m;
            }

            else if(m == 0 && n > 0)
            {
                return n;
            }

            else
            {
                int[] array = { 1 + F(m - 1, n), 1 + F(m, n - 1), D(m, n) + F(m - 1, n - 1) };
                return array.Min();
            }
        }

        int D(int i, int f)
        {
            if(x[i] == y[f])
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }

更新:

我的方向正确吗?到目前为止,它仅适用于 m=0,1,2 和 n=0,1,2。如果假设我给出 m = 10 和 n = 20,我该如何填写所有值?

int Fdp(int m, int n)
        {
            fdin[m, 0] = m;

            for(int i = 0; i <= n; i++)
            {
                fdin[0, i] = n;
            }

            if (n == 0)
            {
                return m;
            }

            else if (m == 0 && n > 0)
            {
                return n;
            }

            else
            {

                int[] temp = { 1 + fdin[m-1, n], 1+ fdin[m,n-1], D(m,n) + fdin[m-1,n-1] };
                fdin[m, n] = temp.Min();
                return temp.Min();
            }

        }

【问题讨论】:

  • 一种方法是 memoization:将已知(计算)DF 值放入字典中,不再计算它们。
  • 通常,在尝试优化这样的事情时,理解 intent 是关键,这样您就可以将其概念化并考虑实现相同目的的替代方法,而无需计算一切(例如,当某些值不可能成为必要时,合理化);当你只有FDifmn 时,很难将某些东西概念化。

标签: c# dynamic-programming


【解决方案1】:

解决了。

        static int Fdp(int m, int n)
        {
            for (int i = 0; i <= m; i++)
            {
                fdin[i, 0] = i;
                for (int j = 1; j <= n; j++)
                {
                    if(i == 0)
                    {
                        fdin[i, j] = j;
                    }
                    else
                    {
                        int[] temp = new int[] { 1 + fdin[i - 1, j], 1 + fdin[i, j - 1], D(i, j) + fdin[i - 1, j - 1] };
                        fdin[i, j] = temp.Min();
                    }
                }
            }
            return fdin[m,n];
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多