Qual è il modo più veloce per verificare l'inclusione impostata?


24

Dato n sottogruppi S1,,Sn di {1,,d} .

Si,SjSiSj

La banale soluzione a questo problema passa attraverso tutte le coppie di insiemi e verifica l'inclusione di una coppia nel tempo , quindi il tempo di esecuzione complessivo è . Questo problema può essere risolto più velocemente? C'è un nome per questo in letteratura?O(d)O(n2d)

Risposte:


27

Non puoi risolverlo in tempo per qualsiasi costante meno che l' ipotesi del tempo esponenziale forte sia falsa.O(n2ϵ)ϵ>0

Cioè, se avessimo un tale algoritmo, potremmo risolvere -Variable CNF Satisfiability in tempo per alcuni . Il motivo è che potremmo dividere le variabili in due parti uguali e di variabili ciascuna. Per ogni parte costruiamo una famiglia e rispettivamente di sottoinsiemi delle clausole nel modo seguente. Per ogni assegnazione aggiungiamo un sottoinsieme costituito dalle clausole non soddisfatte dall'assegnazione. Questa costruzione viene eseguita in volta.nO((2ϵ)n)ϵ>0P1P2n/2F1F2poly(n)2n/2

Per finire la costruzione, notiamo che l'istanza CNF originale ha una soluzione se c'è un sottoinsieme in che è disgiunto da un sottoinsieme in .F 2F1F2

Aggiungendo alcuni elementi extra al set di terra oltre a quelli per ogni clausola, non è troppo difficile incorporare questo problema di disgiunzione come una questione di inclusione del set. Praticamente prendi i complementi dei sottoinsiemi in . Per assicurarti che due insiemi in non conteggiati come inclusione, aggiungi un codice da un anti-chain sugli elementi extra. Un altro codice anti-catena (su altri elementi extra del set di terra) viene usato sui sottoinsiemi di per assicurarsi che nessuna coppia di sottoinsiemi di formi un'inclusione. Infine, tutti i set formati da includono tutti gli elementi dei codici anti-chain di .F 1 F 2 F 2 F 1 F 2F1F1F2F2F1F2

Questa è una domanda di inclusione impostata su sottoinsiemi su un set di terra . L'argomento in sostanza risale ad alcuni dei primi articoli di Ryan Williams (non ricordo quale). d = p o l y ( n )2n/2+1d=poly(n)


Grazie mille per la rapida risposta. Abbiamo anche , se usiamo prima il Lemma di Sparsificazione, giusto? d=O(n)
Karl

9

Se sei interessato a impostare famiglie con , un'altra soluzione concettualmente molto simile a quella delineata nella risposta di Yuval è calcolare zeta transformn=ω(2d/2)

fζ(T)=STf(S),

dove è la funzione indicatore della famiglia di input . Cioè, se e altrimenti. Chiaramente ci sono insiemi tali che if e solo se per alcuni .F ={ S 1 , S 2 ,, S n }f(S)=1S F f(S)=0 S i S j S i S j fζ(S)>1S Ff:2[d]RF={S1,S2,,Sn}f(S)=1SFf(S)=0SiSjSiSjfζ(S)>1SF

La trasformazione zeta può essere calcolata nel tempo usando l'algoritmo di Yates, vedi ad esempio Knuth's TAOCP, vol. 2, §4.6.4. L'algoritmo stesso è una programmazione dinamica abbastanza semplice ed è facile modificarlo per dare un esempio di un set incluso se ne esiste uno.O(d2d)


Questo è molto più semplice della mia risposta!
Yuval Filmus,

8

Questo problema può essere risolto utilizzando un algoritmo per una rapida moltiplicazione della matrice, e ho anche il sospetto che sia computazionalmente equivalente alla moltiplicazione della matrice (anche se non conosco alcun modo per dimostrarlo, e non penso che le tecniche per dimostrarlo esistano ). Questa soluzione avrebbe un tempo di esecuzione di O (n ^ {2.373}) quando n = d e altri tempi di esecuzione per altre relazioni tra d e n.

Ecco come risolverlo usando la moltiplicazione matriciale: scrivi i vettori caratteristici degli insiemi nelle righe di una matrice n per d e i vettori caratteristici dei complementi degli insiemi nelle colonne di annunci per n matrice B. Tu quindi moltiplica A per B. Le coppie di insiemi che si intersecano sono esattamente le posizioni del prodotto A * B che sono uguali a zero.

Per il miglior tempo di esecuzione noto per questo problema, vedere il documento di Huang e Pan sull'argomento. Se ricordo bene, quando d diventa abbastanza grande, il tempo di esecuzione diventerà O (nd) ovviamente ottimale. Per n = d, avrai un tempo di esecuzione di O (n ^ {2.373}). Per altre relazioni di n e d, otterrai altri valori. Se esiste un algoritmo ottimale per la moltiplicazione della matrice rettangolare, otterrai un algoritmo con tempo di esecuzione O (n ^ 2 + nd) per il tuo problema. Ho il sospetto che non ci sia modo migliore di questo per risolvere il tuo problema, ma sono tutt'altro che sicuro.

