For loop 如何降低复杂性?

For loop 如何降低复杂性?,for-loop,complexity-theory,reduce,For Loop,Complexity Theory,Reduce,我必须用动态规划解决一个问题 for(int i = 3; i < N; i++){ for(int j= 3; j < T; j++){ .. 我想降低复杂性。我如何做到这一点?我需要了解递归的基本情况。我想有了这些信息,我可以把它变成一个更有效的循环结构。但根据我现在知道的,我会把你的第一个函数定义转录成它的逻辑C等价物 int S(int i, int j) { if (?) // the base case, must be at least one,

我必须用动态规划解决一个问题

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

我想降低复杂性。我如何做到这一点?

我需要了解递归的基本情况。我想有了这些信息,我可以把它变成一个更有效的循环结构。但根据我现在知道的,我会把你的第一个函数定义转录成它的逻辑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 simple是因为它更易于阅读,但一个简单的性能增强是将s的返回值放入一个临时变量中,然后使用>?:设置maxValue