Я не понимаю, как это можно сделать менее чем за 0 (n ^ 2).
Каждый набор должен сравниваться с любым другим, чтобы увидеть, содержат ли они 2 или более общих элемента. Это n * (n-1) / 2 сравнений, поэтому O (n ^ 2), даже если проверка общих элементов занимает постоянное время.
В сортировке наивной реализацией является O (n ^ 2), но вы можете воспользоваться транзитивным характером упорядоченного сравнения (так, например, вы не знаете, что в нижнем разделе быстрой сортировки нужно сравнивать с чем-либо в верхний раздел, так как он уже сравнивался с осью). Вот что приводит к сортировке O (n * log n).
Это не применимо здесь. Поэтому, если в наборах нет чего-то особенного, что позволяет нам пропускать сравнения, основанные на результатах предыдущих сравнений, в общем случае это будет O (n ^ 2).
Paul.