“Conocimiento Redes>Routers

¿Cuál es el algoritmo de ruta más corto más rápido para encontrar la ruta más eficiente entre dos puntos?

2014/1/4
El "algoritmo de ruta más rápido más rápido" depende en gran medida de las características específicas de su gráfico:

1. Naturaleza del gráfico:

* Peso vs. no ponderado: ¿Están los bordes de su gráfico asociados con un costo o distancia (ponderado), o se considera que todos los bordes tienen el mismo costo (sin ponderar)?

* Dirigido vs. no dirigido: ¿Son los bordes direccionales (calles unidireccionales) o bidireccionales (calles de dos vías)?

* cíclico vs. acíclico: ¿El gráfico contiene ciclos (rutas que pueden volver al mismo nodo)?

* densidad: ¿Es el gráfico escaso (relativamente pocos bordes) o denso (muchos bordes)?

* Pesos no negativos: ¿Todos los pesos de borde no son negativos? Esto es * crucial * para que muchos algoritmos funcionen correctamente. Si tiene pesos negativos, se necesita un manejo especial.

* Euclidea vs. no euclidiana: ¿Puede usar propiedades geométricas para inferir distancias entre puntos?

2. Objetivo del algoritmo:

* ruta más corta de fuente única: Encontrar la ruta más corta desde un nodo inicial específico a todos los demás nodos en el gráfico.

* ruta más corta de una sola destino: Encontrar la ruta más corta desde todos los nodos a un nodo de destino específico (conceptualmente igual que la fuente única si revertirá la dirección de los bordes).

* Camino más corto de todos los pares: Encontrar la ruta más corta entre * cada * par de nodos en el gráfico.

* heurística permitida? Si está de acuerdo con una aproximación y no se garantiza la ruta * absoluta * más corta, a menudo puede obtener resultados mucho más rápidos con la búsqueda heurística.

Aquí hay un desglose de los algoritmos comunes y sus casos de uso típicos:

Para gráficos no ponderados:

* Búsqueda de amplitud (BFS): Este es el algoritmo * más rápido * y más simple para gráficos no ponderados. Garantiza encontrar la ruta más corta (en términos del * número * de bordes) de un nodo fuente a todos los demás nodos accesibles.

* Complejidad del tiempo: O (v + e) ​​donde v es el número de vértices y E es el número de bordes.

Para gráficos ponderados con pesos no negativos:

* algoritmo de Dijkstra: Uno de los algoritmos más utilizados para encontrar la ruta más corta desde una sola fuente hasta todos los demás nodos en un gráfico ponderado con pesos de borde * no negativos *.

* Complejidad del tiempo:

* O (V^2) (con una simple implementación de matriz o lista para la cola prioritaria)

* O (E + V log v) (usando un montón binario o cola de prioridad)

* O (e + v log* v) (usando montones de fibonacci, menos comunes en la práctica debido a la sobrecarga)

* a* buscar: Una extensión del algoritmo de Dijkstra que usa una función * heurística * para guiar la búsqueda. A menudo es significativamente más rápido que el de Dijkstra cuando tienes buena información heurística sobre la distancia restante al destino.

* Complejidad del tiempo: Depende de la heurística. En el mejor de los casos (heurística perfecta), puede ser muy rápido. En el peor de los casos (mal heurística), puede ser tan lento como el de Dijkstra.

* a* requiere una heurística que sea admisible (nunca sobreestima el costo para alcanzar la meta) y consistente (monotónica).

Para gráficos ponderados con pesos negativos (y sin ciclos negativos):

* Algoritmo de Bellman-Ford: Puede manejar gráficos con pesos de borde negativo, siempre que no haya ciclos negativos (ciclos donde la suma de los pesos de los borde es negativa). Si existe un ciclo negativo, puede detectarlo.

* Complejidad del tiempo: O (v * e)

Para los caminos más cortos de todos los pares:

* Algoritmo Floyd-Warshall: Encuentra la ruta más corta entre * cada * par de vértices en un gráfico dirigido o no dirigido. También puede manejar pesos de borde negativo (pero no ciclos negativos).

* Complejidad del tiempo: O (V^3)

* Algoritmo de Johnson: También puede encontrar caminos más cortos de todos los pares y puede manejar pesas de borde negativo. Generalmente es más rápido que Floyd-Warshall en gráficos * escasos *. Funciona reponiendo los bordes para eliminar los pesos negativos (usando Bellman-Ford) y luego ejecutando el algoritmo de Dijkstra de cada vértice.

* Complejidad del tiempo: O (v^2 log v + ve)

