Quanto velocemente possiamo calcolare il poset di inclusione impostato di una famiglia impostata?


20

Dato un insieme di famiglia F di sottoinsiemi di un universo U . Sia S1,S2F e vogliamo rispondere è S1S2 .

Sto cercando una struttura di dati che mi permetta di rispondere rapidamente. La mia applicazione proviene dalla teoria dei grafi dove voglio vedere se l'eliminazione di un vertice e del suo vicinato lascia vertici isolati e per ogni elenco di vertici lascia tutti i vertici isolati.

Voglio creare il poset completo o eventualmente un |F|2 tabella che memorizza il vero falso che dice esattamente quali set sono sottoinsiemi di ciascuno di essi.

Sia m=SF|S|, u=|U|e n=|F|, supponiamo u,nm

Possiamo generare la matrice di contenimento n×u (il grafico bipartito) nel tempo O(un) e quindi creare la tabella di tutti i n2 confronti nel tempo O(nm) per ogni set SF , scorrere tutti elementi di tutti gli altri insiemi e contrassegnano l'insieme non un sottoinsieme di S se l'elemento non è in S . Nel tempo totale di O(nm) .

Possiamo fare qualcosa più velocemente? In particolare, O((n+u)2) possibile o no?

Ho trovato alcuni articoli correlati:

Un semplice algoritmo sub-quadratico per il calcolo dell'ordine parziale parziale (1995) che fornisce un algoritmo O(m2/log(m)) .

L'ordine parziale del sottoinsieme: il calcolo e la combinatoria migliorano leggermente quanto sopra ma sostengono anche che il documento sopra risolve il problema in O(md) tempo in cui d è il numero massimo di set che condividono un elemento comune, ma non sono riuscito a capire questo risultato.

Nell'articolo Tra e O ( n α )O(nm)O(nα) gli autori mostrano come trovare in un grafico i componenti collegati dopo aver eliminato la vicinanza chiusa di un vertice usando la moltiplicazione della matrice. Questo può essere usato per calcolare il poset di inclusione impostato trovando tutti i componenti che sono singoli con un tempo di esecuzione di .O((n+u)2.79)

Anche questa discussione sul forum è collegata: qual è il modo più veloce per verificare l'inserimento impostato? che implica un limite inferiore di .O(n2ϵ)


Solo un suggerimento: potresti semplificare la domanda impostando ? O entrambi i parametri sono importanti nella tua applicazione? u=n
Colin McQuillan,

Nella mia applicazione ho dove < < mezzi asintoticamente più piccola. u<<n<<2u<<
Martin Vatshelle,

Risposte:


2

Se la casualità è nei limiti, un'idea approssimativa sarebbe quella di generare un gruppo di funzioni di "firma monotonica casuale" e usarle per approssimare la relazione del sottoinsieme (a la Bloom filters). Sfortunatamente, non so come trasformarlo in un algoritmo pratico, ma qui ci sono alcune stime che non dimostrano immediatamente l'idea impossibile. Questo è molto lontano da una soluzione utile, ma lo scriverò nel caso in cui aiuti.

Supponiamo per semplicità che i set siano quasi tutti della stessa dimensione, diciamo e quello s = o ( u ) . Possiamo assumere 1 s , altrimenti abbiamo finito. Definisci q|S|=s±O(1)s=o(u)1s Notare chep1.

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

Ecco la parte selvaggiamente impraticabile. Scegli casualmente sottogruppi A 1 , , A pU con sostituzione, ciascuno di dimensione q , e definisci una funzione f : 2 U{ 0 , 1 } di f ( S ) = 1 iff A iS per alcuni i . Con S fisso e A i , f che variano in modo casuale, abbiamo PrpA1,,ApUqf:2U{0,1}f(S)=1AiSiSAi,f Poichéf(S)è monotonico,STimplicaf(S)f(T). SeTS, risolvere alcunitT-S. La probabilità chefrileviTSè Pr ( f ( S ) = 0 < 1 = f

Pr(f(S)=0)=Pr(i.AiS)=Pr(A1S)p=(1(sq)/(uq))p=eΘ(1)
f(S)STf(S)f(T)TStTSfTS
Pr(f(S)=0<1=f(T))=Pr(f(S)=0)Pr(f(T)=1|f(S)=0)=eΘ(1)Pr(i.AiT,AiTS0|f(S)=0)=eΘ(1)Pr(i.tAiT|f(S)=0)eΘ(1)Pr(i.tAiT)eΘ(1)pPr(tA1T)eΘ(1)p(sq1)/(uq)eΘ(1)pqsq(sq)/(uq)=eΘ(1)
Some of those steps are pretty tenuous, but I don't have time to improve them tonight. In any case, if they all hold, then at least it's not clearly impossible to randomly generate signature functions that have reasonable likelihood of distinguishing subsets from nonsubsets. A logarithmic number of such functions would then distinguish all pairs correctly. If generating a signature function f and computing f(S) could be reduced to O~(n+u) time, the result would be an overall O~(n2+u2) algorithm.

Even if the above calculations are correct, I have no idea how to generate monotonic signature functions with the desired features quickly. It's also likely that this technique doesn't extend to significantly different set sizes.

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.