Задача формализуется комбинаторной задачей на графах: дано конечное множество элементов
и конечное множество
, вершины
и вершины
соединяем ребром тогда и только тогда, когда
. Получаем двудольный граф и на нем задачу вершинного покрытия (или как она называется, я уже не помню), только с ограничением выбора вершин лишь из множества
. Дальше легко строится задача булева линейного программирования с
переменными (из которых последние
равны нулю по последнему условию) и
условиями. Задача, есс-но, NP-полная.
Ответ напрашивается сам собой: на k-м шаге нужно называть такой элемент, который входит в наименьшее число множеств из
.
Но как это доказать? Хотябы какой подход к доказательству здесь можно применить?
Это скорее всего неверно, это часто выполняется, но не всегда, это т.н. "жадный алгоритм". Контрпримеры обычно имеют число вершин порядка
, я не буду их искать.
Хотя можно утверждать, что если существует элемент, входящий в только одно множество
, то можно смело брать его. И т.д. брать то тех пор, пока все такие не исчезнут. Это известный частичный алгоритм тоже.