Qual estrutura de dados persistente para um conjunto de elementos parcialmente pedidos?

15

Eu preciso armazenar conjuntos de elementos do tipo a. O tipo a é parcialmente ordenado, portanto, a comparação de e pode retornar menor, maior, igual ou incomparável.a1a2

Um problema com as hashtables é que dois elementos iguais podem ser representados de maneira diferente, e eu não tenho acesso a uma função de hash consistente com a igualdade.

A comparação de dois elementos pode ser um processo demorado, pelo que seria interessante minimizar as comparações. Se necessário, é possível memorizar as chamadas para o operador de comparação. Agora percebo que só precisarei armazenar antichains (ou vamos supor). Mais precisamente, as operações que precisarei executar são as seguintes:

  • Remova um elemento do antichain;
  • Tente adicionar um elemento. Se o elemento for menor que um membro, não o adicione, caso contrário, adicione-o e remova todos os elementos menores que ele.

Também posso vincular cada elemento por dois números inteiros, de modo que, se eu souber que e , conhecer instantaneamente me dará . Obviamente, não significa ... Encontrar limites inteiros é uma operação relativamente barata em comparação com uma comparação completa de elementos.i1<a<i2i3<b<i4i2<i3a<bi2i3ab

Abdallah
fonte
1
Acho que precisamos saber mais para responder de maneira inteligente à sua pergunta. Você está armazenando os elementos e a ordem parcial é facilmente calculada? Ou você também está armazenando a ordem parcial em algum tipo de tabela de pesquisa? Como você pretende usar a ordem parcial? Você espera usá-lo da mesma maneira que a ordem linear é usada para armazenar conjuntos (por exemplo, em árvores de pesquisa)?
Andrej Bauer
Agora que percebi que só terei antichains, não tenho certeza de que haja algo melhor do que a solução ingênua de armazenar os resultados em uma lista. Se sim, desculpe pelo problema!
Abdallah
Se você acha que sua pergunta agora é discutível, talvez você deva sinalizá-la para exclusão / fechamento?
Suresh Venkat
1
Quaisquer dois elementos no conjunto serão incomparáveis, mas isso não significa que a representação ingênua é o melhor que você pode fazer. Por exemplo, considere multisets finitos ordenados por inclusão (= números inteiros ordenados com divisibilidade): existe muito potencial para otimização, dependendo da sua representação de dados (usando cardinalidade, usando o conjunto de suporte,…). Essas otimizações dependerão fortemente da natureza da relação de ordem. Depois, há a questão separada de decidir se vale a pena manter as informações sobre os elementos excluídos agora: você os comparará frequentemente com novas adições?
Gilles 'SO- stop be evil'
Ok, obrigada. Então, adicionei algumas informações (a possibilidade de limite inteiro) que poderiam levar a otimizações.
Abdallah

Respostas:

8

O artigo "Classificação e seleção em PoSets", de Daskalakis, Karp, Mossel, Risensefield, Verbin, 2008, descreve uma representação dinâmica de PoSets baseada em antichains.

Você também pode estar interessado no artigo "Succinct Posets" de Munro, Nicholson, 2012, lançado recentemente em Arxiv e na bibliografia deste. Sua estrutura de dados é estática, mas presumo que o próximo passo seja ter uma estrutura de dados dinâmica.

Jeremy
fonte
O(1)O(1)O(qn)
Ter mapas representados como uma decomposição (mínima) de cadeias é um bom insight. Preservar essa invariável através de exclusões é o que é complicado, no entanto.
Sebastian Graf
4

O(lgn)

jbapple
fonte
1
Observe que isso cobre apenas ordens parciais "em forma de árvore", por exemplo, meet-semilattices, onde todos os elementos menores ou iguais a algum elemento eformam uma cadeia.
Sebastian Graf