#include <stdio.h>
#include <stdlib.h>
int max (int A[], int c, int d);
int main (void)
{
int i = 0;
int j = 0;
int A[3] = {-95,52,3};
int B[3][3];
for( i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(j < i)
{
B[i][j] = 0;
}
else
{
B[i][j] = max(A,i,j);
}
}
}
}
int max(int A[],int c,int d)
{
int i = 0;
int j = 0;
int max = -100;
for (i=c; i <= d; i++)
{
if(max < A[i])
{
max = A[i];
}
}
return max;
}
我不了解如何计算复杂性。我认为这是n ^ 2,但我不知道为什么会这样。
该程序采用单个数组,并根据从i到j的最大值创建一个双数组。输出正确。
答案 0 :(得分:2)
假设n
表示A
数组的大小以及B
的两个维度,您基本上已经嵌套了 3个 -loops,其中一个“外包”到max
函数中。
在最糟糕的情况下(当c
为0
且d
为n-1
时),每个元素都会运行n
元素。
因此,您的复杂性为O(n^3)
。
答案 1 :(得分:0)
因此,您有两个外部for循环(i
和j
),每个循环遍历n
个元素。如果j<i
您只是执行O(1)
操作,但如果i<=j
则完成max
。j-i+1
此函数具有另一个for循环,它在i
个元素上运行。由于我们知道j
和n
都受n
约束,因此最多只有O(n^3)
个元素。
我们可以简单地通过索引变量的总和来分析嵌套的for循环:
因此,该算法总共具有{{1}}的最坏情况复杂度。