如何推导执行时间增长率(Big O)?

时间:2012-07-05 12:11:08

标签: c++ testing

所以我有以下代码,我需要导出执行时间增长率,但是我不知道从哪里开始。我的问题是,我该怎么做呢?任何帮助将不胜感激。

谢谢。

// function to merge two sorted arrays
int merge (int smax, char sArray[], int tmax, char tArray[], char target[])
{
    int m, s, t;
    for (m = s = t = 0; s < smax && t < tmax;  m++)     
    {
        if (sArray[s] <= tArray[t]) 
        {
            target[m] = sArray[s];
            s++;
        }
        else
        {
            target[m] = tArray[t];
            t++;
        }
    }
    int compCount = m;
    for (; s < smax; m++)
    {
        target[m] = sArray[s++];
    }
    for (; t < tmax; m++)
    {
        target[m] = tArray[t++];
    }
    return compCount;
}

2 个答案:

答案 0 :(得分:0)

实际上很简单。

看,第一个for循环在每次迭代时增加st,因此它是O(smax + tmax)。第二个循环显然是O(smax),第三个循环是O(tmax)。我们总得到O(smax + tmax)

(有一些更聪明的方法可以证明,但我故意将它们排除在外。)

答案 1 :(得分:0)

所有循环的迭代次数均为(smax + tmax)。所以你可以说算法是O( max(smax,tmax) )O( smax +tmax)