Com que rapidez podemos calcular o poset de inclusão de uma família de conjuntos?


20

Dada uma família conjunto de subconjuntos de um universo . Deixe e queremos responder é .FUS1,S2FS1S2

Estou procurando uma estrutura de dados que me permita responder rapidamente a isso. Minha aplicação é da teoria dos grafos, onde eu quero ver se a exclusão de um vértice e sua vizinhança deixa algum vértice isolado e, para cada vértice, lista todos os vértices isolados que ele deixa.

Eu quero criar o poset completo ou, eventualmente, uma tabela armazenando true false false exatamente quais conjuntos são subconjuntos um do outro.|F|2

Seja,e, suponham=SF|S|u=|U|n=|F|u,nm

Podemos gerar a matriz de contenção (o gráfico bipartido) em tempo e, em seguida, criar a tabela de todas as comparações em tempo para cada conjunto , percorrer todos os elementos de todos os outros conjuntos e marcar o conjunto como não um subconjunto de se que o elemento não é em . No tempo total de .n×uO(un)n2O(nm)SFSSO(nm)

Podemos fazer algo mais rápido? Em particular, o tempo possível ou não?O((n+u)2)

Encontrei alguns artigos relacionados:

Algoritmo Sub-Quadrático Simples para Computar a Ordem Parcial do Subconjunto (1995) que fornece um algoritmo .O(m2/log(m))

A Ordem Parcial do Subconjunto: Computação e Combinatória melhora um pouco o exposto acima, mas também afirma que o artigo acima resolve o problema no tempo que é o número máximo de conjuntos que compartilham um elemento comum, mas não consegui entender esse resultado.dO(md)d

No artigo Entre eO ( n α )O(nm)O(nα) os autores mostram como, em um gráfico, encontrar os componentes conectados após excluir a vizinhança fechada de um vértice usando multiplicação de matrizes. Isso pode ser usado para calcular o poset de inclusão de conjunto localizando todos os componentes que são singletons com um tempo de execução de .O((n+u)2.79)

Também esta discussão no fórum está relacionada: Qual é a maneira mais rápida de verificar a inclusão de conjuntos? o que implica um limite inferior de .O(n2ϵ)


Apenas uma sugestão: você poderia simplificar a pergunta definindo ? Ou os dois parâmetros são importantes na sua aplicação? u=n
Colin McQuillan

Na minha aplicação, tenho onde significa assintoticamente menor. < <u<<n<<2u<<
Martin Vatshelle

Respostas:


2

Se a aleatoriedade estiver dentro dos limites, uma idéia aproximada seria gerar várias funções de "assinatura monotônica aleatória" e usá-las para aproximar a relação do subconjunto (a la Bloom filtra). Infelizmente, não sei como transformar isso em um algoritmo prático, mas aqui estão algumas estimativas que não provam imediatamente a idéia impossível. Isso está muito longe de ser uma solução útil, mas vou escrevê-la caso isso ajude.

Suponha, por simplicidade, que os conjuntos tenham quase o mesmo tamanho, digamos , e esse . Podemos assumir , caso contrário, terminamos. Definir Observe que .s = o ( u ) 1 s q|S|=s±O(1)s=o(você)1sp1

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

Aqui está a parte impraticável. Escolha aleatoriamente subconjuntos com substituição, cada um do tamanho , e defina uma função por se para alguns . Com fixo e variando aleatoriamente, temos Como é monotônico, implicapUMA1,...,UMApvocêqf:2você{0 0,1}f(S)=1UMAEuSEuSUMAEu,f f(S)STf(S)f(T)TStT-SfTS Pr ( f ( S ) = 0 < 1 = f ( T ) )

Pr(f(S)=0 0)=Pr(Eu.UMAEuS)=Pr(UMA1S)p=(1-(sq)/(vocêq))p=e-Θ(1)
f(S)STf(S)f(T) . Se , corrija alguns . A probabilidade de que detecta é TStT-SfTS
Pr(f(S)=0 0<1=f(T))=Pr(f(S)=0 0)Pr(f(T)=1|f(S)=0 0)=e-Θ(1)Pr(Eu.UMAEuT,UMAEuT-S0 0|f(S)=0 0)=e-Θ(1)Pr(Eu.tUMAEuT|f(S)=0 0)e-Θ(1)Pr(Eu.tUMAEuT)e-Θ(1)pPr(tUMA1T)e-Θ(1)p(sq-1)/(vocêq)e-Θ(1)pqs-q(sq)/(vocêq)=e-Θ(1)
Alguns desses passos são bastante tênues, mas não tenho tempo para melhorá-los hoje à noite. De qualquer forma, se todos eles são válidos, pelo menos não é claramente impossível gerar aleatoriamente funções de assinatura com probabilidade razoável de distinguir subconjuntos de não-subconjuntos. Um número logarítmico de tais funções distinguiria todos os pares corretamente. Se a geração de uma função de assinatura e a computação pudessem ser reduzidas para o tempo , o resultado seria um algoritmo geral .ff(S)O~(n+você)O~(n2+você2)

Mesmo se os cálculos acima estiverem corretos, não faço ideia de como gerar rapidamente funções de assinatura monotônica com os recursos desejados. Também é provável que essa técnica não se estenda a tamanhos de conjuntos significativamente diferentes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.