Dada uma família conjunto de subconjuntos de um universo . Deixe e queremos responder é .
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.
Seja,e, suponha
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 .
Podemos fazer algo mais rápido? Em particular, o tempo possível ou não?
Encontrei alguns artigos relacionados:
Algoritmo Sub-Quadrático Simples para Computar a Ordem Parcial do Subconjunto (1995) que fornece um algoritmo .
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.d
No artigo Entre eO ( 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 .
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 .