Я думаю, что это может быть экспоненциальной проблемой. Например, если один из методов имеет по одному в каждом столбце, то любое подмножество методов, содержащих этот метод, является объяснением, и поэтому, если существует M методов, существует не менее 2 ^ (M-1) объяснений; Точно так же, если у некоторой пары методов есть один в любом столбце, то есть как минимум 2 ^ (M-2) объяснения.
Вот метод, который, хотя и остается экспоненциальным, я думаю, быстрее, чем перечислять все объяснения, особенно когда есть методы со многими единицами.
Пусть T (A, B) будет количеством подмножеств A (набор методов), которые имеют по крайней мере одну единицу в каждом столбце в B (набор столбцов).
Если B пусто, T (A, B) - это число подмножеств A, то есть 2 ^ # A, где A имеет #A элементов.
В противном случае, если A пусто, T (A, B) равно 0.
В противном случае, если i является элементом A (например, первым),
T (A, B) = T (A \ {i}, B \ m [i]) + T (A \ {i}, B)
(здесь A \ {i} - это A без i, B \ m [i] - это B без каких-либо столбцов в методе i)
T можно довольно кратко кодировать как рекурсивную функцию.
Наконец, c [j], количество раз, которое метод j встречается в объяснении, равно
c [j] = T (A \ {j}, C \ m [j])
где C - множество всех столбцов.