Quale struttura di dati persistente per un insieme di elementi parzialmente ordinati?


15

Ho bisogno di memorizzare insiemi di elementi di tipo a. Tipo A è parzialmente ordinato, quindi confrontando un'1 e un'2 può tornare minore, maggiore, uguale o incomparabile.

Un problema con gli hashtable è che due elementi uguali possono essere rappresentati in modo diverso e non ho accesso a una funzione di hashing coerente con l'uguaglianza.

Il confronto di due elementi può essere un processo lungo, quindi sarebbe interessante minimizzare i confronti. Se necessario, è possibile memorizzare le chiamate nell'operatore di confronto. Mi rendo conto ora che avrò solo bisogno di conservare gli antichain (o assumiamolo). Più precisamente, le operazioni che dovrò eseguire sono le seguenti:

  • Rimuovere un elemento dall'antichain;
  • Prova ad aggiungere un elemento. Se l'elemento è più piccolo di un membro, non aggiungerlo, altrimenti aggiungerlo e rimuovere ogni elemento più piccolo di esso.

io1<un'<io2io3<B<io4io2<io3un'<Bio2io3un'B


1
Penso che dobbiamo sapere di più per rispondere in modo intelligente alla tua domanda. Stai memorizzando gli elementi e l'ordine parziale è facilmente calcolabile? O stai anche memorizzando l'ordine parziale in una sorta di tabella di ricerca? Come intende utilizzare l'ordine parziale? Speri di usarlo nello stesso modo in cui l'ordine lineare viene utilizzato per archiviare i set (ad esempio negli alberi di ricerca)?
Andrej Bauer,

Ora che mi sono reso conto che avrò solo antichain, non sono sicuro che ci sia qualcosa di meglio della soluzione ingenua di memorizzare i risultati in un elenco. Se è così, scusate il disturbo!
Abdallah,

Se pensi che la tua domanda sia ora discutibile, forse dovresti segnalarla per la cancellazione / chiusura?
Suresh Venkat,

1
Eventuali due elementi nel set saranno incomparabili, ma ciò non significa che la rappresentazione ingenua sia il meglio che puoi fare. Ad esempio, considera i multiset finiti ordinati per inclusione (= numeri interi ordinati con divisibilità): esiste un grande potenziale di ottimizzazione, a seconda della rappresentazione dei tuoi dati (usando la cardinalità, usando il set di supporto, ...). Queste ottimizzazioni dipenderanno fortemente dalla natura della relazione d'ordine. Quindi c'è il problema separato di decidere se vale la pena conservare le informazioni sugli elementi ora eliminati: li confronterai spesso con nuove aggiunte?
Gilles 'SO- smetti di essere malvagio' il

Ok grazie. Quindi ho aggiunto alcune informazioni (la possibilità di delimitazione di numeri interi) che potrebbero portare a ottimizzazioni.
Abdallah,

Risposte:


8

L'articolo "Ordinamento e selezione in PoSet" di Daskalakis, Karp, Mossel, Risensefield, Verbin, 2008 che descrive una rappresentazione dinamica di PoSet basata su antichain.

Potresti anche essere interessato all'articolo "Succinct Posets" di Munro, Nicholson, 2012 recentemente pubblicato su Arxiv e alla bibliografia ivi contenuta. La loro struttura dei dati è statica ma presumo che il prossimo passo sia avere una struttura di dati dinamica.


L'ordinamento e la selezione in Poset è fantastico per avere un'idea di ciò che è necessario per una struttura di dati, ma gli algoritmi stanno assumendo tagging di elementi nel poset (ad es. Esattamente il problema che vogliamo risolvere in primo luogo!) A calcola la relazione tra due elementi in O ( 1 ) dopo aver creato la struttura dei dati nelle query O ( q n ) . Quindi, il documento presuppone che le query sulla relazione tra due elementi siano costose e che la mappatura degli elementi dei poset sia banale, mentre le strutture di dati cartografici in genere assumono il contrario del primo per risolvere il secondo. O(1)O(1)O(qn)
Sebastian Graf

Avere le mappe rappresentate come una decomposizione (minima) di catene è una buona idea. Preservare l'invariante attraverso le eliminazioni è ciò che è difficile, però.
Sebastian Graf,

4

Hai mai visto "La ricerca negli ordini parziali dinamici simili ad alberi" di Heeringa et al ? Offrono una struttura dati dinamica per il problema precedente sui poset. È progettato per una RAM, ma è possibile rappresentare array come alberi binari bilanciati e sostenere solo un sovraccarico moltiplicativo rendendo la struttura puramente funzionale.O(lgn)


1
Nota che questo copre solo gli ordini parziali "ad albero", ad esempio meet-semilattices, in cui tutti gli elementi minori o uguali a qualche elemento eformano una catena.
Sebastian Graf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.