优化python算法

时间:2015-01-18 12:55:25

标签: python algorithm sorting itertools

1 个答案:

答案 0 :(得分:2)

一个可以加快速度的简单解决方案是为列表中的1/z中的每个z存储c,并为每对x,y存储a,b 1/z - 使用二进制搜索获得最高1/x + 1/y + 1/z < 1(在辅助列表中),以便O(log(n)*n^2 + Y) - 这将有效地修剪第三个列表中的许多搜索并让您加快速度。
这会将时间复杂度降低到Y,其中O(n^3)是输出大小(生成的三元组数)。

但请注意,由于输出大小本身为n^3(考虑3个列表,所有元素都在> 3.333) - 您无法避免最坏的情况,因为您可能需要生成{{1}三胞胎。

如果您只想要计数,建议的方法可以在O(n^2*logn)中轻松找到。