Алгоритм вложения наборов вложенности

У меня есть большая коллекция наборов, некоторые из которых являются подмножествами друг друга, например:

[{1, 2, 3, 4}, {1, 2}, {1, 5}, {1, 2, 3, 4, 5}, {2, 6}]

Я хотел бы взять эту коллекцию и вывести DAG частичного порядка отношений подмножества

{1, 2, 3, 4, 5} >= {1, 2, 3, 4} >= {1, 2}
{1, 2, 3, 4, 5} >= {1, 5}
{2, 6}

Есть ли способ сделать это, кроме как сравнивать все комбинации наборов (что недопустимо при большом количестве наборов). Это кажется близким к ряду проблем с обложками, но я не могу найти проблему, к которой это сводится.

Одна оптимизация заключается в создании инвертированного индекса, который поможет избежать сравнения наборов, не имеющих общего элемента, такого как {2, 6} и {1, 5}.

Эта проблема связана с топологической сортировкой и Линейные расширения частичного порядка.

Это почти дубликат Создать DAG из poset используя строго функциональное программирование, но я открыт для решения, которое не является чисто функциональным.


person fgregg    schedule 13.09.2017    source источник
comment
[ {1,2,3,4}, {1,2,3}, {1,2}, {1} ] Я сомневаюсь, что можно избежать O (N ^ 2), когда окончательный граф является полным графом ?   -  person shole    schedule 13.09.2017
comment
Я чувствую, что должен быть в состоянии использовать частичную упорядоченность, чтобы добиться большего успеха.   -  person fgregg    schedule 13.09.2017
comment
Вы можете начать с упорядочения наборов по размеру и в возрастающем порядке, а при просмотре следующего набора вы можете начать сравнивать его с предыдущими наборами в убывающем порядке размера, и если это надмножество один из них, то это также надмножество всего его подграфа, и вам не нужно рассматривать эти меньшие множества.   -  person jkff    schedule 13.09.2017
comment
Чтобы узнать, какие наборы являются подмножествами данного набора, см. документ, связанный с stackoverflow.com/questions/9353100/   -  person jkff    schedule 13.09.2017
comment
Вы стремитесь к полному графу, содержащему все ребра включения? Как вы будете использовать DAG после ее создания?   -  person Boris Strandjev    schedule 13.09.2017