Questa soluzione probabilmente non è di utilità pratica, poiché le costanti di questi algoritmi sono troppo grandi. L'algoritmo di Strassen potrebbe migliorare la soluzione ingenua per valori ragionevoli di n, ma non ne sono nemmeno sicuro. Tuttavia, i problemi che sembrano così correlati alla moltiplicazione di matrici sembrano raramente avere algoritmi combinatori migliori dell'algoritmo ingenuo (per fattori più che poliglicaritmici), quindi se dovessi indovinare, indovinerei che non esiste un buon algoritmo per il tuo problema che è significativamente migliore di quello ingenuo, usando le tecniche attuali.


6

Se allora sappiamo che il set non è un antitaglio del lemma di Sperner, e quindi il la versione decisionale del problema diventa banale. Ma potrebbe essere interessante considerare il caso in cui è vicino a quel valore.n>(dd/2)2dπd/2n

Il lavoro di Friedgut sul teorema di Erdős-Ko-Rado mostra che, dato il vettore caratteristico di una famiglia di sottoinsiemi di , si può trovare nel tempo se è una famiglia che si interseca (ogni due elementi di intersecano). Più in generale, il suo metodo ci consente di calcolare dove è una funzione nota (specifica) che non è zero solo se sono disgiunti. dipende solo dall'istogramma di , dove è l'indicatore per .[ m ] O ( m 2 m ) f f Σ = x , y f S ( x , y ) , S ( x , y ) 0 x , y S ( x , y ) { ( x i , y i ) :f[m]O(m2m)ff

Σ=x,yfS(x,y),
S(x,y)0x,yS(x,y)x i{(xi,yi):i[d]}xiix

(A parte, commentiamo che il suo metodo funziona anche se ci vengono date due famiglie e siamo interessati a . In entrambi i casi, si devono calcolare il -skewed Fourier-Walsh trasformate di per un arbitrario , e quindi , dove dipende solo dal peso di Hamming di .)Σ = x f , y g S ( x , y ) p f , g p ( 0 , 1f,gΣ=xf,ygS(x,y)pf,gΣ = Σ x T ( x ) f ( x ) g ( x ) T ( x ) xp(0,1/2)Σ=xT(x)f^(x)g^(x)T(x)x

In che modo tutto ciò si collega al problema attuale? Considera la famiglia Ogni è disgiunto da ogni . Poiché viene fornito esplicitamente, possiamo calcolare il contributo di queste coppie a . Ci sono altre coppie disgiunte? Se è disgiunto da allora e quindi . Quindi è un iff antichain

F={Si{x}:i[n]}{Si¯{y}:i[n]}.
Si{x}Si¯{y}S(x,y)ΣSi{x}Sj¯{y}SiSj¯=SiSjS1,,Sn
Σ=i=1nS(Si{x},Si¯{y}).

Questo algoritmo viene eseguito in time , ignorando i fattori polinomiali in . Quando è vicino a , questo è significativamente migliore di . In generale, otteniamo un miglioramento purché .O~(n+2d)dn2dO~(n2)n=ω(2d/2)

Dato che sappiamo che esiste una coppia che soddisfa , come la troviamo? Supponiamo di dividere tutti i set in due gruppi a caso. Con probabilità circa , i set e si troveranno nello stesso gruppo. Se siamo così fortunati, possiamo eseguire il nostro algoritmo su e , scoprire a quale appartengono questi e quindi dimezzare il numero di set che dobbiamo considerare. In caso contrario, possiamo riprovare. Ciò dimostra che con un numero previsto di chiamate oracle alla versione decisionale, possiamo effettivamente trovare una coppia che soddisfa .S 1 , , S n G 1 , G 2 1SiSjS1,,SnG1,G2S i S j G 1 G 2 O ( log n )1/2SiSjG1G2O(logn)SiSj

Possiamo anche derandomizzare l'algoritmo. Senza perdita di generalità, supponiamo che . In ogni passaggio, partizioniamo in base a ciascuno dei bit. Una di queste partizioni saranno sempre messo ed nella stessa parte, se non hanno polarità opposte; possiamo testarlo esplicitamente usando solo operazioni . Questo dà un algoritmo deterministico usando chiamate oracle alla versione decisionale. k x y O ( n d ) O ( log 2 n )n=2kkxyO(nd)O(log2n)


Interessante. Cosa dovrei leggere se voglio saperne di più su questo?
Janne H. Korhonen,

2
Controlla l'articolo di Friedgut "Sulla misura delle famiglie che si intersecano, unicità e stabilità".
Yuval Filmus,
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.