Эта проблема может быть решена с помощью алгоритма быстрого умножения матриц, и я также подозреваю, что он вычислительно эквивалентен умножению матриц (хотя я не знаю ни одного способа доказать это, и я не думаю, что методы для доказательства этого существуют ). Это решение будет иметь время выполнения O (n ^ {2.373}), когда n = d, и другое время выполнения для других отношений между d и n.
Вот как вы решаете это с помощью умножения матриц: Вы записываете характеристические векторы наборов в строках матрицы n на d матрицы A, а характеристические векторы дополнений наборов в столбцах ad на n матрицы B. Вы затем умножьте A на B. Пары множеств, которые пересекаются, являются точными местоположениями произведения A * B, равными нулю.
Для лучшего времени выполнения, известного для этой проблемы, см. Статью Хуана и Пана на эту тему. Если я правильно помню, когда d станет достаточно большим, время выполнения станет очевидно оптимальным O (nd). Для n = d у вас будет время работы O (n ^ {2.373}). Для других отношений n и d вы получите другие значения. Если существует оптимальный алгоритм для умножения прямоугольной матрицы, вы получите алгоритм с временем выполнения O (n ^ 2 + nd) для вашей задачи. Я подозреваю, что нет лучшего способа, чем этот, чтобы решить вашу проблему, но я далеко не уверен.
Это решение, вероятно, не имеет практического применения, поскольку константы этих алгоритмов слишком велики. Алгоритм Штрассена может дать улучшение по сравнению с наивным решением для разумных значений n и d, но я даже не уверен в этом. Тем не менее, проблемы, которые кажутся связанными с умножением матриц, редко имеют комбинаторные алгоритмы, которые лучше, чем наивный алгоритм (больше, чем полилогарифмические факторы), поэтому, если бы мне пришлось угадывать, я бы предположил, что для вашей задачи не существует хорошего алгоритма, который значительно лучше, чем наивный, используя современные методы.