¿Qué tan rápido podemos calcular el conjunto de inclusión de una familia de conjuntos?

20

Dada una familia conjunto F de subconjuntos de un universo U . Deje S1,S2F y queremos responder es S1S2 .

Estoy buscando una estructura de datos que me permita responder rápidamente a esto. Mi aplicación es de la teoría de grafos donde quiero ver si eliminar un vértice y su vecindario deja vértices aislados, y para cada vértice enumera todos los vértices aislados que deja.

Quiero crear el poset completo o eventualmente un |F|2 tablas que almacenan verdadero falso decir exactamente qué conjuntos están subconjuntos entre sí.

Sea m=SF|SEl |, u=|UEl |y n=El |FEl |, supongamos que u,nortemetro

Podemos generar la matriz de contención norte×tu (el gráfico bipartito) en tiempo O(un) y luego podemos crear la tabla de todas las comparaciones n2 en tiempo O(nm) por cada conjunto SF , recorrer todo elementos de todos los otros conjuntos y marcan el conjunto como no un subconjunto de S si el elemento no se encuentra en S . En total O(nm) tiempo.

¿Podemos hacer algo más rápido? En particular, ¿es posible O((n+u)2) tiempo o no?

Encontré algunos artículos relacionados:

Algoritmo subcuadrático simple para calcular el orden parcial del subconjunto (1995) que proporciona un algoritmo O(m2/log(m)) .

El orden parcial del subconjunto: computación y combinación mejora ligeramente lo anterior, pero también afirma que el documento anterior resuelve el problema en el tiempo donde d es el número máximo de conjuntos que comparten un elemento común, pero no pude entender este resultado.O(md)d

En el artículo Entre y O ( n α ),O(nm)O(nα) los autores muestran cómo en un gráfico encontrar los componentes conectados después de eliminar la vecindad cerrada de un vértice utilizando la multiplicación de matrices. Esto se puede utilizar para calcular el conjunto de inclusión del conjunto al encontrar todos los componentes que son singletons con un tiempo de ejecución de .O((n+u)2.79)

También esta discusión del foro está relacionada: ¿Cuál es la forma más rápida de verificar la inclusión de conjuntos? lo que implica un límite inferior de .O(n2ϵ)

Martin Vatshelle
fuente
Solo una sugerencia: ¿podría simplificar la pregunta configurando ? ¿O son ambos parámetros importantes en su aplicación? tu=norte
Colin McQuillan
En mi aplicación tengo , donde < < medios asintóticamente pequeña. u<<n<<2u<<
Martin Vatshelle 01 de

Respuestas:

2

Si la aleatoriedad está dentro de los límites, una idea aproximada sería generar un grupo de funciones de "firma monotónica aleatoria" y usarlas para aproximar la relación del subconjunto (a la Bloom filtros). Desafortunadamente, no sé cómo convertir esto en un algoritmo práctico, pero aquí hay algunas estimaciones que no prueban de inmediato que la idea sea imposible. Esto está muy lejos de ser una solución útil, pero lo escribiré en caso de que ayude.

Supongamos por simplicidad que los conjuntos son casi del mismo tamaño, digamos , y que s = o ( u ) . Podemos suponer 1 s , de lo contrario, hemos terminado. Definir q|S|=s±O(1)s=o(u)1s Tenga en cuenta quep1.

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

Aquí está la parte muy poco práctica. Elija aleatoriamente subconjuntos A 1 , ... , A pU con reemplazo, cada uno de tamaño q , y defina una función f : 2 U{ 0 , 1 } por f ( S ) = 1 iff A iS para alguna i . Con S fijo y A i , f variando aleatoriamente, tenemos PrpagUN1,...,UNpagUqF:2U{0 0,1}F(S)=1UNyoSyoSUNyo,F Dado quef(S)es monótono,STimplicaf(S)f(T). SiTS, solucionar algunostT-S. La probabilidad de quefdetecteTSes Pr ( f ( S ) = 0 < 1 = f

Pr(F(S)=0 0)=Pr(yo.UNyoS)=Pr(UN1S)pag=(1-(sq)/ /(tuq))pag=mi-Θ(1)
F(S)STF(S)F(T)TStTSfTS Algunos de esos pasos son bastante tenues, pero no tengo tiempo para mejorarlos esta noche. En cualquier caso, si todos se mantienen, entonces al menos no es claramente imposible generar aleatoriamente funciones de firma que tengan una probabilidad razonable de distinguir los subconjuntos de los no subconjuntos. Un número logarítmico de tales funciones distinguiría todos los pares correctamente. Si la generación de una función de firmafy el cálculo def(S)pudieran reducirse a ˜ O (n+u)tiempo, el resultado sería un ˜ O global(n2
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) algoritmo.O~(n2+u2)

Incluso si los cálculos anteriores son correctos, no tengo idea de cómo generar funciones de firma monótonas con las características deseadas rápidamente. También es probable que esta técnica no se extienda a tamaños de conjuntos significativamente diferentes.

Geoffrey Irving
fuente