Dato un dag ponderato, esiste un algoritmo O (V + E) per sostituire ciascun peso con la somma dei pesi dei suoi antenati?


34

Il problema, ovviamente, è il doppio conteggio. È abbastanza facile da fare per determinate classi di DAG = un albero o anche un albero seriale parallelo. L'unico algoritmo che ho trovato che funziona su DAG generali in tempi ragionevoli è approssimativo (diffusione della sinossi), ma aumentarne la precisione è esponenziale nel numero di bit (e ho bisogno di molti bit).

Contesto: questo compito viene svolto (più volte con "pesi" diversi) nell'ambito dei calcoli di probabilità nel BBChop (http://github.com/ealdwulf/bbchop) un programma per trovare bug intermittenti (ovvero una versione bayesiana di " git bisect '). Il DAG in questione è quindi una cronologia delle revisioni. Ciò significa che è improbabile che il numero di bordi si avvicini al quadrato del numero di nodi, è probabile che sia inferiore a k volte il numero di nodi per alcuni k di piccole dimensioni. Purtroppo non ho trovato altre proprietà utili dei DAG di revisione. Ad esempio, speravo che il più grande componente triconnesso sarebbe cresciuto solo come radice quadrata del numero di nodi, ma purtroppo (almeno nella storia del kernel Linux) cresce in modo lineare.


Giusto per chiarire: sono solo i nodi che hanno pesi, non i bordi?
Heinrich Apfelmus,

Sì, solo i nodi.
Ealdwulf,

4
Questo sembra essere un quasi duplicato di cstheory.stackexchange.com/questions/553/… ?
Jukka Suomela,

questo in realtà sembra più generale, poiché l'assegnazione dei pesi unitari a tutti i vertici riduce questo problema al problema della raggiungibilità.
Suresh Venkat,

L'approssimazione sembra non essere difficile da fare con alcuni fattori extra pollogici ...
Sariel Har-Peled

Risposte:


17

Partiamo dal presupposto che i pesi dei vertici possono essere interi positivi arbitrari o, più precisamente, possono essere numeri interi positivi al massimo 2 n . Quindi l'attività corrente non può essere eseguita nemmeno in un limite di tempo leggermente più debole O ( n 2 ), a meno che la chiusura transitiva di un grafico diretto arbitrario non possa essere calcolata nel tempo O ( n 2 ), dove n indica il numero di vertici. (Si noti che un algoritmo di tempo O ( n 2 ) per la chiusura transitiva sarà una svolta.) Questa è la contrapposizione della seguente rivendicazione:

Rivendica . Se l'attività corrente può essere eseguita nel tempo O ( n 2 ), la chiusura transitiva di un grafico diretto arbitrario dato come sua matrice di adiacenza può essere calcolata nel tempo O ( n 2 ) (ipotizzando un modello computazionale ragionevole).

Prova . Come preelaborazione, calcoliamo la decomposizione componente fortemente connessa del dato grafico G dato nel tempo O ( n 2 ) per ottenere un DAG G ′. Si noti che, se siamo in grado di calcolare la chiusura transitiva di G ', siamo in grado di ricostruire la chiusura transitiva di G .

Ora assegna il peso 2 i a ciascun vertice i del DAG G ′ e usa l'algoritmo per il problema attuale. Quindi la rappresentazione binaria della somma assegnata a ciascun vertice i descrive esattamente l'insieme degli antenati di i , in altre parole, abbiamo calcolato la chiusura transitiva di G ′. QED .

Vale anche il contrario del reclamo: se è possibile calcolare la chiusura transitiva di un determinato DAG, è facile calcolare le somme richieste con un lavoro aggiuntivo nel tempo O ( n 2 ). Pertanto, in teoria è possibile eseguire l'attività corrente nel tempo O ( n. 2.376 ) utilizzando l'algoritmo per la chiusura transitiva basato sull'algoritmo di moltiplicazione della matrice Coppersmith-Winograd .

Modifica : la revisione 2 e precedenti non hanno espresso esplicitamente il presupposto sull'intervallo dei pesi dei vertici. Per Vognsen ha sottolineato in un commento che questa ipotesi implicita potrebbe non essere ragionevole (grazie!), E sono d'accordo. Anche se non sono necessari pesi arbitrari nelle applicazioni, suppongo che questa risposta possa escludere alcuni approcci dal seguente ragionamento: “Se questo approccio funzionasse, darebbe un algoritmo per i pesi arbitrari, che è escluso a meno che il transitivo la chiusura può essere calcolata nel tempo O ( n 2 ). "

