所以最近我遇到了这个编程问题,我似乎无法使复杂度降低(我当前的代码在O(n^2)中运行)。基本上,我有四个不同的列表(我使用python btw)整数,既有正数也有负数,分别是列表A,B,C,D。现在,每个列表都有1000个整数,并且这些整数范围从-25000到25000(含)。现在,假设从这些列表中的每一个我们选择一个整数,例如a,b,c,d。我想要最快的方法来找到这些a,b,c,d,使a + b = - (c + d)。如何快速找到两个不同阵列中所有元素对的总和
目前,我的方法依赖迭代a,b和c,d的每个可能的组合,然后尝试查找集合(a + b)中是否存在集合中的元素 - (c + d)。这当然是不切实际的,因为它在O(n^2)时间运行,考虑到大的列表大小(1000)更是如此。
因此,我想知道是否有人可以想到更有效的方法(最好是O(n log n)或更小),如果可能,用python编码。
道歉,如果它相当混乱。如果您有任何问题,请通知我,我会尽力提供更多说明。
编辑:
此问题是一个更大的问题的一部分。更大的问题表明,如果我们有4个数字序列,每个数字中最多有1000个整数,比如说A,B,C,D,找到一个a,b,c,d,使得a + b + c + d = 0。
我问了上面的问题,因为a + b + c + d = 0意味着a + b = - (c + d),我认为这会导致解决问题的最快方法。如果有人能想到更快的方式,请与我分享。
在此先感谢! :)
您是否在寻找适用于该条件的所有组合?对, – Whud
是的,就是这样。可以肯定的是,至少会有一个这样的组合。 –
在最坏的情况下,当C = -A和D = -B时,你将得到Θ(n^2)解,所以你的算法需要至少n^2个步骤来产生输出。 – Bolo