Если k
мало, вы можете просто попробовать добавить k
дополнительных элементов и продублировать каждое подмножество k
раз, причем каждый дубликат будет включать ровно один из k
дополнительных элементов.
Другой Подход состоял бы в том, чтобы решить проблему точного покрытия как целочисленной линейной программы и решить ее с помощью решателя ILP. Тогда у вас будет 0–1 переменные x_i
, которые говорят, включено ли i
-е подмножество в решение, с ограничениями, которые предотвращают включение перекрывающихся наборов в решение. В этой формулировке, чтобы обеспечить прикрытие ровно k
подмножествами, у вас просто будет дополнительное ограничение, которое sum(x_i) = k
.
Также можно изменить алгоритм X, чтобы он работал напрямую с ограничением. Просто посчитайте, сколько строк вы уже выбрали, и, если вы уже выбрали k
, просто не выполняйте поиск без дальнейшего поиска. Точно так же игнорируйте решения, которые имеют менее k
строк.