Ecco una prova che segue più da vicino il set di soluzioni MIT collegato alla domanda originale. Per chiarezza, userò la stessa notazione che usano in modo che il confronto possa essere fatto più facilmente.
Supponiamo di avere due vertici e b tale che la distanza tra unun'Bun' e sul percorso p ( a , b ) è un diametro, ad esempio, la distanza d ( a , b ) è massima distanza possibile tra due punti nella struttura. Supponiamo di avere anche un nodo s ≠ a , b (se s = a , allora sarebbe ovvio che lo schema funziona, dal momento che il primo BFS otterrebbe b , e il secondo ritornerebbe a a). Supponiamo anche che abbiamo un nodoBp ( a , b )d( a , b )s ≠ a , bs = aB tale che d ( s , u ) = max x d ( s , x ) .ud( s , u ) = maxXd( s , x )
Lemma 0: Sia che b sono nodi foglia.un'B
Prova: se non fossero nodi fogliari, potremmo aumentare estendendo gli endpoint ai nodi fogliari, contraddicendo d ( a , b ) essendo un diametro.d( a , b )d( a , b )
Lemma 1: .max [ d( s , a ) , d( s , b ) ] = d( s , u )
Prova: supponiamo per contraddizione che sia che d ( s , b ) fossero strettamente inferiori a d ( s , u ) . Esaminiamo due casi:d( s , a )d( s , b )d( s , u )
Caso 1: percorso fa non contengono vertice s . In questo caso, d ( a , b ) non può essere il diametro. Per capire perché, cerchiamo t essere il vertice unica su p ( a , b ) con la distanza minima di s . Quindi, vediamo che d ( a , u ) = d ( a , t ) + d ( t , sp ( a , b )Sd( a , b )tp ( a , b )S , poiché d ( s , u ) > d ( s , b ) = d ( s , t ) + d ( t , b ) > d (d( a , u ) = d( a , t ) + d( t , s ) + d( s , u ) > d( a , b ) = d( a , t ) +d( t , b ) . Allo stesso modo, avremmo anche d ( b , u ) > d ( a , b ) . Ciò contraddice d ( a , b ) essendo un diametro.d( s , u ) >d( s , b ) = d( s , t ) + d( t , b ) > d( t , b )d( b , u ) > d( a , b )d( a , b )
Caso 2: il percorso contiene vertici s . In questo caso, d ( a , b ) di nuovo non può essere il diametro, poiché per alcuni vertici u tale che d ( s , u ) = max x d ( s , x ) , sia d ( a , u ) che d ( b , u ) sarebbe maggiore di dp ( a , b )Sd( a , b ) ud( s , u ) = maxXd( s , x )d( a , u )d( b , u ) .d( a , b )
Lemma 1 dà la ragione per cui iniziamo la seconda ampiezza ricerca dall'ultima-scoperto vertici dei primi BFS. Se sei il vertice unico con la massima distanza possibile dauu , allora per il Lemma 1, essodeveessere uno dei punti finali di qualche percorso con una distanza pari al diametro, e quindi una seconda BFS con u come radice trova ambiguità la diametro. D'altra parte, se esiste almeno un altro vertice v tale che d ( s , v ) = d ( s , u ) , allora sappiamo che il diametro è dSuvd( s , v ) = d( s , u ) , e non importa se si avvia la seconda BFS a u o v .d( a , b ) = 2 d( s , u)uv