首页 > 解决方案 > 查找以下算法的复杂性

问题描述

我在大学里有关于 C++ 的算法讲座,目前我们的主题是“动态编程”,我们获得了三个算法示例,但没有提供其他信息,例如:时间复杂度、内存使用情况,只提供了代码没有给定算法的名称。

我一直在努力寻找它们,但我只找到了三个中的一个,女巫原来是Floyd-Warshall 算法的某个模型版本,但其他算法的运气不佳。

我想其他两个代码也是对众所周知的算法的修改,所以如果 somwone 识别它们,请告诉我名称,我会找到复杂性细节以及它自己如何深入工作。

    int t[MAXN],s[MAXN],M[MAXN]; 
    void restore(int i)
    { 
      if(i==1) {printf("(1) ");return;} 
      if(i==2)
      {  if(M[2]== t[1]+t[2]) 
         { printf("(1) (2) ");return;} 
         else { printf("(1 2) " );return;};
    }
    if(M[i]==t[i]+M[i-1]) 
    { restore(i-1); printf("(%d) ",i);} 
    else 
    {restore(i-2); printf("(%d %d) ",i-1,i);}
   }

这是第一个代码。

    int G[MAXN][MAXN]; //сп. на съседите
    int H[MAXN][MAXN]; //сп. на предшеств.
    int L[MAXN],N, s[MAXN];//топ. сортирани върхове 
    void opt()
    {   top_sort(G,s);//
        for(int i=1;i<=N;i++)
        { int k=s[i]; L[k]=0;
          if(H[k][0]!=0)
          { for(int j=1;j<=H[k][0];j++)
              if(L[H[k][j]]>L[k]) L[k]=L[H[k][j]];
            L[k]++; 
          }
        }  
    }

标签: c++algorithm

解决方案


推荐阅读