Modifica : la revisione 4 e precedenti indicavano erroneamente la direzione dei bordi.


4
Stavo pensando a questa cosa la scorsa notte poiché una soluzione pratica utilizza i bit bit per fare il conteggio delle esclusioni. Immagino che l'unica domanda sia se sia ragionevole presumere che i pesi possano avere una lunghezza in bit proporzionale a n. In pratica, posso immaginare che i pesi siano limitati da alcuni k in modo che la somma massima possibile sia kn, che non è abbastanza per tirare questo trucco.
Per Vognsen,

@Per: sono d'accordo che il presupposto che i pesi dei vertici possano essere numeri interi n-bit potrebbe essere discutibile. Ho modificato la risposta per rendere esplicito questo assunto. Grazie!
Tsuyoshi Ito,

1
@Per: mi sono reso conto che se i pesi dei vertici sono numeri interi delimitati da O (1), il problema si riduce al caso in cui tutti i vertici hanno peso 1 duplicando i vertici in modo adeguato.
Tsuyoshi Ito,

Sfortunatamente non vedo una risposta in quella discussione al problema del conteggio. I conteggi contengono logaritmicamente meno informazioni rispetto all'elenco della chiusura transitiva, O (n log n) vs O (n ^ 2), quindi non vedo come potrebbe funzionare una riduzione diretta.
Per Vognsen,

A proposito, una versione interessante di questo problema è quando abbiamo un limite al fattore di filiale e alle informazioni sulla crescita delle dimensioni delle generazioni (una sorta di topologia) del DAG. Se la crescita è esponenziale, il modello è essenzialmente simile ad un albero. E se fosse lineare, log-lineare, quadratico, ecc.?
Per Vognsen,

2

Questa è un'espansione del mio commento sulla risposta di Tsuyoshi. Penso che la risposta negativa alla domanda possa essere resa incondizionata.

ω(n)O(n)

Gr,cr×crrc

r=(log n)/2c=2n/log n

nω(log n)

ω(n)2c(r1)=O(n)

Il punto sembra essere che l'ordine parziale sottostante sia denso, ma il DAG rappresenta la sua riduzione transitiva, che può essere scarsa.


Questo argomento è interessante, ma non sono sicuro che possa essere trasformato in una prova di una dichiarazione interessante. Considerando la pervasiva difficoltà di dimostrare limiti inferiori di problemi, questo argomento mi sembra molto positivo.
Tsuyoshi Ito,

@Tsuyoshi: penso che l'esistenza dovrebbe funzionare tramite un argomento probabilistico, e il limite inferiore è debole, quindi sembra che ci sia abbastanza spazio per farlo funzionare. Ma hai ragione, è fatto a mano, che la frase "aggiunte non riutilizzabili in media" ha bisogno di una base migliore.
András Salamon,

-2

Questo è sbagliato e si basa su un malinteso sulla domanda. Grazie a Tsuyoshi per aver pazientemente sottolineato il mio errore. Lasciarsi nel caso in cui altri commettano lo stesso errore.

k

kO(k|V|)

O(|V|+|E|)

Questo approccio dovrebbe anche funzionare bene se ci sono alcuni nodi con molti predecessori immediati, purché siano relativamente rari.


4
Non capisco. Come evitare il doppio conteggio quando il DAG non è un albero? In effetti, se non sbaglio, il caso generale può essere ridotto al caso in cui ciascun vertice ha al massimo due predecessori e qualsiasi algoritmo a tempo lineare per quest'ultimo caso fornisce un algoritmo a tempo di linea per il caso generale.
Tsuyoshi Ito,

O(|V|+|E|)k

Temo che tu abbia frainteso il mio commento. Sto mettendo in dubbio la correttezza del tuo algoritmo, non il tempo di esecuzione. Supponiamo che un DAG con quattro vertici A, B, C, D con bordi A → B → D e A → C → D con ciascun vertice abbia un certo peso. Dopo aver calcolato le somme parziali per B e C, non è possibile semplicemente aggiungere le somme parziali per B e C per calcolare la somma per D perché in questo modo si aggiungerebbe due volte il peso del vertice A.
Tsuyoshi Ito,

u<vw(u)

1
Sì. E ora ricordo che la prima volta che ho visto questa domanda, ho letto male la domanda allo stesso modo e ho pensato che sarebbe stato ovvio. Ma no, la vera domanda è più difficile di così. Tempo di pensare….
Tsuyoshi Ito,
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.