Прежде всего, вы можете показать, что этот граф будет содержать O (n ^ 2) ребер при заданных n множествах: рассмотрим множества A1, ..., An с каждым Ak = {1, ..., k}. Тогда подмножество A1 A2, подмножество A1 A3, ..., подмножество A1 An, подмножество A2 A3, ..., что составляет n (n-1) / 2 ребер в графе включения.
Учитывая это, я могу придумать достаточно простой способ решения этой проблемы. Пусть Ai может быть подмножеством Aj, если в Aj есть некоторый x, которого нет в Ai. Теперь подмножество Ai Aj, если Ai может быть подмножество Aj, а не Aj может быть подмножество Ai.
Теперь для каждого элемента x разделите ваши множества на два: те, которые содержат x, и те, которые не содержат. Последнее может быть - подмножество первого. Добавьте соответствующие ребра в граф подмножества. Всякий раз, когда у нас есть пара вершин, соединенных в каждом направлении, мы знаем, что ни одна вершина не является подмножеством другой. Этот алгоритм O (mn ^ 2) для универсума из m элементов и n множеств.
эт вуаля!