以下功能返回的值是多少?表达你的答案 功能使用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循环相比,这不会影响复杂性。
答案 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)
复杂度,在这种情况下,这是最差的平均值。如果这是你的问题,那么你的方法很好:)