Quelle structure de données persistante pour un ensemble d'éléments partiellement ordonnés?

15

J'ai besoin de stocker des ensembles d'éléments de type a. Le type a est partiellement ordonné, donc comparer et un 2 peut retourner plus petit, plus grand, égal ou incomparable.une1une2

Un problème avec les tables de hachage est que deux éléments égaux peuvent être représentés différemment, et je n'ai pas accès à une fonction de hachage compatible avec l'égalité.

La comparaison de deux éléments peut être un processus long, il serait donc intéressant de minimiser les comparaisons. Si nécessaire, il est possible de mémoriser les appels à l'opérateur de comparaison. Je me rends compte maintenant que je n'aurai besoin que de stocker des antichaines (ou supposons-le). Plus précisément, les opérations que je devrai effectuer sont les suivantes:

  • Retirez un élément de l'antichaîne;
  • Essayez d'ajouter un élément. Si l'élément est plus petit qu'un membre, ne l'ajoutez pas, sinon, ajoutez-le et supprimez chaque élément plus petit que lui.

Je peux également délimiter chaque élément par deux entiers, de sorte que si je sais que et i 3 < b < i 4 , alors connaître i 2 < i 3 me donne instantanément a < b . Bien sûr, i 2i 3 ne signifie pas a b ... Trouver des bornes entières est une opération relativement bon marché par rapport à une comparaison complète d'éléments.je1<une<je2je3<b<je4je2<je3une<bje2je3uneb

Abdallah
la source
1
Je pense que nous devons en savoir plus pour répondre avec intelligence à votre question. Stockez-vous les éléments et l'ordre partiel est-il facile à calculer? Ou stockez-vous également l'ordre partiel dans une sorte de table de recherche? Comment comptez-vous utiliser la commande partielle? Espérez-vous l'utiliser de la même manière que l'ordre linéaire est utilisé pour stocker des ensembles (par exemple dans les arbres de recherche)?
Andrej Bauer
Maintenant que j'ai réalisé que je n'aurai que des antichaînes, je ne suis pas sûr qu'il y ait quelque chose de mieux que la solution naïve de stocker les résultats dans une liste. Si oui, désolé pour le problème!
Abdallah
Si vous pensez que votre question est désormais théorique, vous devriez peut-être la signaler pour suppression / fermeture?
Suresh Venkat
1
Deux éléments de l'ensemble seront incomparables, mais cela ne signifie pas que la représentation naïve est la meilleure que vous puissiez faire. Par exemple, considérons les multisets finis ordonnés par inclusion (= entiers ordonnés avec divisibilité): il y a beaucoup de potentiel d'optimisation, selon votre représentation des données (en utilisant la cardinalité, en utilisant l'ensemble de support,…). Ces optimisations dépendront fortement de la nature de la relation d'ordre. Ensuite, il y a la question distincte de décider s'il vaut la peine de conserver des informations sur les éléments maintenant supprimés: allez-vous les comparer souvent à de nouveaux ajouts?
Gilles 'SO- arrête d'être méchant'
D'accord, merci. J'ai donc ajouté quelques informations (la possibilité de délimitation d'entier) qui pourraient conduire à des optimisations.
Abdallah

Réponses:

8

L'article "Tri et sélection dans les PoSets" de Daskalakis, Karp, Mossel, Risensefield, Verbin, 2008 qui décrit une représentation dynamique des PoSets basée sur des antichaînes.

Vous pourriez également être intéressé par l'article "Succinct Posets" de Munro, Nicholson, 2012 récemment publié sur Arxiv et par la bibliographie qui s'y trouve. Leur structure de données est statique mais je suppose que la prochaine étape est d'avoir une structure de données dynamique.

Jeremy
la source
O(1)O(1)O(qn)
La représentation des cartes comme une décomposition (minimale) des chaînes est une bonne idée. Préserver cet invariant par le biais de suppressions est cependant ce qui est délicat.
Sebastian Graf
4

O(lgn)

jbapple
la source
1
Notez que cela ne couvre que les commandes partielles «arborescentes», par exemple, rencontrer des semi-réseaux, où tous les éléments inférieurs ou égaux à certains éléments eforment une chaîne.
Sebastian Graf