La complessità temporale di trovare il diametro di un grafico


27

Qual è la complessità temporale nel trovare il diametro di un grafico ?sol=(V,E)

  • O(|V|2)
  • O(|V|2+|V||E|)
  • O(|V|2|E|)
  • O(|V||E|2)

Il diametro di un grafico è il massimo dell'insieme delle distanze più brevi tra tutte le coppie di vertici in un grafico.sol

Non ho idea di cosa fare al riguardo, ho bisogno di un'analisi completa su come risolvere un problema come questo.


4
Per favore, elabora un po '. Perché questo problema ti interessa? Hai bisogno di un suggerimento, un'analisi completa o un riferimento? Sei interessato al caso peggiore o medio? è diretto? sol
Raffaello

@Raphael: Ovviamente non ho bisogno di un suggerimento, ho bisogno di un'analisi completa. Ho modificato comunque la mia domanda.
Gigili

1
@Gigili Intendi in tutti i casi, giusto? Altrimenti, tutti sono inclusi nell'ultima possibilità (che è su grafici generali uguali a O ( | V | 5 ) ) che la rende una risposta corretta, supponendo che almeno una risposta sia corretta. Un'ulteriore preoccupazione è che in un grafico con cicli non esiste un percorso più lungo. Cosa si intende per "distanza più lunga"? ΘO(|V|5)
Raffaello

@Gigili Da dove vengono le quattro scelte?
uli

Risposte:


5

Aggiornare:

Questa soluzione non è corretta.

Sfortunatamente la soluzione è vera (e semplice) per gli alberi! Trovare il diametro di un albero non ha nemmeno bisogno di questo. Ecco un controesempio per i grafici (il diametro è 4, l'algoritmo restituisce 3 se si seleziona questa ):v

inserisci qui la descrizione dell'immagine


Se il grafico è diretto, questo è piuttosto complesso, ecco alcuni documenti che sostengono risultati più rapidi nel caso denso rispetto all'utilizzo di algoritmi per i percorsi più brevi di tutte le coppie.

Tuttavia il mio punto principale riguarda il caso in cui il grafico non è diretto e con pesi non negativi, ho sentito parlare di un bel trucco più volte:

  1. Scegli un vertice v
  2. Trova tale che d ( v , u ) è massimoud(v,u)
  3. Trova tale che d ( u , w ) sia massimowd(u,w)
  4. Ritorna d(u,w)

La sua complessità è la stessa di due prime ricerche di ampiezza successive¹, ovvero se il grafico è collegato².O(|E|)

Sembrava folklore ma in questo momento, sto ancora lottando per ottenere un riferimento o per dimostrarne la correzione. Aggiornerò quando raggiungerò uno di questi obiettivi. Mi sembra così semplice pubblicare la mia risposta proprio ora, forse qualcuno la riceverà più velocemente.

¹ se il grafico è ponderato, Wikipedia sembra dire ma sono sicuro solo di O ( | E | log | V | ) .O(|E|+|V|log|V|)O(|E|log|V|)

² Se il grafico non è collegato si ottiene ma potrebbe essere necessario aggiungere O ( α ( | V | ) ) per selezionare un elemento da ciascun componente collegato. Non sono sicuro che ciò sia necessario e, comunque, potresti decidere che il diametro è infinito in questo caso.O(|V|+|E|)O(α(|V|))


Per lavorare con Dijsktra nel tempo specificato, è necessario utilizzare heap di Fibonacci, non la solita implementazione.
Suresh,

8
Questa è una risposta fortemente sbagliata, questo algoritmo è folklore ma negli alberi non nei grafici generali. PS: Vedo il tuo contro esempio, ma non è una buona risposta essere contrassegnato come risposta.

Ho due domande sulla soluzione sbagliata. 1. Questo fornirebbe almeno un intervallo in cui deve essere la risposta corretta? ad es. se il metodo trova diametro d , la soluzione corretta sarà compresa tra d e 2d ? 2. Cosa succede se si aggiunge un'altra indiretta e si considerano tutti i nodi trovati da una indiretta (non solo una)? L'esempio del contatore fornito nel post funzionerebbe quindi, poiché i veri vertici periferici sono tra i nodi trovati dalla seconda indiretta.
mafu,

32

GG

Θ(|V|3)O(|V|2log|V|+|V||E|)

O(|V|2)


2
Se ricevi paywall su quei documenti, controlla Google Scholar.
Raffaello

Inoltre, vale la pena notare questa eccezione per gli alberi non indirizzati , dove è possibile ottenere dia. con un solo attraversamento di dfs.
Azam,

15

diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)O(n2,3727logn)

O(n2)


2
Vale la pena notare che questo algoritmo funziona solo nel caso non ponderato.
GMB,

-2

Presupposti:
1. Il grafico non è ponderato
2. Il grafico è diretto

O (| V || E |) complessità temporale.

Algoritmo:

ComputeDiameter(G(V,E)):
  if ( isCycle( G(v,E) ) ) then
     return INFINITY
  if ( not isConnected( G(V,E) )) then
     return INFINITY
  diameter = 0
  for each vertex u in G(V,E):
     temp = BFS(G,u)
     diameter = max( temp , diameter )
  return diameter

Spiegazione:
Controlliamo il ciclo. se il grafico contiene un ciclo, continuiamo a muoverci nel loop, quindi avremo una distanza infinita. Controlliamo per collegato. Se il grafico non è collegato, significa che il vertice u da G1 al vertice v in G2. Dove G1 e G2 sono due sotto-grafici che non sono collegati. Quindi avremo di nuovo una distanza infinita. Useremo BFS per calcolare la distanza massima tra un dato nodo (u) a tutti gli altri nodi (v) che sono raggiungibili da u. Quindi prenderemo il massimo del diametro precedentemente calcolato e il risultato restituito da BFS. Quindi avremo il diametro massimo attuale.

Analisi del tempo di esecuzione:

  1. O (| E |) utilizzando DFS
  2. O (| E |) utilizzando DFS
  3. BFS viene eseguito nel tempo O (| E |).
  4. Dobbiamo chiamare la funzione BFS per ciascun vertice in modo che il tempo totale occorrerà O (| V || E |).

Tempo totale = O (| v || E |) + O (| E |) + O (| E |)
Da | V || E | > | E |
quindi abbiamo tempo di esecuzione come O (| v || E |).

BFS
DFS

Nota: questa non è una soluzione elegante a questo problema.


I grafici aciclici collegati sono alberi, per i quali il problema è più semplice (perché il diametro viene quindi indicato dal percorso più lungo). È stato affrontato qui e qui , dove vengono forniti algoritmi più veloci. (Sono sufficienti un attraversamento ricorsivo o, alternativamente, due BFS.)
Raffaello

1
@Raphael No, i grafici non indirizzati aciclici sono alberi. I DAG sono DAG.
David Richerby,

@DavidRicherby Right. (Anche se, tecnicamente, la risposta non dice se esclude cicli diretti o non indirizzati.;)) Comunque, questo non è altro che risolvere APSPP (l'approccio ingenuo), che è già stato coperto per il caso generale da risposte precedenti.
Raffaello

@Raphael Sei sicuro che i grafici aciclici siano alberi? Il grafico è aciclico non significa che il grafico sarà sempre albero. L'albero è solo un caso speciale di questo. Anche questo è un algoritmo semplice e la complessità temporale è O (| V || E |).
sonus21

Sì sono sicuro. (Forse stai pensando agli alberi radicati , che hanno un sapore diverso.)
Raffaello
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.