Actualizar:
Esta solución no es correcta.
Lamentablemente, la solución solo es cierta (y directa) para los árboles Encontrar el diámetro de un árbol ni siquiera necesita esto. Aquí hay un contraejemplo para gráficos (el diámetro es 4, el algoritmo devuelve 3 si elige este ):v
Si el gráfico está dirigido, esto es bastante complejo, aquí hay un documento que afirma resultados más rápidos en el caso denso que el uso de algoritmos para las rutas más cortas de todos los pares.
Sin embargo, mi punto principal es sobre el caso de que el gráfico no esté dirigido y con pesos no negativos, escuché sobre un buen truco varias veces:
- Elige un vérticev
- Encuentra tal que es máximod ( v , u )ud(v,u)
- Encuentre tal que sea máximod ( u , w )wd(u,w)
- Retornod(u,w)
Su complejidad es la misma que la de las dos primeras búsquedas de amplitud sucesivas¹, es decir, si el gráfico está conectado².O(|E|)
Parecía folklore pero en este momento, todavía estoy luchando por obtener una referencia o probar su corrección. Actualizaré cuando logre uno de estos objetivos. Parece tan simple que publico mi respuesta ahora mismo, tal vez alguien la reciba más rápido.
¹ si el gráfico está ponderado, Wikipedia parece decir pero solo estoy seguro acerca de .O ( | E | log | V | )O(|E|+|V|log|V|)O(|E|log|V|)
² Si el gráfico no está conectado, obtienes pero es posible que agregar para elegir un elemento de cada componente conectado. No estoy seguro de si esto es necesario y, de todos modos, puede decidir que el diámetro es infinito en este caso.O(|V|+|E|)O(α(|V|))