¿Cuál es el camino más corto de Dijkstra para el siguiente gráfico?

Cuando aplica Dijkstra de una fuente, obtiene el camino más corto desde esa fuente a todos los demás vértices. También le ofrece un árbol de ruta más corta que contiene todas las rutas más cortas desde el origen hasta todos los demás vértices. En este caso, hay 3 árboles de ruta más corta posibles diferentes dependiendo de la diferencia sutil en la forma en que inserta vértices en la cola de prioridad, aunque los valores de ruta más corta serán indiferentes. Aquí están los 3 árboles de camino más cortos posibles aquí:

  1. AD, DE, AB, BC
  2. AD, DB, BC, DE
  3. AD, DC, DE, AB.

Los tres dan el mismo valor de ruta más corta desde el vértice A a cualquier otro vértice, es decir →

Deje que la distancia de ruta más corta desde A hasta el vértice V sea SP (V).

SP (A) = 0, Ruta A → A. (1,2,3)

SP (B) = 10, Trayectoria A → D → B (2) o A → B (1,3)

SP (C) = 12, Trayectoria A → B → C (1), A → D → B → C (2), A → D → C (3)

SP (D) = 7, Trayectoria A → D (1,2,3)

SP (E) = 10, Trayectoria A → D → E (1,2,3)

Por lo tanto, aquí está toda la variedad de resultados que puede obtener por las sutiles diferencias de virtud en las que implementa Algo de Dijkstra. pero sea cual sea el camino que tome, es notable que los resultados no cambien, es decir, los valores de SP (v) son siempre los mismos. La ruta desde la que llega a estos valores puede variar, lo que lleva a diferentes árboles de ruta más corta como resultado.

Espero que todas sus consultas estén satisfechas.

Desde el estado A, el valor más corto es 7 (en comparación con 10), por lo que la transición ocurre A-> D

ahora estamos en D, puedes ir a B o E ya que el costo es el mismo (3), entonces tomamos B. ahora el costo de A -> B es 10 (a través de D) que es igual a A-> B = 10 (directamente),

entonces el costo A-> B enlace directo se elimina ya que aumentará el costo de A-> D de 10 a 12 (10 + 2, a través de B)

ahora estamos en B, el único enlace es el costo de C es 2. y el costo de A-> C es 12 ahora, tanto a través del nodo B (7 + 3 + 2) como del nodo D (7 + 5) para que podamos eliminar enlace de B a C o de D a C.

ahora estamos en C, el costo de transición de C a E es 6, que es más alto que el costo de

D a E = 3, por lo que podemos eliminar el enlace de C-> E.

ahora estamos en E, hay dos enlaces, primero E a C que cuestan 4 pero no necesitamos ese enlace ya que ya existe un enlace de A a C.

y el otro enlace es A a E y tampoco necesitamos este enlace.

entonces el camino más corto será el siguiente:

A-> D (7)

D-> B (3)

B-> C (2)

D-> E (3)

COSTE TOTAL = 15

Creo que aquí estás hablando del padre del vértice (v).
También supongo que conoces el algoritmo.
Elegimos el vértice (u¹) que tiene un valor mínimo de la cola de prioridad mínima. Entonces, después de la relajación del vértice (v), si la condición es verdadera para la relajación, entonces el vértice (u¹) es el padre del vértice (v).


Relex (u, v, w) {

If (vd

vd = u: d + w (u, v);

v.parent = u;

}

}


Y ahora si hay algún otro vértice (u²) que sea capaz de ser padre del vértice (v). El vértice (u¹) será el padre del vértice (v) porque si ve el código en la función Relájese (u, v , w) la condición

vd

vd es menor que, no menor que igual a.
Entonces, el vértice (u¹) será el padre del vértice (v) en lugar del vértice (u²).

Si tiene alguna pregunta, no dude en preguntar.

La ruta más corta en este caso es A> D> E.

Si encuentra más de un valor más corto en una fila (tercera fila en este caso. Consulte la imagen a continuación). Puedes comenzar con cualquiera de ellos.

He mostrado los dos casos aquí. La respuesta es la misma en ambos casos.

Nota: a veces puede encontrar más de una ruta que tiene el mismo peso más corto. No se preocupe, si comienza con alguna de ellas obtendrá la ruta más corta.

Cualquiera de los nodos está bien si los nodos tienen valores iguales, aunque la convención general para romper los lazos es el orden alfabético: esto produce AD, DB, DE, BC como el árbol de rutas más cortas a partir de A.

More Interesting

No puedo entender algoritmos y estructuras de datos. ¿Cómo puedo aprender algoritmos y estructuras de datos de una manera simple?

¿Necesito aprender algún lenguaje de programación antes de intentar estructuras de datos?

¿Cómo diferenciar entre algoritmos de clasificación internos y externos en términos simples? ¿Cómo se lo explica a los principiantes?

¿Cómo funciona el PageRank?

¿De dónde aprendo la estructura de datos?

¿Cuál es la diferencia entre árboles binarios completos y completos?

¿Existe un mapeo limpio de los ordenamientos de N objetos en la recta numérica?

¿Qué algoritmos de clasificación tienen la mejor complejidad de tiempo de caso?

¿El hashing criptográfico es una buena manera de identificar imágenes de forma exclusiva?

¿Cuál es tu recurso favorito para aprender sobre programación competitiva?

Si f (n) es O (g (n)) yf (n) es O (h (n)), entonces cuál de las siguientes afirmaciones debe ser verdadera: f (n) + g (n) es O (h (n)), g (n) + h (n) es O (f (n)), f (n) es O (g (n) + h (n)), o ninguno de los anteriores?

¿El uso de algoritmos en una clave de contraseña típica de 256 bits que siempre está cambiando pero que aún se muestra al usuario (como en un teléfono, por ejemplo) para crear código requeriría supercomputadoras más rápidas disponibles para superarlo?

¿Por qué el número total de respuestas en mi cuenta de Quora disminuyó repentinamente en 10?

¿Cuál era el objetivo de Pedro Domingos al escribir 'El algoritmo maestro'?

¿Cómo es inventar tu propio algoritmo?