Componentes conectados en un gráfico

Descripción general

En este tutorial, discutiremos el concepto de componentes conectados en un gráfico no dirigido.

Repasaremos algunos ejemplos simples para obtener una comprensión básica, y luego enumeraremos las propiedades de los componentes conectados.

Definición de componente conectado

Un componente conectado o simplemente un componente de un gráfico no dirigido es un subgrafo en el que cada par de nodos está conectado entre sí a través de una ruta.

Intentemos simplificarlo aún más. Un conjunto de nodos forma un componente conectado en un gráfico no dirigido si cualquier nodo del conjunto de nodos puede llegar a cualquier otro nodo atravesando bordes. El punto principal aquí es la accesibilidad.

En los componentes conectados, todos los nodos son siempre accesibles entre sí.

Algunos ejemplos

En esta sección, discutiremos un par de ejemplos simples. Intentaremos relacionar los ejemplos con la definición dada anteriormente.

3.1. Un componente conectado

En este ejemplo, el gráfico no dirigido dado tiene un componente conectado:

Vamos a nombrar este gráfico G1(V, E). Aquí V = \{V1, V2, V3, V4, V5, V6\} denota el conjunto de vértices y E = \{E1, E2, E3, E4, E5, E6, E7\} denota el conjunto de aristas de G1. El gráfico G1 tiene un componente conectado, vamos a nombre C1, que contiene todos los vértices de G1. Ahora vamos a comprobar si el conjunto C1 se ajusta a la definición o no.

De acuerdo con la definición, los vértices en el conjunto C1 deben llegar unos a otros a través de una ruta de acceso. Estamos eligiendo al azar dos vértices V1 y V6:

  • V6 es accesible a V1 a través de: E4 \rightarrow E7 \ o\ E3 \rightarrow E5 \rightarrow E7 \ o\ E1 \rightarrow E2 \rightarrow E6 \rightarrow E7
  • V1 es accesible a V6 a través de: E7 \rightarrow E4 \ o\ E7 \rightarrow E5 \rightarrow E3 \ o\ E7 \rightarrow E6\rightarrow E2 \rightarrow E1

Los vértices V1 y V6 satisfecho la definición, y podríamos hacer lo mismo con otros pares de vértices en el C1 así.

3.2. Más de un componente conectado

En este ejemplo, el gráfico no dirigido tiene tres componentes conectados:

Let’s name this graph as G2(V, E), where V = \{V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12\}, and E = \{E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11\}. The graph G2 has 3 connected components: C1 = \{V1, V2, V3, V4, V5, V6\}C2 = \{V7, V8, V9\} and C3 = \{V10, V11, V12\}.

Ahora, vamos a ver si los componentes conectados C1C2 y C3 satisfacen la definición o no. Vamos a elegir aleatoriamente un par de cada C1C2 y C3 conjunto.

Desde el C1, vamos a elegir los vértices V4 y V6.

  • V6 es accesible a V4 a través de: E2 \rightarrow E6 \rightarrow E7 \ o\ E1 \rightarrow E4 \rightarrow E7 \ o\ E1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • V4 es accesible a V6 a través de: E7 \rightarrow E6 \rightarrow E2 \ o\ E7 \rightarrow E4 \rightarrow E1 \ o\ E7 \rightarrow E5 \rightarrow E3 \rightarrow E1

Ahora vamos a elegir los vértices V8 y V9 desde el C2.

  • V9 is reachable to V8E9 \rightarrow E8
  • V8 is reachable to V9E8 \rightarrow E9

Finally, let’s pick the vertices V11 and V12 from the set C3.

  • V11 is reachable to V12E11 \rightarrow E10
  • V12 es accesible a V11E10 \rightarrow E11

Así que a partir de estos simples manifestaciones, está claro que el C1C2 y C3 siga el componente conectado definición.

Propiedades

Como ya hemos discutido la definición y demostrado un par de ejemplos de los componentes conectados, es un buen momento para enumerar algunas de las propiedades importantes que el componente conectado siempre tiene.

En primer lugar, el conjunto de componentes conectados siempre no está vacío.

Además, si hay más de un componente conectado para un gráfico dado, la unión de componentes conectados dará el conjunto de todos los vértices del gráfico dado.

Por ejemplo G2:

\

Finalmente, los conjuntos de componentes conectados se disocian en parejas. Eso significa que si tomamos la intersección entre dos conjuntos de componentes conectados diferentes, la intersección será igual a un conjunto vacío o a un conjunto nulo.

Consideremos de nuevo los componentes conectados de graph G2. En G2, vamos a comprobar esta propiedad:

\

Encontrar los Componentes Conectados

Dado un grafo no dirigido, es importante averiguar el número de componentes conectados a analizar la estructura de la gráfica – tiene muchas aplicaciones en la vida real. Podemos usar DFS o BFS para esta tarea.

En esta sección, discutiremos un algoritmo basado en DFS que nos da el número de componentes conectados para un gráfico no dirigido dado:

Renderizado por QuickLaTeX.com

