我们可以多快计算一个集合族的集合包含条件?
给定一组家庭FF\mathcal{F}宇宙的子集的UUU。让S1,S2∈FS1,S2∈FS_1,S_2 \in \mathcal F,我们想答案是S1⊆S2S1⊆S2S_1 \subseteq S_2。 我正在寻找一种数据结构,可以使我快速回答这一问题。我的应用程序来自图论,我想查看删除顶点及其邻域是否会留下任何孤立的顶点,并针对每个顶点列出它留下的所有孤立的顶点。 我想创建完整的球型或最终创建|F|2|F|2|\mathcal{F}|^2表,其中存储true或false准确地告诉您哪些集合是彼此的子集。 让m=∑S∈F|S|m=∑S∈F|S|m = \sum_{S\in \mathcal{F}} |S|,u=|U|u=|U|u = |U|和n=|F|n=|F|n = |\mathcal{F}|中,假定u,n≤mu,n≤mu,n \leq m 我们可以生成n×un×un \times u在容纳基质(二分图)O(un)O(un)O(un)的时间,然后可以创建所有的表n2n2n^2在比较O(nm)O(nm)O(nm)通过对每个设定时间S∈FS∈FS \in \mathcal{F},遍历所有所有其它组的元素和标记组为不的一个子集SSS,如果他们的元件不处于SSS。总计O(nm)O(nm)O(nm)时间。 我们可以更快地做任何事情吗?特别是O((n+u)2)O((n+u)2)O((n+u)^2)时间是否可能? 我找到了一些相关文章: 一种计算子集偏序的简单亚二次算法(1995) ,给出了Ô (米2/升ø克(米))O(m2/log(m))O(m^2 / log(m))算法。 子集偏序:计算和组合略有改进,但还声称上述论文解决了ø (米d)O(md)O(md)时间的问题,其中ddd是共享公共元素的最大集合数,但我无法理解该结果。 在文章之间O (n 米)O(nm)O(nm)和Ø (ñα)O(nα)O(n^{\alpha})作者展示如何在曲线图通过使用矩阵乘法删除顶点的闭邻域后发现连接的组件。通过查找运行时间为所有单调分量,可以将其用于计算集合包含姿态O ((n + u )2.79)O((n+u)2.79)O((n+u)^{2.79})。 这个论坛的讨论也与之相关:检查集合包含的最快方法是 什么? 这意味着的下界Ø (ñ2 − ϵ)O(n2−ϵ)O(n^{2-\epsilon})。