If you have a pattern like A1 = 1111122222and A2 = 2222211111, you will output pairs (N / 2) 4 . Therefore, you cannot do better than O (N 4 ) in the worst case.
O (N 4), , . , O (N 4), O (N 2) , -sort.
index = {}
for i in 0..len(A2):
index[A2[i]].append(i)
for i1 in 0..len(A1):
for j1 in i+1..len(A1):
for i2 in index[A1[i1]]:
for j2 in index[A1[j1]]:
if i2 != j2 and i1 < j1 != i2 < j2:
print A1[i1], A1[j1]
, (1, 2) * 7, 7 , . , [(2, 1), (6, 2), (5, 3), (8, 4), (1, 5), (3, 6)] . : , , . , , , . O (NlogN).