По сути, вы генерируете каждый элемент списка результатов, выполняя пересечения из двух множеств.У вас есть N-1 пересечений в элементе списка результатов, который сводится к N-1 * IntersectTime.Для N элементов списка в результате получается сумма N (N-1) * IntersectTime.После этого вам нужно заказать N раз N-1 наборов, поэтому просто для их заказа у вас есть O (N² log N).
IntersectTime зависит от реализации набора, для типичного хэш-набора это для вас O(k).
Итак, наконец, у нас есть O (N²k) + O (N² log N) = O (N² (k + log N)) = (если мы предположим, что k> log N) O (N²k).
РЕДАКТИРОВАТЬ: когда вы действительно реализуете это, полезно знать, что, когда вы пересекаете два набора, вы можете использовать результат для 2 элементов списка результатов, что означает, что для первого у вас естьдля пересечения A_1 с N-1, для A_2 с N-2 (пересечение с A_1 уже было сделано для первого элемента), для A_3 с N-3 другими наборами и, наконец, для A_N без него.НО это не меняет время big-O, оно только вдвое сокращает время выполнения.