我们可以多快计算一个集合族的集合包含条件?


20

给定一组家庭F宇宙的子集的U。让S1,S2F,我们想答案是S1S2

我正在寻找一种数据结构,可以使我快速回答这一问题。我的应用程序来自图论,我想查看删除顶点及其邻域是否会留下任何孤立的顶点,并针对每个顶点列出它留下的所有孤立的顶点。

我想创建完整的球型或最终创建|F|2表,其中存储true或false准确地告诉您哪些集合是彼此的子集。

m=SF|S|u=|U|n=|F|中,假定u,nm

我们可以生成n×u在容纳基质(二分图)O(un)的时间,然后可以创建所有的表n2在比较O(nm)通过对每个设定时间SF,遍历所有所有其它组的元素和标记组为不的一个子集S,如果他们的元件不处于S。总计O(nm)时间。

我们可以更快地做任何事情吗?特别是O((n+u)2)时间是否可能?

我找到了一些相关文章:

一种计算子集偏序的简单亚二次算法(1995) ,给出了O(m2/log(m))算法。

子集偏序:计算和组合略有改进,但还声称上述论文解决了O(md)时间的问题,其中d是共享公共元素的最大集合数,但我无法理解该结果。

在文章之间O(nm)O(nα)作者展示如何在曲线图通过使用矩阵乘法删除顶点的闭邻域后发现连接的组件。通过查找运行时间为所有单调分量,可以将其用于计算集合包含姿态O((n+u)2.79)

这个论坛的讨论也与之相关:检查集合包含的最快方法什么? 这意味着的下界O(n2ϵ)


只是一个建议:您可以通过设置简化问题u=n吗?还是这两个参数在您的应用程序中都很重要?
Colin McQuillan

在我的应用程序有其中< <手段渐近小。u<<n<<2u<<
Martin Vatshelle'2

Answers:


2

如果随机性是有界的,一个粗略的想法是生成一堆“随机单调签名”函数,并使用它们来近似子集关系(布隆过滤器)。不幸的是,我不知道如何将其变成一种实用的算法,但是这里有些估计并不能立即证明这一想法是不可能的。这远不是一个有用的解决方案,但是我会写出来以防万一。

为简单起见,假设集的大小几乎相同,例如,即s = o u 。我们可以假设1 « 小号,否则我们就大功告成了。定义 q|S|=s±O(1)s=o(u)1s 注意,p»1

q=[s/2]p=[(uq)(sq)]
p1

pA1,,ApUqf:2U{0,1}f(S)=1AiSiSAi,f ˚F小号小号Ť˚F小号˚FŤŤ小号Ť-小号˚FŤ

Pr(f(S)=0)=Pr(i.AiS)=Pr(A1S)p=(1(sq)/(uq))p=eΘ(1)
f(S)STf(S)f(T)TStTSf˚F 小号= 0 < 1 = ˚F Ť TS ˚F˚F小号ÔÑ+ûÔÑ2+Ù2
Pr(f(S)=0<1=f(T))=Pr(f(S)=0)Pr(f(T)=1|f(S)=0)=eΘ(1)Pr(i.AiT,AiTS0|f(S)=0)=eΘ(1)Pr(i.tAiT|f(S)=0)eΘ(1)Pr(i.tAiT)eΘ(1)pPr(tA1T)eΘ(1)p(sq1)/(uq)eΘ(1)pqsq(sq)/(uq)=eΘ(1)
这些步骤中有些很微不足道,但是我今晚没有时间改进它们。无论如何,如果它们全部成立,那么至少显然不是不可能随机生成具有合理可能性将子集与非子集区分开的签名函数。这样对数的函数可以正确地区分所有对。如果生成签名函数并将计算减少到时间,则结果将是整体算法。ff(S)O~(n+u)O~(n2+u2)

即使以上计算正确,我也不知道如何快速生成具有所需功能的单调签名函数。此技术也可能不会扩展到明显不同的布景大小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.