我只是想知道这个代码的Big O执行增长率的分解,我已经尝试计算它但是我得到了for循环错误。所以我现在完全陷入困境。
void doInter(int setA[], int setB[], int sizeA, int sizeB)
{
const int MAX = 10;
int sizeR;
int results [MAX];
// validate sizeA and sizeB
if ((sizeA == 0) || (sizeB == 0))
{
cout << "one of the sets is empty\n";
}
// save elements common to both sets
for (int i = sizeR = 0; i < sizeA; i++ )
{
if (member(setB, setA[i],sizeB))
{
results[sizeR++] = setA[i];
}
}
{
cout << results[i] << " ";
}
cout << "}" << endl;
}
bool member (int set[], int n, int size)
{
for (; size > 0; --size)
{
if (set[size-1] == n)
{
return true;
}
}
return false;
}
答案 0 :(得分:1)
此代码的复杂性为O(sizeA * sizeB)
。计算相对容易 - 首先计算内部函数member
的复杂性 - 这是一个单循环,在最坏的情况下,它将执行sizeB
次迭代。现在在外部函数中,您可以在大小为sizeA
的循环中调用此函数。因此总体复杂性是两个复杂性成倍增加。关于这两个周期,剩下的操作相对简单。
此外,很容易看到实现这种复杂性的示例 - 使用两个没有共同元素的数组。