2010-05-08 5 views
7

Tengo un gráfico acíclico dirigido con bordes positivos. Tiene una única fuente y un conjunto de objetivos (vértices más alejados de la fuente). Encuentro los caminos más cortos desde la fuente hasta cada objetivo. Algunos de estos caminos se superponen. Lo que quiero es un árbol de ruta más corta que minimice la suma total de pesos en todos los bordes.Cómo minimizar el costo total del árbol de ruta más corta

Por ejemplo, considere dos de los objetivos. Dado que todos los pesos de los bordes son iguales, si comparten una sola ruta más corta durante la mayor parte de su longitud, entonces es preferible a dos rutas más cortas que no se superponen (menos aristas en el árbol equivalen a un costo global más bajo).

Otro ejemplo: dos caminos no se superponen para una pequeña parte de su longitud, con un alto costo para las rutas no superpuestas, pero de bajo costo para la ruta compartida larga (bajo costo combinado). Por otro lado, dos rutas no se solapan en la mayor parte de su longitud, con bajos costos para las rutas no superpuestas, pero alto costo para la ruta corta compartida (también, bajo costo combinado). Hay muchas combinaciones Quiero encontrar soluciones con el costo total más bajo, dado todos los caminos más cortos desde el origen hasta el objetivo.

En otras palabras, quiero los árboles de ruta más corta y más corta.

¿Suena esto con alguien? ¿Alguien puede indicarme algoritmos relevantes o aplicaciones análogas?

¡Salud!

+0

Hm ... intentar la partición aunque no estoy seguro. los caminos en conjuntos que no tienen nada en común con los demás. Tal vez revertir todos los bordes y resolver el problema del complemento ... –

+0

Simplemente elimine los nodos y bordes que no están en ninguna ruta de la fuente al objetivo y calcule el árbol de expansión de peso mínimo del DAG resultante. Parece que funcionará. Una de las respuestas lo menciona también. –

+0

Parece que esto es NP-Complete y MST no era más que un reclamo. He publicado una respuesta. –

Respuesta

1

Si solo tiene costos positivos y está minimizando, solo use el Dijkstra's algorithm.

+0

No es obvio cómo usar esto. Por favor elabora. -1 hasta entonces. Además, solo para aclarar la pregunta, se trata del peso _total_ (las superposiciones se contabilizaron una vez), por lo que simplemente utilizar todas las rutas más cortas podría no funcionar. –

+0

Lo siento, he entendido mal la pregunta. Lo único que puede usar este algoritmo es encontrar una aproximación usando los pesos, como el nuevo peso es el inicial dividido por el número de sumideros alcanzables. – Kru

2

Este problema (Steiner Tree) es NP-hard y max SNP-complete, por lo que no hay algoritmos de tiempo polinomial ni PTAS (aproximaciones arbitrariamente cerradas) a menos que P = NP.

El MST puede dar un peso arbitrariamente peor que el óptimo, a menos que conozca alguna característica especial de su gráfico (por ejemplo, el gráfico es plano, o al menos el peso obedece a la desigualdad del triángulo). Por ejemplo, si tiene K_1,000,000,001 con todos los pesos de borde 1 y solo un objetivo, la solución óptima tiene un peso de 1 y el MST tiene un peso de 1,000,000,000.

Si supone que existen todos los bordes entre los objetivos y todos los bordes entre la fuente y cada objetivo, puede sobrepasar por un factor arbitrario. Considere el ejemplo anterior, pero cambie el peso del borde entre el objetivo y la fuente a 2,000,000,000,000,000,000 (todavía está apagado en un factor de mil millones de óptimo).

Por supuesto, puede transformar el gráfico para 'eliminar' las pesas de borde que tienen un alto O (E) en tiempo atravesando el gráfico. Esto más un MST del conjunto de objetivos y la fuente proporciona una relación de aproximación de 2.

Existen mejores proporciones de aproximación. Robins & Zelikovsky tiene un algoritmo de tiempo polinomial que nunca es más que 54,94% peor que óptimo: http://www.cs.virginia.edu/~robins/papers/soda2000_camera.pdf

Chlebik & Chlebikova muestran que se aproxime a menos de 1,05% es NP-duro: The Steiner tree problem on graphs: Inapproximability results (doi 10.1.1.4.1339)

Si su gráfica es plana, la situación es mejor. Hay un algoritmo rápido que da una aproximación arbitrariamente cercana debido a Borradaile, Kenyon-Mathieu & Klein (basándose en Erickson, Monma, & Veinott): An O(nlogn) approximation scheme for Steiner tree in planar graphs (doi 10.1.1.133.4154)

+0

bueno, no lo dije en todos los casos (solo dije recomendar wiki). De todos modos, eliminé esa parte. Gracias. De todos modos +1 para todas las referencias. Le sugiero que también agregue un enlace diciendo qué problema es, en primer lugar. –

+0

He editado la publicación para agregar los enlaces relevantes. –

+0

Editado para eliminar la referencia a su extracto. No estaba siendo acusador, solo quería dejarlo en claro para los lectores. Gracias por los enlaces. – Charles

Cuestiones relacionadas