Tabla de resumen

| Algoritmo | Tipo de gráfico | Pesas de borde | Complejidad del tiempo | Notas |

| ------------------ | --------------------------------------------- | ------------ | -------------------------- | --------------------------------------------------------------- |

| BFS | No ponderado | Ninguno | O (v + e) ​​| Más rápido para gráficos no ponderados. |

| Dijkstra's | Ponderado, no negativo | No negativo | O (E + V log v) | Común, funciona bien con la cola prioritaria. |

| A* | Ponderado, no negativo | No negativo | Dependiente de la heurística | Puede ser mucho más rápido que Dijkstra si existe una buena heurística. |

| Bellman-Ford | Ponderado, puede tener bordes negativos | Cualquiera | O (v * e) | Puede detectar ciclos negativos. |

| Floyd-Warshall | Ponderado, puede tener bordes negativos (sin ciclos) | Cualquiera | O (V^3) | Caminos más cortos de todos los pares, buenos para gráficos densos. |

| Johnson's | Ponderado, puede tener bordes negativos (sin ciclos) | Cualquiera | O (v^2 log v + ve) | Caminos más cortos de todos los pares, mejor que Floyd-Warshall para gráficos dispersos |

Consideraciones y optimizaciones prácticas:

* Estructuras de datos: La elección de la estructura de datos para la cola prioritaria en el algoritmo de Dijkstra (por ejemplo, montón binario, montón de fibonacci) puede afectar significativamente el rendimiento, especialmente para gráficos grandes.

* heurística para A*: Elegir una buena heurística para A* es crucial. Una heurística bien elegida puede acelerar dramáticamente la búsqueda. Las heurísticas comunes incluyen la distancia euclidiana (para gráficos incrustados en un plano) y la distancia de Manhattan.

* Representación del gráfico: La forma en que representa su gráfico (por ejemplo, lista de adyacencia, matriz de adyacencia) también puede afectar el rendimiento. Las listas de adyacencia generalmente se prefieren para gráficos dispersos, mientras que las matrices de adyacencia pueden ser más eficientes para gráficos densos.

* Preprocesamiento: Para los gráficos que se consultan repetidamente, puede precomputar cierta información (por ejemplo, puntos de referencia, árboles más cortos) para acelerar las consultas posteriores.

* Redes de carreteras del mundo real: Para las redes de carreteras, los algoritmos especializados como las jerarquías de contracción (CH) y la planificación de ruta personalizable (CRP) ofrecen * tiempos de consulta mucho más rápidos que los algoritmos genéricos como los de Dijkstra, pero requieren un preprocesamiento significativo. Estos a menudo se usan en los sistemas de navegación GPS.

* Bibliotecas: Use bibliotecas optimizadas (por ejemplo, Networkx en Python, Jgrapht en Java) siempre que sea posible. Estas bibliotecas a menudo proporcionan implementaciones altamente optimizadas de los algoritmos de ruta más cortos.

En resumen, para determinar el algoritmo "más rápido" para su situación:

1. caracteriza tu gráfico: ¿Está ponderado, no ponderado, dirigido, escaso, denso, etc.?

2. ¿Necesita rutas más cortas de origen único o de todos los pares?

3. ¿Están presentes los pesos de borde negativo? Si es así, estás limitado a Bellman-Ford (fuente única) o Johnson's/Floyd-Warshall (todos los pares).

4. Si los pesos no negativos, considere Dijkstra o A*. Si es*, ¿puedes idear una buena heurística?

5. Para gráficos no ponderados, BFS es casi siempre la mejor opción.

6. Perfil y punto de referencia: Experimente con diferentes algoritmos y estructuras de datos para ver cuál funciona mejor en su conjunto de datos y hardware específicos.

Elija el algoritmo más simple que satisfaga sus necesidades. No use Floyd-Warshall si solo necesita rutas más cortas de una sola fuente.

Routers
Cuando RIP se usa en el protocolo de enrutamiento, ¿qué métrica enrutar información a través de la red desde la ubicación de la ubicación?
Cómo cambiar el canal Wi-Fi en los enrutadores más populares
Cómo iniciar sesión en un Router Linksys
¿El buscador de ruta AA tiene fama de ser preciso?
¿Qué direcciones se agregan a los encabezados de la capa de transporte durante el proceso de encapsulación y para qué se utilizan?
Cómo conectarse a un router D -link
¿Cómo puedo configurar el protocolo de enrutamiento estático en Cisco 2800 Routers
Cómo restablecer la contraseña de administrador de un Router
Conocimiento de la computadora © http://www.ordenador.online