Python 如果项目数未知,如何计算此展平数组函数的运行时复杂性?
我有一个函数可以展平给定的数组Python 如果项目数未知,如何计算此展平数组函数的运行时复杂性?,python,arrays,big-o,flatten,Python,Arrays,Big O,Flatten,我有一个函数可以展平给定的数组 def flatten(items): results = [] for i in items: if isinstance(i, list): results += flatten(i) else: results.append(i) return results 它工作得很好。当我给出如下所示的输入时,不可能知道它将运行多少次。有很多嵌套数组 data =
def flatten(items):
results = []
for i in items:
if isinstance(i, list):
results += flatten(i)
else:
results.append(i)
return results
它工作得很好。当我给出如下所示的输入时,不可能知道它将运行多少次。有很多嵌套数组
data = [1, 2, 3, [4], [5, 6], [[7, 8, 9], 10, 11, 12], [13, 14, 15, [[[16], 17], 18, 19], [[[20, 21]]]], [[[22], 23, [[24]]]]]
data_flatten = flatten(data)
print(data_flatten)
我不知道该如何计算这个函数的运行时复杂度?
,因为我假设,你关心最坏情况的性能,你可以考虑一个抽象的最坏情况的例子,然后从中得到答案。data=[[[…[1,2,3,…,m]]],[[…[1,2,3,…,m]],…,[[…[1,2,3,…,m]]].
现在你可以很容易地看到最坏的情况是如何受到三个因素的影响的。项的大小
,列表的深度,最后是最深列表中的元素数
因此,最坏情况下的复杂性是
O(nxddxm)
,其中n
,d
,和m
代表项的大小、嵌套列表的最大深度和最深列表中元素的最大数量。当涉及到复杂性时,确切的大小并不太重要。无论如何,常量都会被删除。如果您有一个3d数组,它必须在内部循环遍历所有项目,即使代码中不明显。所以答案是O(n**3),因为它需要一个循环中的一个循环。n的确切值并不重要,因为常数会被删除