找到其总和等于零的所有不间断子序列

时间:2014-12-08 20:08:57

标签: python algorithm time-complexity

假设我们有一个N个整数数组,并希望找到连续元素的所有子序列,其总和等于零。

示例:

N = 9
array = [1, -2, 4, 5, -7, -4, 8, 3, -7]

应输出:

1 4 

4 7

5 8

1 8

因为上面的每一个都是子序列的起始和结束索引,总和等于零。

我得出的结论是,如果使用一种彻底搜索所有可能解决方案的天真算法,那么N * (N + 1) / 2这样的可能子序列将以O(N ^ 2)复杂度结束。

我想知道是否有任何方法可以实现O(N)复杂度或小于O(N ^ 2)的东西?

我知道Subset sum problem这是一个NP完全问题但我的似乎有点容易,因为它只需要连续元素的子序列。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

比你想象的要糟糕。

有可能Θ(n²)不间断的子序列加起来为零,如下例所示:

0 0 0 0 0 0 0 0 0

(此处,每个子序列加起来为零。)

因此,任何打印出所有必需子序列的起始和结束索引的算法都必然具有o(n²)最坏情况复杂度。打印出它们的元素需要Θ(n³)时间。