stringtranslate.com

Recorrido de gráficos

En informática , el recorrido de gráficos (también conocido como búsqueda de gráficos ) se refiere al proceso de visitar (verificar y/o actualizar) cada vértice de un gráfico . Estos recorridos se clasifican según el orden en que se visitan los vértices. El recorrido de árbol es un caso especial de recorrido de gráfico.

Redundancia

A diferencia del recorrido de árbol, el recorrido de gráfico puede requerir que algunos vértices se visiten más de una vez, ya que no necesariamente se sabe antes de realizar la transición a un vértice que ya ha sido explorado. A medida que los gráficos se vuelven más densos , esta redundancia se vuelve más frecuente, lo que hace que aumente el tiempo de cálculo; A medida que los gráficos se vuelven más escasos, ocurre lo contrario.

Por lo tanto, generalmente es necesario recordar qué vértices ya han sido explorados por el algoritmo, de modo que los vértices se vuelvan a visitar con la menor frecuencia posible (o en el peor de los casos, para evitar que el recorrido continúe indefinidamente). Esto se puede lograr asociando cada vértice del gráfico con un estado de "color" o "visita" durante el recorrido, que luego se verifica y actualiza a medida que el algoritmo visita cada vértice. Si el vértice ya ha sido visitado, se ignora y el camino no continúa; de lo contrario, el algoritmo verifica/actualiza el vértice y continúa por su ruta actual.

Varios casos especiales de gráficos implican la visita de otros vértices en su estructura y, por lo tanto, no requieren que la visita se registre explícitamente durante el recorrido. Un ejemplo importante de esto es un árbol: durante un recorrido se puede suponer que todos los vértices "ancestros" del vértice actual (y otros dependiendo del algoritmo) ya han sido visitados. Tanto la búsqueda de gráficos en profundidad como en amplitud son adaptaciones de algoritmos basados ​​en árboles, que se distinguen principalmente por la falta de un vértice "raíz" determinado estructuralmente y la adición de una estructura de datos para registrar el estado de visita del recorrido.

Algoritmos de recorrido de gráficos

Nota. — Si cada vértice de un gráfico debe ser recorrido por un algoritmo basado en árbol (como DFS o BFS), entonces el algoritmo debe llamarse al menos una vez para cada componente conectado del gráfico. Esto se logra fácilmente iterando a través de todos los vértices del gráfico, ejecutando el algoritmo en cada vértice que aún no ha sido visitado cuando se examina.

Búsqueda en profundidad

Una búsqueda en profundidad (DFS) es un algoritmo para atravesar un gráfico finito. DFS visita los vértices secundarios antes de visitar los vértices hermanos; es decir, atraviesa la profundidad de cualquier camino particular antes de explorar su amplitud. Generalmente se utiliza una pila (a menudo la pila de llamadas del programa mediante recursividad ) al implementar el algoritmo.

El algoritmo comienza con un vértice "raíz" elegido; luego realiza una transición iterativa desde el vértice actual a un vértice adyacente no visitado, hasta que ya no puede encontrar un vértice inexplorado al que realizar la transición desde su ubicación actual. Luego, el algoritmo retrocede a lo largo de los vértices visitados anteriormente, hasta que encuentra un vértice conectado a un territorio aún más inexplorado. Luego procederá por el nuevo camino como lo había hecho antes, retrocediendo cuando encuentre callejones sin salida y finalizando sólo cuando el algoritmo haya retrocedido más allá del vértice "raíz" original desde el primer paso.

DFS es la base de muchos algoritmos relacionados con gráficos, incluidos los tipos topológicos y las pruebas de planaridad .

Pseudocódigo

El procedimiento DFS( G , v ) es la etiqueta v explorada para todos los bordes e en G .incidentEdges( v ) si  el borde e no está explorado entonces  wG .adjacentVertex( v , e ) si el vértice w no está explorado entonces etiqueta e como a borde descubierto llamar recursivamente a DFS( G , w ) de lo contrario etiquetar e como borde posterior

Búsqueda en amplitud

Una búsqueda en amplitud (BFS) es otra técnica para atravesar un gráfico finito. BFS visita los vértices hermanos antes de visitar los vértices secundarios y se utiliza una cola en el proceso de búsqueda. Este algoritmo se utiliza a menudo para encontrar el camino más corto de un vértice a otro.

Pseudocódigo

