函数作为参数 vs 在循环中 时间复杂度
functions as a parameter vs in a loop Time Complicity
我假设当将一个函数(我们称之为函数 B)作为参数传递给函数 A 时,它不一定添加到函数 A 的大 O 中。
functionA(functionB)
要么
len(range(n))
但是如果在迭代函数时调用函数,那么它确实会改变 big-o 时间共谋。
那么循环内置函数不会做同样的事情吗?
这里是 python 中的示例:
a=list() # of some array
for _ in range(a):
a.count(1)
我没有 CS 背景,谁能解释一下。
我不完全确定你在函数 B 中 "passing a function" 的意思,除非你是指装饰器...无论如何,如果你在另一个函数中调用一个函数,可以安全地假设你会必须考虑嵌套函数的时间复杂度。例如,如果我创建一个函数:
def funcA(i_max, j_max):
for i in range(i_max):
for j in range(j_max):
print("aaaaaaaah")
复杂度O(i_max * j_max)
,然后我再做一个函数:
def funcB(k_max):
for k in range(k_max):
funcA(some_i, some_j)
那么 funcB 自然会有复杂性 O(k_max * some_i * some_j)
– 所以你必须考虑其他函数的大 O。
我假设当将一个函数(我们称之为函数 B)作为参数传递给函数 A 时,它不一定添加到函数 A 的大 O 中。
functionA(functionB)
要么
len(range(n))
但是如果在迭代函数时调用函数,那么它确实会改变 big-o 时间共谋。
那么循环内置函数不会做同样的事情吗?
这里是 python 中的示例:
a=list() # of some array
for _ in range(a):
a.count(1)
我没有 CS 背景,谁能解释一下。
我不完全确定你在函数 B 中 "passing a function" 的意思,除非你是指装饰器...无论如何,如果你在另一个函数中调用一个函数,可以安全地假设你会必须考虑嵌套函数的时间复杂度。例如,如果我创建一个函数:
def funcA(i_max, j_max):
for i in range(i_max):
for j in range(j_max):
print("aaaaaaaah")
复杂度O(i_max * j_max)
,然后我再做一个函数:
def funcB(k_max):
for k in range(k_max):
funcA(some_i, some_j)
那么 funcB 自然会有复杂性 O(k_max * some_i * some_j)
– 所以你必须考虑其他函数的大 O。