我的功能的大O复杂性是什么,O(n)?
def f(n):
def g(m):
m = 0
for i in range(m):
print m
for i in range(n):
g(n)
答案 0 :(得分:0)
时间复杂度为O(n),因为m
在第3行设置为0
而g(m)
中的for循环从不运行。
如果评论第3行,即
def f(n):
def g(m):
# m = 0
for i in range(m):
print m
for i in range(n):
g(n)
时间复杂度为O(n ^ 2),因为print m
中的g(m)
将运行m
次,g(n)
运行n
次。时间复杂度为O(n m)。这里m
= n
,所以O(n m)= O(n ^ 2)。
如果评论第3行并修改从g(n)
到g(i)
的最后一行,即
def f(n):
def g(m):
# m = 0
for i in range(m):
print m
for i in range(n):
g(i)
时间复杂度为O(n *(n-1)/ 2)= O(n ^ 2)。调用g(i)
时很容易找到,print m
会运行i
次。因此,g(0), g(1), ... , g(n-1)
的总和运行时间为0 + 1 + ... + n-1 = n(n-1)/2
,因此时间复杂度为O(n *(n-1)/ 2)= O(n ^ 2)。