Учитывая список наборов:
- S_1: [1, 2, 3, 4]
- S_2: [3, 4, 5, 6, 7]
- S_3: [8, 9, 10, 11]
- S_4: [1, 8, 12, 13]
- S_5: [6, 7, 14, 15, 16, 17]
Каков наиболее эффективный способ слияния всех наборов с общим количеством не менее двух элементов? Я полагаю, что это похоже на проблему связанных компонентов. Таким образом, результат будет:
- [1, 2, 3, 4, 5, 6, 7, 14, 15, 16, 17] (S_1 UNION S_2 UNION S_5)
- [8, 9, 10, 11]
- [1, 8, 12, 13] (S_4 делится 1 с S_1 и 8 с S_3, но не сливается, потому что они разделяют только один элемент в каждом)
Наивная реализация - это O (N ^ 2), где N - количество множеств, что для нас невозможно. Это должно быть эффективным для миллионов наборов.