stringtranslate.com

Componente biconectado

Un gráfico de ejemplo con componentes biconectados marcados
Cada color corresponde a un componente biconectado. Los vértices multicolores son vértices cortados y, por tanto, pertenecen a múltiples componentes biconectados.

En teoría de grafos , un componente biconectado (a veces conocido como componente biconexo ) es un subgrafo biconectado máximo . Cualquier gráfico conectado se descompone en un árbol de componentes biconectados llamado árbol de corte en bloque del gráfico. Los bloques están unidos entre sí en vértices compartidos llamados vértices de corte o vértices de separación o puntos de articulación . Específicamente, un vértice cortado es cualquier vértice cuya eliminación aumenta el número de componentes conectados . [1]

Algoritmos

Búsqueda en profundidad en tiempo lineal

El algoritmo secuencial clásico para calcular componentes biconectados en un grafo conexo no dirigido se debe a John Hopcroft y Robert Tarjan (1973). [2] Se ejecuta en tiempo lineal y se basa en la búsqueda en profundidad . Este algoritmo también se describe como el Problema 22-2 de Introducción a los algoritmos (tanto la segunda como la tercera edición).

La idea es realizar una búsqueda en profundidad manteniendo la siguiente información:

  1. la profundidad de cada vértice en el árbol de búsqueda en profundidad (una vez que se visita), y
  2. para cada vértice v , la profundidad más baja de vecinos de todos los descendientes de v (incluido el propio v ) en el árbol de búsqueda en profundidad, llamado punto bajo .

La profundidad es estándar para mantener durante una búsqueda en profundidad. El punto bajo de v se puede calcular después de visitar todos los descendientes de v (es decir, justo antes de que v salga de la pila de búsqueda en profundidad ) como el mínimo de la profundidad de v , la profundidad de todos los vecinos de v (aparte de el padre de v en el árbol de búsqueda en profundidad) y el punto bajo de todos los hijos de v en el árbol de búsqueda en profundidad.

El hecho clave es que un vértice v no raíz es un vértice cortado (o punto de articulación) que separa dos componentes biconectados si y solo si hay un hijo y de v tal que punto bajo ( y ) ≥ profundidad ( v ) . Esta propiedad se puede probar una vez que la búsqueda en profundidad haya regresado de cada hijo de v (es decir, justo antes de que v salga de la pila de búsqueda en profundidad), y si es verdadero , v separa el gráfico en diferentes componentes biconectados. Esto se puede representar calculando un componente biconectado de cada uno de esos y (un componente que contiene y contendrá el subárbol de y , más v ), y luego borrando el subárbol de y del árbol.

El vértice raíz debe manejarse por separado: es un vértice cortado si y sólo si tiene al menos dos hijos en el árbol DFS. Por lo tanto, basta con construir un componente a partir de cada subárbol hijo de la raíz (incluida la raíz).

Pseudocódigo

GetArticulationPoints(i, d) visitado[i] := verdadero profundidad[i] := d bajo[i] := d niñoCuenta := 0 esArticulación: = falso para cada ni en adj[i] hazlo  si  no lo visitaste[ni] entonces padre[ni] := yo Obtener puntos de articulación (ni, d + 1) niñoContar := niñoContar + 1 si bajo [ni] ≥ profundidad [i] entonces esArticulación: = verdadero bajo[i] := Min (bajo[i], bajo[ni]) de lo contrario, si ni ≠ padre [i] entonces bajo[i] := Min (bajo[i], profundidad[ni]) si (padre[i] ≠ nulo  y isArticulación) o (padre[i] = nulo  y childCount > 1) entonces Salida i como punto de articulación

Tenga en cuenta que los términos hijo y padre denotan las relaciones en el árbol DFS, no el gráfico original.

Una demostración del algoritmo de Tarjan para encontrar vértices cortados. D denota profundidad y L denota punto bajo.


Otros algoritmos

Una alternativa simple al algoritmo anterior utiliza descomposiciones en cadena , que son descomposiciones de oreja especiales que dependen de los árboles DFS . [3] Las descomposiciones en cadena se pueden calcular en tiempo lineal mediante esta regla transversal . Sea C una descomposición en cadena de G . Entonces G está conectado por 2 vértices si y solo si G tiene un grado mínimo 2 y C 1 es el único ciclo en C . Esto da inmediatamente una prueba de conectividad 2 en tiempo lineal y se puede extender para enumerar todos los vértices cortados de G en tiempo lineal usando la siguiente declaración: Un vértice v en un gráfico conectado G (con grado mínimo 2) es un vértice cortado si y sólo si v incide en un puente o v es el primer vértice de un ciclo en CC 1 . La lista de vértices cortados se puede utilizar para crear el árbol cortado en bloques de G en tiempo lineal.

