如何降低复杂性?

时间:2013-03-18 16:08:29

标签: for-loop complexity-theory reduce

我必须使用动态编程来解决问题。

for(int i = 3; i < N; i++){
   for(int j= 3; j < T; j++){
   ..

我想降低复杂性。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

我需要了解你的递归的基本情况。我认为有了这些信息,我可以把它变成一个更有效的循环结构。但是根据我现在所知,我只是将你的第一个功能定义转录为逻辑C#等价物......

int S(int i, int j)
{
    if (?) // the base case, must be at least one, can have more then one.  (e.g. when i=N or j=T)
        return ?; // What gets returned ultimately controls how efficient we can make this.

    var maxValue = S(i-1, j-1);
    for (var k = j-2; k < i-3; k++)
        maxValue = Math.Max( maxValue, S(k, j-3) );
    return maxValue;
}

在for循环中,我们可以通过自己的比较而不是调用Math.Max来提高效率。我使用Math.Max很简单,因为它更容易阅读,但简单的性能增强是将S的返回值放入临时变量,然后使用&gt;?:来设置maxValue。