将搜索的时间复杂度降低到小于n ^ 2

时间:2016-04-08 13:27:01

标签: algorithm search

问题:我们有一系列数字对,如[(10,20),(30,10),(30,40),(20,10),(90,80),(40,30), (50,60)]。 输出:打印序列中的对称对。 ex(10,20)(20,10)(30,40)(40,30)。

我能够使用两个for循环来解决这个问题,并在序列中搜索对称对的每个项目。但复杂性是O(n ^ 2)。 任何其他方法或数据结构可以减少时间复杂度?

2 个答案:

答案 0 :(得分:2)

使用哈希,您可以执行O(N)

  • 遍布每对(a,b)
    • 检查对(b,a)是否已设置
    • 如果没有将对(a,b)添加到集合
    • 如果有,请添加到解决方案

答案 1 :(得分:2)

python实现

data = [(10, 20), (30, 10), (30, 40), (20, 10), (90, 80), (40, 30), (50, 60)]

output = {}

for (a, b) in data:
    v_min = min(a, b)
    v_max = max(a, b)

    if not output.has_key((v_min, v_max)):
        output[(v_min, v_max)] = 0

    output[(v_min, v_max)] += 1

pairs = filter(lambda (v, count): count >= 2, output.items())
print map(lambda ((a, b), count) : ((a, b), (b, a)), pairs)