Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果项目数未知,如何计算此展平数组函数的运行时复杂性?_Python_Arrays_Big O_Flatten - Fatal编程技术网

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的确切值并不重要,因为常数会被删除