Это легко решаемая проблема.У вас есть один мультимножество (коллекция 1) (это «мультимножество», потому что один и тот же элемент может встречаться несколько раз), а затем несколько других мультимножеств (коллекция 2..N), и вы хотите найти подмножество минимального размераколлекции 1, которая не встречается ни в одной из других коллекций (2..N).
Это простая проблема, потому что она может быть решена с помощью простой теории множеств.Сначала я объясню это без использования мультимножеств, т. Е. Предположим, что каждая строка может встречаться только один раз в любом данном наборе, а затем объясню, как она работает с мультимножеством.Х 1 .. Х Н .Теперь, имея в виду, что на данный момент наборы не имеют нескольких экземпляров какого-либо элемента, очевидно, что любой одноэлементный набор {a} такой, что a ∉ X i отличает S от X i и поэтому достаточно вычислить разности множеств A - X 1 , ..., A - X N , а затем подобрать набор R минимального размера, такой что Rразделяет элемент со всеми этими множествами различий.Тогда это задача комбинаторной оптимизации SET COVER, которая является NP-полной, но для вашей маленькой задачи (5 коллекций) можно легко решить методом грубой силы.
Теперь, когда наборы фактически являются мультимножествами, это изменяется только так, чтоотличительные «одноэлементные» наборы на самом деле являются мультимножествами, содержащими 1 или более копий одного и того же элемента, и, следовательно, они имеют разные затраты.Вы по-прежнему можете вычислять разности наборов, как указано выше (вычитая количество элементов), но теперь ваша часть комбинаторной оптимизации SET COVER учитывает тот факт, что различающие элементы могут быть мультимножественными, а не одиночными.Вот иллюстрация, как это работает для вашей проблемы, когда мы решаем для коллекции 3:
S = {{c, c, c}}
X 1 = {{a, b, c}}
X 2 = {{b, b, c}}
S - X 1 различения: {{c, c}}
S - X 2 различителей: {{c, c}}
Минимальный мультимножество, охватывающее различитель для каждого набора: {{c,c}}
А вот как это работает для расчета для коллекции 1:
S = {{a, b, c}}
X 1 = {{b, b, c}}
X 2 = {{c, c, c}}
S - X 1 Отличители: {{a}}
S - X 2 Отличители: {{a}}, {{b}}
Минимальный мультимножество, охватывающее различитель для каждогоset: {{a}}