Este enlace proporciona un algoritmo para encontrar el diámetro de un árbol no dirigido usando BFS / DFS . Resumiendo:
Ejecute BFS en cualquier nodo del gráfico, recordando el nodo que descubrió por última vez. Ejecute BFS desde que recuerda el nodo v descubierto por última vez. d (u, v) es el diámetro del árbol.
Por que funciona
La página 2 de esto proporciona un razonamiento, pero es confuso. Cito la parte inicial de la prueba:
Ejecute BFS en cualquier nodo del gráfico, recordando el nodo que descubrió por última vez. Ejecute BFS desde que recuerda el nodo v descubierto por última vez. d (u, v) es el diámetro del árbol.
Corrección: Sea ayb cualquiera de los dos nodos, de modo que d (a, b) sea el diámetro del árbol. Hay un camino único de a a b. Sea t el primer nodo en esa ruta descubierto por BFS. Si las rutas de s a u y de a a b no comparten bordes, entonces la ruta de t a u incluye s. Asi que
.... (más desigualdades siguen ..)
Las desigualdades no tienen sentido para mí.
Respuestas:
Todas las partes de probar el reclamo dependen de 2 propiedades cruciales de los árboles con bordes no dirigidos:
Elija un nodo de árbol arbitrario . Suponga que son nodos con . Supongamos además que el algoritmo encuentra un nodo comienza en primero, algún nodo comienza en continuación. wlog . tenga en cuenta que debe mantenerse, a menos que la primera etapa del algoritmo no termine en . Veremos que .u , v ∈ V ( G ) d ( u , v ) = d i a m ( G ) x s y x d ( s , u ) ≥ d ( s , v ) d ( s , x ) ≥ d ( s , y ) x d ( x , y ) =s u , v ∈ V( G ) re( u , v ) = dyo soy m ( G ) X s y X re( s , u ) ≥ d( s , v ) re( s , x ) ≥ d( s , y) X re( x , y) = d( u , v )
La configuración más general de todos los nodos involucrados se puede ver en los siguientes pseudo-gráficos (posiblemente o o ambos): s = z x ys = ztu v s = zx y
lo sabemos:
1) y 2) implican .re( u , v ) = d( ztu v, v ) + d( ztu v, U )≥ d( ztu v,x)+d(zuv,y)=d(x,y)+2d(zuv,zxy)≥d(x,y)
3) y 4) implican equivalente to .d(zxy,y)+d(s,zxy)+d(zxy,x)≥d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy) d(x,y)=d(zxy,y)+d(zxy,x)≥2∗d(s,zuv)+d(v,zuv)+d(u,zuv)≥d(u,v)
por lo tanto .d(u,v)=d(x,y)
las pruebas analógicas son válidas para las configuraciones alternativas
y
Estas son todas las configuraciones posibles. en particular, debido al resultado de la etapa 1 del algoritmo y debido a la etapa 2.y ∉ p a t h ( x , u ) , y ∉ p a t h ( x , v )x ∉ p a t h ( s , u ) , x ∉ p a t h ( s , v ) y∉ p a t h ( x , u ) , y∉ p a t h ( x , v )
fuente
La intuición detrás es muy fácil de entender. Supongamos que tengo que encontrar la ruta más larga que existe entre dos nodos en el árbol dado.
Después de dibujar algunos diagramas, podemos observar que la ruta más larga siempre ocurrirá entre dos nodos de hoja (nodos que solo tienen un borde vinculado). Esto también se puede demostrar por contradicción de que si la ruta más larga es entre dos nodos y uno o ambos no es un nodo hoja, entonces podemos extender la ruta para obtener una ruta más larga.
Entonces, una forma es verificar primero qué nodos son nodos hoja, luego iniciar BFS desde uno de los nodos hoja para obtener el nodo más alejado de él.
En lugar de encontrar primero qué nodos son nodos hoja, comenzamos BFS desde un nodo aleatorio y luego vemos qué nodo está más alejado de él. Deje que el nodo más alejado sea x. Está claro que x es un nodo hoja. Ahora, si iniciamos BFS desde x y verificamos el nodo más alejado de él, obtendremos nuestra respuesta.
Pero, ¿cuál es la garantía de que x será un punto final de una ruta máxima?
Veamos por un ejemplo: -
Supongamos que comencé mi BFS desde 6. El nodo a una distancia máxima de 6 es el nodo 7. Usando BFS podemos obtener este nodo. Ahora iniciamos BFS desde el nodo 7 para obtener el nodo 9 a la distancia máxima. La ruta del nodo 7 al nodo 9 es claramente la ruta más larga.
¿Qué pasa si BFS que comenzó desde el nodo 6 dio 2 como el nodo a la distancia máxima? Luego, cuando vamos a BFS desde 2, obtendremos 7 como nodo a la distancia máxima y la ruta más larga será entonces 2-> 1-> 4-> 5-> 7 con longitud 4. Pero la longitud de ruta más larga real es 5. Esto no puede sucede porque BFS del nodo 6 nunca dará el nodo 2 como nodo a la distancia máxima.
Espero que ayude.
fuente
Aquí hay una prueba que sigue más de cerca el conjunto de soluciones MIT vinculado en la pregunta original. Para mayor claridad, usaré la misma notación que usan para que la comparación se pueda hacer más fácilmente.
Supongamos que tenemos dos vértices y modo que la distancia entre y en el camino es un diámetro, por ejemplo, la distancia es la distancia máxima posible entre dos puntos en el árbol. Supongamos que también tenemos un nodo (si , entonces sería obvio que el esquema funciona, ya que el primer BFS obtendría , y el segundo volvería a a). Supongamos también que tenemos un nodo tal que .a b a b p(a,b) d(a,b) s≠a,b s=a b u d(s,u)=maxxd(s,x)
Lema 0: Tanto como son nodos foliares.a b
Prueba: si no fueran nodos de hoja, podríamos aumentar extendiendo los puntos finales a los nodos de hoja, contradiciendo que es un diámetro.d(a,b) d(a,b)
Lema 1: .max[d(s,a),d(s,b)]=d(s,u)
Prueba: supongamos, en aras de la contradicción, que tanto como eran estrictamente menores que . Nos fijamos en dos casos:d(s,a) d(s,b) d(s,u)
Caso 1: camino que hace no contienen vértice . En este caso, no puede ser el diámetro. Para ver por qué, deje que sea el vértice único en con la menor distancia a . Luego, vemos que , ya que . Del mismo modo, también tendríamos . Esto contradice que es un diámetro.p(a,b) s d(a,b) t p(a,b) s d(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b) 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: la ruta contiene el vértice . En este caso, nuevamente no puede ser el diámetro, ya que para algunos vértices tal que , tanto como sería mayor que .p(a,b) s d(a,b) u d(s,u)=maxxd(s,x) d(a,u) d(b,u) d(a,b)
Lema 1 da la razón por la que empezamos el segundo primero en amplitud de búsqueda en la última descubierto vértice de los primeros BFS. Si es el vértice único con la mayor distancia posible desde , entonces según el Lema 1, debe ser uno de los puntos finales de algún camino con una distancia igual al diámetro y, por lo tanto, un segundo BFS con como la raíz encuentra inequívocamente diámetro. Por otro lado, si hay al menos otro vértice tal que , entonces sabemos que el diámetro es , y no importa si comenzamos el segundo BFS en o .u s u vu u s u v d(s,v)=d(s,u) d(a,b)=2d(s,u) u v
fuente
Primero ejecute un DFS desde un nodo aleatorio, luego el diámetro de un árbol es la ruta entre las hojas más profundas de un nodo en su subárbol DFS:
fuente
Según la definición de BFS, la distancia (desde el nodo inicial) de cada nodo explorado es igual a la distancia del nodo anterior explorado o mayor en 1. Por lo tanto, el último nodo explorado por BFS estará entre los más alejados desde el inicio nodo.
Por lo tanto, el algoritmo de utilizar BFS cantidades dos veces para "escoger un nodo arbitrario . Encuentre el nodo de más alejado de (último nodo encontrado por BFS a partir de ). Encuentre el nodo más alejado de (último nodo encontrado por BFS a partir de ). ", que encuentra dos nodos de distancia máxima entre sí.x a x x b a a
fuente
Una cosa clave que debe saber es que un árbol siempre es plano, lo que significa que se puede colocar en un plano, por lo que a menudo funciona el pensamiento bidimensional ordinario. En este caso, el algoritmo dice que comenzar en cualquier lugar, ir lo más lejos posible. La distancia desde ese punto hasta donde puede alejarse de ese punto es la distancia más larga en el árbol y, por lo tanto, el diámetro.
Este método también funcionaría para encontrar el diámetro de una isla física real si lo definiéramos como el diámetro del círculo más pequeño que encerraría completamente la isla.
fuente
@op, la forma en que se definen los casos en el PDF puede estar un poco fuera de lugar.
Creo que los dos casos deberían ser:
El resto de la prueba en el PDF debe seguir.
Con esta definición, la figura mostrada por OP cae en el caso 2.
fuente