Python 如何高效地获取长度为2或2以上的数组的所有子数组?
产生的子阵列应该是Python 如何高效地获取长度为2或2以上的数组的所有子数组?,python,arrays,algorithm,sub-array,Python,Arrays,Algorithm,Sub Array,产生的子阵列应该是 array =[1,2,3,4] O(n)?也许如果你有无限的内存,在实数/虚数系统中存储每个可能的子数组,以便有效访问,那么当然,你可以有任何你喜欢的复杂算法 …但现实地说,不管你做得有多有效,你都在沿着O(n^3)的方向看问题 [1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4] 一行代码隐藏了两个循环和切片操作,所有这些都增加了复杂性。但是,它的效率和速度与底层算法所允许的一样。O(n)?也许如果你有无限的内存,在实数/虚数系统中存
array =[1,2,3,4]
O(n)?也许如果你有无限的内存,在实数/虚数系统中存储每个可能的子数组,以便有效访问,那么当然,你可以有任何你喜欢的复杂算法
…但现实地说,不管你做得有多有效,你都在沿着O(n^3)的方向看问题
[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]
一行代码隐藏了两个循环和切片操作,所有这些都增加了复杂性。但是,它的效率和速度与底层算法所允许的一样。O(n)?也许如果你有无限的内存,在实数/虚数系统中存储每个可能的子数组,以便有效访问,那么当然,你可以有任何你喜欢的复杂算法
…但现实地说,不管你做得有多有效,你都在沿着O(n^3)的方向看问题
[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]
一行代码隐藏了两个循环和切片操作,所有这些都增加了复杂性。但是,它的效率和速度与底层算法所允许的一样。您无法以任何方式在
O(N
)中获得结果。由于存在大小大于1的
2^N-1-N
子数组,因此总的复杂性将是O(2^N)
,因为您必须获得所有子数组。对于
O(2^N)
解决方案,您可以搜索已知的获取集的幂集的问题您无法以任何方式在O(N
)中获得结果。
由于存在大小大于1的2^N-1-N
子数组,因此总的复杂性将是O(2^N)
,因为您必须获得所有子数组。
对于O(2^N)
解决方案,您可以搜索获取集的幂集的众所周知的问题
您可以始终尝试此解决方案以获取长度为2或更大的所有连续子阵列:
>>> [lst[i:j + 1] for i in range(len(lst)) for j in range(i + 1, len(lst))]
[[1, 2], [1, 2, 3], [1, 2, 3, 4], [2, 3], [2, 3, 4], [3, 4]]
您始终可以尝试此解决方案以获得长度为2或更大的所有连续子阵列:
>>> [lst[i:j + 1] for i in range(len(lst)) for j in range(i + 1, len(lst))]
[[1, 2], [1, 2, 3], [1, 2, 3, 4], [2, 3], [2, 3, 4], [3, 4]]
祝你好运,因为我认为你做不到。至少不是,当N=输入的大小时。祝你好运,因为我认为你做不到。当N=输入的大小时,至少不是。