El procedimiento BFS( G , v ) es crear una cola Q poner en cola v en Q marcar v  mientras  Q no está vacío do  wQ .dequeue() si  w es lo que estamos buscando, entonces devolvemos w  para todos los bordes e en G .adjacentEdges ( w ) hacer  xG .adjacentVertex( w , e ) si  x no está marcado , entonces marque x ponga en cola x en Q  return null

Aplicaciones

La búsqueda en amplitud se puede utilizar para resolver muchos problemas en teoría de grafos, por ejemplo:

Exploración de gráficos

El problema de la exploración de gráficos puede verse como una variante del recorrido de gráficos. Es un problema en línea , lo que significa que la información sobre el gráfico sólo se revela durante el tiempo de ejecución del algoritmo. Un modelo común es el siguiente: dado un gráfico conectado G = ( V , E ) con pesos de borde no negativos. El algoritmo comienza en algún vértice y conoce todos los bordes salientes incidentes y los vértices al final de estos bordes, pero no más. Cuando se visita un nuevo vértice, se conocen nuevamente todos los bordes salientes incidentes y los vértices al final. El objetivo es visitar los n vértices y volver al vértice inicial, pero la suma de los pesos del recorrido debe ser lo más pequeña posible. El problema también puede entenderse como una versión específica del problema del viajante , donde el vendedor tiene que descubrir el gráfico sobre la marcha.

Para gráficos generales, el algoritmo más conocido para gráficos dirigidos y no dirigidos es un algoritmo codicioso simple :

Secuencias transversales universales.

Una secuencia transversal universal es una secuencia de instrucciones que comprende un recorrido de gráfico para cualquier gráfico regular con un número determinado de vértices y para cualquier vértice inicial. Aleliunas et al. utilizaron una prueba probabilística. para mostrar que existe una secuencia transversal universal con un número de instrucciones proporcional a O ( n 5 ) para cualquier gráfico regular con n vértices. [6] Los pasos especificados en la secuencia son relativos al nodo actual, no absolutos. Por ejemplo, si el nodo actual es v j y v j tiene d vecinos, entonces la secuencia transversal especificará el siguiente nodo a visitar, v j +1 , como el i ésimo vecino de v j , donde 1 ≤ id .

Ver también

Referencias

  1. ^ Rosenkrantz, Daniel J.; Stearns, Richard E.; Lewis, II, Philip M. (1977). "Un análisis de varias heurísticas para el problema del viajante". Revista SIAM de Computación . 6 (3): 563–581. doi :10.1137/0206041. S2CID  14764079.
  2. ^ Birx, Alejandro; Disser, Yann; Hopp, Alejandro V.; Karousatou, Christina (mayo de 2021). "Un límite inferior mejorado para la exploración de gráficos competitivos". Informática Teórica . 868 : 65–86. arXiv : 2002.10958 . doi :10.1016/j.tcs.2021.04.003. S2CID  211296296.
  3. ^ Miyazaki, Shûichi; Morimoto, Naoyuki; Okabe, Yasuo (2009). "El problema de la exploración de gráficos en línea en gráficos restringidos". Transacciones IEICE sobre Información y Sistemas . E92-D (9): 1620-1627. Código Bib : 2009IEITI..92.1620M. doi :10.1587/transinf.E92.D.1620. hdl : 2433/226939 . S2CID  8355092.
  4. ^ Brandt, Sebastián; Foerster, Klaus-Tycho; Maurer, Jonathan; Wattenhofer, Roger (noviembre de 2020). "Exploración de gráficos en línea en una clase de gráficos restringida: soluciones óptimas para gráficos de renacuajo". Informática Teórica . 839 : 176–185. arXiv : 1903.00581 . doi : 10.1016/j.tcs.2020.06.007. S2CID  67856035.
  5. ^ Foerster, Klaus-Tycho; Wattenhofer, Roger (diciembre de 2016). "Límites competitivos superior e inferior para la exploración de gráficos dirigidos en línea". Informática Teórica . 655 : 15-29. doi : 10.1016/j.tcs.2015.11.017 .
  6. ^ Aleliunas, R.; Karp, R.; Lipton, R.; Lovász, L.; Rackoff, C. (1979). "Paseos aleatorios, secuencias transversales universales y la complejidad de los problemas del laberinto". Vigésimo Simposio Anual sobre Fundamentos de la Informática (SFCS 1979) : 218–223. doi :10.1109/SFCS.1979.34. S2CID  18719861.