Tu primera pregunta ¿Por qué Dijkstra no es aplicable en gráficos de borde negativo?
Al ser un algoritmo codicioso, el algoritmo de Dijkstra no se puede aplicar en gráficos con pesos de borde -ve.
Razón :
- ¿Cuál es la forma más eficiente de clasificar 4 TB en una sola máquina con 4 GB de RAM?
- ¿Cómo reconocen los programas el nombre usando el procesamiento del lenguaje natural?
- ¿Qué significa el algoritmo en informática?
- Cómo comenzar con la introducción a los algoritmos (CLRS)
- No tengo ningún talento en estructuras de datos y algoritmos, ¿debería abandonar mi título de CS?
“En el algoritmo de Dijkstra, tenemos una cola prioritaria de vértices. En cada paso hacemos estallar el vértice cuya distancia desde la fuente es menor con la ayuda de la cola de prioridad (min). Luego, el vértice revelado actualiza la distancia de la fuente de todos los demás nodos. el paso se repite hasta que todos los vértices se destapen
Dejando los detalles sangrientos. La respuesta a su pregunta se encuentra simplemente aquí:
¿Por qué sacamos el vértice de menor distancia de la cola Prioridad?
Tomemos el nodo / vértice emergente como P, y su distancia de la Fuente como D (p). Ahora, la razón por la cual P aparece, es que D (p) no puede ser ‘RELAJADO’ más por ningún vértice de la competencia. Por RELAJADO me refiero al código de actualización trillado:
Para cada vecino si D (p) <D (n) + Edge (n, p)
Entonces D (p) = D (n) + Edge (n, p)
donde n es vecino de p.
Como todos los bordes son + ve, entonces D (n) tiene que ser positivo. Edge (n, p) es obviamente positivo. Por lo tanto, D (p) no puede ser actualizado / RELAJADO por ningún otro vecino porque D (p) es el menos entre todos los D’s. Por lo tanto, D (n)> D (p), y debido a que Dijkstra se aplica en + cinco bordes ponderados, D (n) + Edge (n, p)> D (p). Por lo tanto, con seguridad, sacamos P. Debido a que está presente, D (p) está a la menor distancia de la fuente y ningún otro nodo tiene el poder de hacerlo más bajo. Período.”
Esta suposición falla horriblemente si los pesos de borde son negativos. Un vértice salido de la cola de prioridad puede ser reducido aún más por algún nodo si se permite que los pesos de borde sean negativos. Si D (p) <D (n), pero no podemos decir que
D (p) <D (n) + Edge (n, p), porque Edge (n, p) puede ser negativo ahora. Por lo tanto, no podemos simplemente reventar el vértice, con la menor distancia desde la fuente ahora.
Esta es la forma más fácil de entender la codicia de Dijkstra, sin pasar por las pruebas matemáticas adecuadas, que de todos modos se inspiran en esta teoría.
Su segunda pregunta ¿Qué hay de agregar un peso constante en cada borde, para que todos sean positivos y luego aplicar Dijkstra?
Para responder a esto, todo lo que necesita hacer es sentarse y dibujar un gráfico y ver dónde irá mal. De todos modos, te ahorraré el esfuerzo al negar tu argumento con un simple ejemplo. Deje que solo haya dos caminos desde el nodo S a un nodo T-
- S – (+1) -> A – (+2) -> B – (-1) -> C – (+2) -> D – (+1) -> T.
2. S – (+5) -> P – (+2) -> T.
donde S es la fuente.
Ahora,
D (T) por ruta 1 = 1 + 2-1 + 2 + 1 = 5.
D (T) por la ruta 2 = 5 + 2 = 7.
Por lo tanto, D (T) debe ser 5 a través de la ruta 1 por cualquier algoritmo correcto de ruta más corta.
Ahora aplica tu sugerencia de agregar un peso constante para que todos los bordes no sean negativos. Vamos a agregar 1 a todos los bordes. Nuevos caminos:
- S – (+2) -> A – (+3) -> B – (0) -> C – (+3) -> D – (+2) -> T.
2. S – (+6) -> P – (+3) -> T.
Ahora,
D (T) por ruta 1 = 2 + 3 + 0 + 3 + 2 = 10
D (T) por la ruta 2 = 6 + 3 = 9.
Ahora D (T) = 9 a través de la ruta 2 ?? Incluso si realiza un seguimiento de los bordes y resta el peso constante al final. Has tomado un camino equivocado, amigo mío.
Entonces, ¿cuál fue el defecto?
Agregar un peso constante puede hacer que su gráfico sea positivo, pero ignora el número de bordes en el camino a través del cual asignará distancias desde la fuente. Para una ruta de borde numerada larga, agrega más peso constante y agrega menos a una ruta de borde numerada más corta. ¡Por lo tanto, su parcialidad hacia caminos de borde numerados más cortos es la VELA!