Я хочу рассчитать совокупное пересечение двух массивов. Например,
> cumulative_intersection([1,3,4,5,2,6], [4,1,5,2,3,7])
[[], [1], [1,4], [1,4,5], [1,4,5,3,2], [1,4,5,3,2]]
Я могу реализовать это методом перебора. Например, в Python,
a1 = [1,3,4,5,2,6]
a2 = [4,1,5,2,3,7]
n = len(a1)
all_intersects = list()
for i in range(n):
intersect = np.intersect1d(a1[:i], a2[:i])
all_intersects.append(intersect)
Есть ли более эффективный алгоритм для вычисления этого? Моя интуиция заключается в том, что вычисления можно сократить логарифмически, потому что каждый последующий список является расширенным набором предыдущего.