En la versión en línea del problema, los vértices y aristas se agregan (pero no se eliminan) dinámicamente, y una estructura de datos debe mantener los componentes biconectados. Jeffery Westbrook y Robert Tarjan (1992) [4] desarrollaron una estructura de datos eficiente para este problema basada en estructuras de datos de conjuntos disjuntos . Específicamente, procesa n adiciones de vértices y m adiciones de bordes en O ( m α ( m , n )) tiempo total, donde α es la función de Ackermann inversa . Se ha demostrado que este límite de tiempo es óptimo.

Uzi Vishkin y Robert Tarjan (1985) [5] diseñaron un algoritmo paralelo en CRCW PRAM que se ejecuta en tiempo O (log n ) con n + m procesadores.

Estructuras relacionadas

Relación de equivalencia

Se puede definir una relación binaria en los bordes de un gráfico arbitrario no dirigido, según la cual dos bordes e y f están relacionados si y solo si e = f o el gráfico contiene un ciclo simple a través de e y f . Cada arista está relacionada consigo misma, y ​​una arista e está relacionada con otra arista f si y sólo si f está relacionada de la misma manera con e . De manera menos obvia, esta es una relación transitiva : si existe un ciclo simple que contiene aristas e y f , y otro ciclo simple que contiene aristas f y g , entonces se pueden combinar estos dos ciclos para encontrar un ciclo simple a través de e y g . Por lo tanto, esta es una relación de equivalencia y se puede usar para dividir las aristas en clases de equivalencia, subconjuntos de aristas con la propiedad de que dos aristas están relacionadas entre sí si y solo si pertenecen a la misma clase de equivalencia. Los subgrafos formados por las aristas en cada clase de equivalencia son los componentes biconectados del gráfico dado. Así, los componentes biconectados dividen los bordes del gráfico; sin embargo, pueden compartir vértices entre sí. [6]

Gráfico de bloques

El gráfico de bloques de un gráfico dado G es el gráfico de intersección de sus bloques. Por tanto, tiene un vértice para cada bloque de G y una arista entre dos vértices siempre que los dos bloques correspondientes compartan un vértice. Un gráfico H es el gráfico de bloques de otro gráfico G exactamente cuando todos los bloques de H son subgrafos completos. Los gráficos H con esta propiedad se conocen como gráficos de bloques . [7]

Árbol cortado en bloque

Un punto de corte , vértice de corte o punto de articulación de un gráfico G es un vértice compartido por dos o más bloques. La estructura de los bloques y puntos de corte de un gráfico conectado se puede describir mediante un árbol llamado árbol de corte de bloques o árbol BC . Este árbol tiene un vértice para cada bloque y para cada punto de articulación del gráfico dado. Hay un borde en el árbol de corte de bloques para cada par de bloques y un punto de articulación que pertenece a ese bloque. [8]

Un gráfico y su árbol cortado en bloques.
Bloques :
b 1 = [1,2]
b 2 = [2,3,4]
b 3 = [2,5,6,7]
b 4 = [7,8,9,10,11]
b 5 = [ 8,12,13,14,15]
b 6 = [10,16]
b 7 = [10,17,18]
Puntos de corte:
c 1 = 2
c 2 = 7
c 3 = 8
c 4 = 10

Ver también

Notas

  1. ^ AL-TAIE, MOHAMMED ZUHAIR. KADRY, SEIFEDINE (2019). "3. Teoría de grafos". PYTHON PARA ANÁLISIS DE GRÁFICOS Y REDES . SALTADOR. ISBN 3-319-85037-7. OCLC  1047552679. Un vértice de corte es un vértice que, si se elimina, aumenta la cantidad de componentes de la red.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  2. ^ Hopcroft, J.; Tarjan, R. (1973). "Algoritmo 447: algoritmos eficientes para la manipulación de gráficos". Comunicaciones de la ACM . 16 (6): 372–378. doi : 10.1145/362248.362272 .
  3. ^ Schmidt, Jens M. (2013), "Una prueba simple sobre conectividad de 2 vértices y 2 bordes", Cartas de procesamiento de información , 113 (7): 241–244, arXiv : 1209.0700 , doi : 10.1016/j. ipl.2013.01.016.
  4. ^ Westbrook, J.; Tarjan, RE (1992). "Mantenimiento en línea de componentes biconectados y conectados por puente". Algorítmica . 7 (1–6): 433–464. doi :10.1007/BF01758773.
  5. ^ Tarjan, R.; Vishkin, U. (1985). "Un algoritmo de biconectividad paralelo eficiente". SIAM J. Computación. 14 (4): 862–874. CiteSeerX 10.1.1.465.8898 . doi :10.1137/0214061.  
  6. ^ Tarjan y Vishkin (1985) atribuyen la definición de esta relación de equivalencia a Harary (1969); sin embargo, Harary no parece describirlo en términos explícitos.
  7. ^ Harary, Frank (1969), Teoría de grafos , Addison-Wesley, pág. 29.
  8. ^ Harary (1969), pág. 36.

Referencias

enlaces externos