Controllo della transitività vs. chiusura transitiva


9

Il controllo della transitività di un digrafo non è più facile di (in termini di complessità asintotica) prendere la chiusura transitiva del digrafo? Conosciamo un limite inferiore migliore di per determinare se un digrafo è transitivo o no?Ω(n2)


1
La memorizzazione dell'intera chiusura transitiva ti costerà più spazio. Per alcuni grafici dovresti essere in grado di agganciare e abbreviare il controllo di transitività senza rivisitare i bordi. Vedi: Un algoritmo di connettività parallela, Y Shiloach, U Vishkin - Journal of Algorithms, 1982O(logn)
Chad Brewbaker

1
Qui, Siek ha note di implementazione per la Boost Graph Library boost.org/doc/libs/1_54_0/libs/graph/doc/…
Chad Brewbaker

2
Non sei sicuro di cosa intendi con , ma un limite inferiore di Ω ( | V | 2 ) è semplice - considera K n{ e } per un certo bordo e . Qualsiasi algoritmo chiederà di verificare se ( u , v ) E per tutti u , v V , altrimenti il ​​bordo di cui non ha chiesto potrebbe essere quello mancante. O ( | V || E | )nΩ(|V|2)Kn{e}e(u,v)Eu,vVO(|V||E|)è un limite superiore, poiché questo è il tempo necessario per calcolare una chiusura transitiva.
RB

2
Si consideri un grafo orientato con vertici: vertici sorgente s 1 , ... , s k , vertici intermedi t 1 , ... , t k che sono successori immediati di ogni s i , e vertici lavandino u 1 , ... , u k che sono immediati successori di ogni t i . Il digrafo è transitivo se ciascuno degli archi ( s i , u j )n=3ks1,,skt1,,tksiu1,,ukti(si,uj)è presente nel grafico. Ciò richiede il controllo di bordi. D'altra parte, la ricerca di una chiusura transitiva può essere fatta in tempo O ( n ω ) , dove ω < 2.373 è l'esponente della moltiplicazione della matrice. Questi sono i limiti più noti. k2=(n/3)2=Ω(n2)O(nω)ω<2.373
András Salamon,

Il DAG ha forse una struttura aggiuntiva o desideri risultati completamente generali?
Niel de Beaudrap,

Risposte:


9

