我有很多集合,其中一些是彼此的子集,例如:
[{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}
等公共元素的集合。
此问题似乎与Topological sorting和Linear Extensions of a partial order有关。
这几乎与Generate a DAG from a poset using stricly functional programming重复,但我对一个不是纯粹功能的解决方案持开放态度。