La variable Component_Count devuelve el número de componentes conectados en el gráfico dado.

Comenzamos inicializando todos los vértices a la bandera no visitada. Luego elegimos cualquier vértice aleatorio para comenzar y verificamos si hemos visitado el vértice o no. Si no lo hicimos, llamamos a la función DFS.

Una vez que todos los vértices marcados como visitados, el algoritmo termina e imprime el número de los componentes conectados.

En la función DFS, los argumentos que pasamos son un conjunto de vértices que contiene todos los vértices del gráfico dado y un vértice en particular que debe pertenecer al conjunto de vértices.

Primero, marcamos el vértice de entrada particular como visitado. Luego calculamos los vértices adyacentes del vértice de entrada particular dado. Para cada vértice adyacente, comprobamos si los visitamos o no. Si no, entonces llamamos a la función DFS recursivamente hasta que marcamos todos los vértices adyacentes como visitados.

El punto clave a observar en el algoritmo es que el número de componentes conectados es igual al número de llamadas a funciones DFS independientes. La variable Component_Count cuenta el número de llamadas. Por supuesto, esto no incluye las llamadas que se están haciendo bajo la función DFS() recursivamente.

Ejecución de prueba

Ejecutemos el algoritmo en un gráfico de muestra:

Dado un grafo no dirigido G3(V, E), donde V = \{V1, V2, V3, V4, V5, V6, V7, V8\} y E = \{E1, E2, E3, E4, E5\}.

El primer paso del algoritmo es inicializar todos los vértices y marcarlos como no visitados.

El vértice rojo indica que no se visita. El vértice verde indica que es visitado por el algoritmo:

Podemos elegir cualquier vértice de la lista de vértices para iniciar el algoritmo. Vamos a elegir V1.

El algoritmo comprueba si se visita o no. En este caso, V1 no se visita. Por lo tanto, llama a DFS(V, V1).

Dentro de DFS (), primero, etiqueta el vértice V1 como visitado y busca los vértices adyacentes de V1. Todos los vértices adyacentes también están marcados como visitados. Cuando DFS termina de visitar todos los vértices adyacentes de V1, el Component_Count se convierte en 1 y se actualiza el estado de los vértices:

De nuevo, el algoritmo selecciona cualquier vértice aleatorio. Vamos a elegir V4 esta vez.

Comprueba si V4 ya está visitado o no. Como no se visita, el algoritmo llama a DFS (V, V4). De nuevo, el algoritmo marca el vértice V4 como visitado, y DFS busca sus vértices adyacentes y los marca como visitados. Ahora el Component_Count se convierte en 2, y el estado de la lista de vértices se actualiza de nuevo:

El algoritmo continúa y elige V6, comprueba el estado, y las llamadas DFS(V, V6). El vértice V6 y sus vértices adyacentes se etiquetan como visitados y el Component_Count aumenta a 3. El algoritmo actualiza el estado de la lista de vértices:

Finalmente, el algoritmo elige V8, llama a DFS(V, V8), y hace que V8 como visitado. El vértice V8 no tiene vértices adyacentes, por lo que DFS devuelve y Component_Count aumenta a 4. Finalmente, el algoritmo actualiza el estado de la lista de vértices:

A medida que el algoritmo termina de atravesar todos los vértices del gráfico G3, termina y devuelve el valor de Component_Count que es igual al número de componentes conectados en div>. En este caso, los algoritmos encuentran cuatro componentes conectados en G3:

Hemos utilizado cuatro colores diferentes para ilustrar los componentes conectados en el G3, a saber: C1 = \{V1, V2, V3\}C2 = \{V4, V5\}C3 = \{V6, V7\}C4 = \{V8\}.

Análisis de complejidad temporal

El algoritmo que acabamos de ver para encontrar componentes conectados en un gráfico no dirigido utiliza la búsqueda DFS y cuenta el número de llamadas a la función DFS. Si el gráfico está representado por la lista de adyacencia, la búsqueda DFS visita todos los vértices una vez y cada arista dos veces en el caso de un gráfico no dirigido. La comprobación del estado del vértice toma O (1) tiempo. Por lo tanto, en total, nuestro algoritmo tomará \mathbf{O(V+E)} tiempo.

En caso de que el gráfico esté representado por la matriz de adyacencia, la búsqueda DFS toma O(V^2) tiempo, ya que necesita recorrer toda la fila para evaluar los vértices vecinos. La comprobación del estado del vértice de nuevo toma O(1) tiempo. Por lo tanto, nos da un total de \mathbf{O(V^2)} tiempo.

Conclusión

En este artículo, discutimos una definición simple de componente conectado seguida de un par de ejemplos simples y fáciles de entender. Además, enumeramos algunas propiedades comunes pero importantes de los componentes conectados.

Luego, discutimos un algoritmo basado en búsquedas DFS para encontrar el número de componentes conectados en un gráfico dado. Demostramos el algoritmo con la ayuda de un gráfico de muestra. Por último, analizamos la complejidad temporal del algoritmo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.