Di seguito mostrerò quanto segue: se hai un algoritmo temporale O ( ) per verificare se un grafico è transitivo per qualsiasi ε > 0 , allora hai un algoritmo temporale O ( n 3 - ε ) per rilevare un triangolo in un nodo grafico n , e quindi (da un articolo di FOCS'10 ) avresti un algoritmo temporale O ( n 3 - ε / 3 ) per moltiplicare due matrici booleane n × n , e quindi per un risultato di Fischer e Meyer degli anni '70 , questo implica anche una O ( n 3 -n3εε>0n3εnn3ε/3n×n ) algoritmo temporale per la chiusura transitiva.n3ε/3

Supponiamo che si desidera rilevare un triangolo in un nodo G . Ora possiamo creare il grafico seguente H . H è tripartito con partizioni I , J , K su n nodi ciascuno. Qui ciascun nodo x di G ha copie x I , x J , x K nelle parti I , J , K . Per ogni bordo ( u , v ) di G aggiungi bordi diretti (nGHHI,J,KnxGxI,xJ,xKI,J,K(u,v)G e ( u J , v K ) . Per ogni nonedge ( u , v ) di G aggiungere il bordo diretto ( u I , v K ) .(uI,vJ)(uJ,vK)(u,v)G(uI,vK)

Innanzitutto, se contiene un triangolo u , v , w , allora H non è transitivo. Questo perché i bordi ( u I , v J ) , ( v J , w K ) sono in H ma ( u I , w K ) no. In secondo luogo, se H non è transitiva, allora deve esistere un certo cammino orientato da qualche nodo s a qualche nodo t in H tale che (Gu,v,wH(uI,vJ),(vJ,wK)H(uI,wK)HstH non è un arco orientato in H . Tuttavia, i percorsi più lunghi in H hanno 2 spigoli, quindi qualsiasi percorso di questo tipo deve avere la forma ( u I , v J ) , ( v J , w K ) e ( u I , w K ) non è in H , quindi u , v , w forma un triangolo G .(s,t)HH2(uI,vJ),(vJ,wK)(uI,wK)Hu,v,wG


1
Trovare la chiusura transitiva è essenzialmente lo stesso della moltiplicazione di matrici. La domanda è se l'esponente nel limite inferiore può essere sollevato da 2 o l'esponente nel limite superiore può essere abbassato da 2.373. La catena di ragionamento che dimostrate mostra che anche un algoritmo ottimale per controllare la transitività produrrebbe solo un algoritmo temporale O ( n 2.667 ) per la chiusura transitiva, ma abbiamo già un algoritmo temporale O ( n 2.373 ) . O(n2)O(n2.667)O(n2.373)
András Salamon,

Il punto è che esistono riduzioni della scatola nera. L' algoritmo O ( ) è tutt'altro che pratico. Un algoritmo pratico di controllo della transitività che viene eseguito nel tempo subcubico, tuttavia, dalle riduzioni di cui sopra implica anche uno pratico per BMM e quindi la chiusura transitiva. Inoltre, anche se non ti interessano gli algoritmi pratici, è del tutto possibile che la perdita dell'esponente dal documento FOCS'10 non sia necessaria e che il rilevamento del triangolo sia probabilmente equivalente a BMM. n2.373
Virgi,

Oh, e ovviamente, potremmo basare la durezza del problema della transitività solo sulla presunta durezza del rilevamento del triangolo. Si noti che non sono noti limiti inferiori migliori di per il rilevamento del triangolo e il limite superiore migliore è O ( n ω ) . n2O(nω)
Virgi,

Abbiamo già un algoritmo pratico subcubico, usando qualsiasi metodo di moltiplicazione a matrice veloce: vedi ad esempio cacm.acm.org/magazines/2014/2/…
András Salamon

2
Il documento di Ballard e altri che citi parla in particolare dell'algoritmo di Strassen. Da quello che so, nessuno degli algoritmi di moltiplicazione di matrici che usano il rango di confine è pratico. In particolare, non sono a conoscenza di algoritmi pratici per alcun limite su inferiore a 2,78 . ω2.78
Virgi,

7

Sembra che sia il limite inferiore più noto, poiché qualsiasi limite inferiore implica un limite inferiore per la moltiplicazione della matrice booleana. Sappiamo che il controllo della transitività può essere ottenuto utilizzando una moltiplicazione della matrice booleana, ovvero G è transitivo se e solo se G = G 2 .Ω(n2)GG=G2


4

Capire se un DAG è transitivo è difficile quanto decidere se un digraph generale è transitivo (il che ci riporta alla tua domanda precedente :)).

Supponiamo di avere un algoritmo in esecuzione nel tempo per decidere se un DAG è transitivo.O(f(n))

Dato un grafico diretto , puoi usare il seguente algoritmo randomizzato per decidere se G è transitivo nel tempo O ( f ( n ) log ( 1GGe probabilità di erroreδ:O(f(n)log(1δ))δ

 1. for $O(\log{\frac{1}{\delta}})$ iterations:

   1.1. Compute a random permutation on $V$. Denote the result by $<v_1,v_2,...,v_n>$.

   1.2. Set $G'=(V,E\cup \{(v_i,v_j)|i<j\})$ (i.e. compute a random acyclic orientation).

   1.3. If $G'$ (which is acyclic) is not transitive return false.

 2. return true.

Ora è ovvio che se fosse transitivo, questo algoritmo tornerà vero.G

Ora supponiamo che non fosse transitivo. Sia e 1 = ( v i , v j ) , e 2 = ( v j ,G tale che ( v i , v k ) E (devono esserci dei bordi poiché G non è transitivo). La probabilità che e 1 , e 2G sia 1e1=(vi,vj),e2=(vj,vk)E(vi,vk)EGe1,e2G , quindi in ogni iterazione la probabilità che l'algoritmo calcolerà cheGnon fosse transitivo è116G e dopo leiterazioniO(log(δ))la probabilità di fallimento è al massimoδ.16O(log(δ))δ


1
Grazie per la risposta. Supponiamo che io abbia un algoritmo per decidere se un DAG è transitivo in tale f ( n ) = Ω (O(f(n)) . Quindi, posso decidere se un grafico diretto G è transitivo in O ( f ( n ) ) -time come; 1) Ottieni digraph fortemente connesso in O ( n 2 ) -time. 2) Controllare se ogni componente è completo in O ( n 2 )f(n)=Ω(n2)O(f(n))O(n2)O(n2)-tempo. 3) Controlla se ogni coppia di componenti, per i quali esiste un bordo nella digraph del componente, è bi-completa, ovvero c'è un bordo da ogni vertice di un componente a ogni vertice del secondo componente in -tempo. 4) Controllare se il componente digraph transitivo in O ( f ( n ) ) -time. O(n2)O(f(n))
ekayaaslan,

1

Penso che questo dovrebbe essere fattibile in un tempo lineare, cioè dove n è il numero di vertici e m il numero di spigoli. Forse adattando qualche schema di attraversamento del grafico all'impostazione diretta? Un punto di partenza potrebbe essere la LexBFS / LexDFS qui descritta ; per i grafici diretti sembra che dovremmo usare l'ordinamento topologico piuttosto che DFS, quindi forse è possibile scoprirlo con qualche algoritmo LexTSA ?O(n+m)nm


2
Questo è improbabile dall'IMO, dato che darebbe un algoritmo di tempo lineare probabilistico per il controllo della transitività in digrafi generali, vedi la mia risposta.
RB

0

Per quanto riguarda la risposta precedente, ecco un modo semplice per definire un tale algoritmo. Assegna a ciascun vertice un indice i ( x ) , inizializzato suxi(x) . Per ogni x , sia M ( x ) a indicare il multiset di indici dei suoi vicini. Simuliamo un ordinamento topologico mantenendo un insieme R di vertici inesplorati, inizializzato sull'intero insieme. Ad ogni passaggio, facciamo quanto segue:0xM(x)R

  1. Scegli un vertice cui multiset M ( x ) è minimo (nell'ordine multiset);xRM(x)

  2. Aggiornare alle attuali contatore loop e rimuovere x da R .i(x)xR

Questo algoritmo può essere utilizzato per il tuo problema o per qualche altra applicazione?


Questo sarebbe più appropriato come commento.
Suresh Venkat,
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.