算法分析:大哦复杂性,表达输出为功能

时间:2014-12-08 08:23:46

标签: algorithm time-complexity analysis pseudocode asymptotic-complexity

以下功能返回的值是多少?表达你的答案 功能使用O()表示法给出最坏情况下的运行时间。

算法的伪代码:

  F1(n)

    v = 0 

    for i = 1 to n
        for j = n + 1 to 2n
             v++
    return v

我的方法:

F1(n)的输出是从变量v返回的整数值,它是在大小为2n的迭代期间由内部for循环计算的,对于外部for循环在大小n上计算的。

在两个循环的迭代开始之前,变量v被初始化为0。当第i个for循环处于第1次迭代时,则第j个for循环(内部for循环)从大小n + 1迭代到2n。假设n = 5,那么第j个for循环从j = 6迭代到10,这意味着对于内部for循环的1次完整迭代,v递增的次数。

由于第j个for循环总是将v增加n-1(在这种情况下为4),然后在每次完整迭代中这意味着当第i个for循环从1开始到n然后变量v增加n-1每次迭代的次数。

因此该算法映射函数g(n)=(n-1)*(n-1)。这将是4 * 4,所以当n = 5时v = 16.这是正确的,因为当n = 5时,每个完整的第j次迭代v增加4.因此,如果第i个for循环从i = 1,...,4运行(1到n)然后每次i递增时v增加4,这就解释了为什么结果将是(n-1 * n-1)作为答案。

此程序的最坏情况Big Oh复杂度为O(n ^ 2),因为它具有嵌套循环结构,其中外循环迭代1到n次,内循环迭代n + 1到2n次也相当于n次,因为它遍历n的所有值。

最后,变量的初始化/递增需要O(1)时间,因此与嵌套的for循环相比,这不会影响复杂性。

1 个答案:

答案 0 :(得分:2)

对我来说,这个映射g(n)=n^2函数,因为如果计算范围for i=1 to n中的所有值,循环[1,n]会运行n次。当然,如果它是[1,n),那么你有g(n)=(n-1)^2但这是常规问题。

两个嵌套循环,每个循环运行n次会给你O(n^2)复杂度,在这种情况下,这是最差的平均值。如果这是你的问题,那么你的方法很好:)