我有大量集合,其中一些是彼此的子集,例如:
[{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}
and这样的公共元素的集合{1, 5}
。
这几乎是Generate a DAG from a poset using stricly functional programming的复制品,但我对非纯功能性的解决方案持开放态度。