Composants connectés dans un graphique

Aperçu

Dans ce tutoriel, nous allons discuter du concept de composants connectés dans un graphique non orienté.

Nous allons passer en revue quelques exemples simples pour obtenir une compréhension de base, puis nous listerons les propriétés des composants connectés.

Définition de composant connecté

Un composant connecté ou simplement un composant d’un graphe non orienté est un sous-graphe dans lequel chaque paire de nœuds est connectée les uns aux autres via un chemin.

Essayons cependant de le simplifier davantage. Un ensemble de nœuds forme un composant connecté dans un graphe non orienté si un nœud de l’ensemble de nœuds peut atteindre un autre nœud en traversant des arêtes. Le point principal ici est l’accessibilité.

Dans les composants connectés, tous les nœuds sont toujours accessibles les uns des autres.

Quelques exemples

Dans cette section, nous allons discuter de quelques exemples simples. Nous allons essayer de relier les exemples à la définition donnée ci-dessus.

3.1. Un composant connecté

Dans cet exemple, le graphe non orienté donné a un composant connecté:

Nommons ce graphique G1(V, E). Ici V = \{V1, V2, V3, V4, V5, V6\} désigne l’ensemble des sommets et E = \{E1, E2, E3, E4, E5, E6, E7\} désigne l’ensemble des arêtes de G1. Le graphe G1 a un composant connecté, nommons-le C1, qui contient tous les sommets de G1. Vérifions maintenant si l’ensemble C1 tient à la définition ou non.

Selon la définition, les sommets de l’ensemble C1 doivent se rejoindre via un chemin. Nous choisissons deux sommets aléatoires V1 et V6:

  • V6 est accessible à V1 via: E4\rightarrow E7\or\E3\rightarrow E5\rightarrow E7\or\E1\rightarrow E2\rightarrow E6\rightarrow E7
  • V1 est accessible à V6 via: E7\rightarrow E4\or\E7\rightarrow E5\rightarrow E3\or\E7\rightarrow E6\rightarrow E2\rightarrow E1

Les sommets V1 et V6 satisfait la définition, et nous pourrions également faire de même avec d’autres paires de sommets dans C1.

3.2. Plus d’Un composant connecté

Dans cet exemple, le graphe non orienté a trois composants connectés:

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\}.

Voyons maintenant si les composants connectés C1C2 et C3 satisfont ou non à la définition. Nous choisirons au hasard une paire de chaque C1C2, et C3.

Dans l’ensemble C1, choisissons les sommets V4 et V6.

  • V6 est accessible à V4 via: E2\rightarrow E6\rightarrow E7\or\E1\rightarrow E4\rightarrow E7\or\E1\rightarrow E3\rightarrow E5\rightarrow E7
  • V4 est accessible à V6 via: E7\rightarrow E6\rightarrow E2\or\E7\rightarrow E4\rightarrow E1\or\E7\rightarrow E5\rightarrow E3\rightarrow E1

Maintenant, choisissons les sommets V8 et V9 de l’ensemble 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 est accessible à V11E10\rightarrow E11

Ainsi, à partir de ces démonstrations simples, il est clair que C1C2, et C3 suivent la définition du composant connecté.

Propriétés

Comme nous avons déjà discuté de la définition et démontré quelques exemples des composants connectés, c’est le bon moment pour énumérer certaines des propriétés importantes que le composant connecté détient toujours.

Tout d’abord, le jeu de composants connecté est toujours non vide.

De plus, s’il y a plus d’une composante connectée pour un graphe donné, l’union des composantes connectées donnera l’ensemble de tous les sommets du graphe donné.

Par exemple G2:

\

Enfin, les ensembles de composants connectés sont disjoints par paires. Cela signifie que si nous prenons l’intersection entre deux ensembles de composants connectés différents, l’intersection sera égale à un ensemble vide ou à un ensemble nul.

Considérons à nouveau les composants connectés du graphe G2. Dans G2, vérifions cette propriété:

\

Trouver des composants connectés

Étant donné un graphique non orienté, il est important de connaître le nombre de composants connectés pour analyser la structure du graphique – il a de nombreuses applications réelles. Nous pouvons utiliser DFS ou BFS pour cette tâche.

Dans cette section, nous allons discuter d’un algorithme basé sur DFS qui nous donne le nombre de composants connectés pour un graphe non orienté donné :

Rendu par QuickLaTeX.com

La variable Component_Count renvoie le nombre de composants connectés dans le graphique donné.

Nous commençons par initialiser tous les sommets au drapeau non visité. Nous choisissons ensuite n’importe quel sommet aléatoire pour commencer et vérifions si nous avons visité le sommet ou non. Si ce n’est pas le cas, nous appelons la fonction DFS.

Une fois que tous les sommets marqués comme visités, l’algorithme se termine et imprime le nombre de composants connectés.

Dans la fonction DFS, les arguments que nous passons sont un ensemble de sommets contenant tous les sommets du graphe donné et un sommet particulier qui doit appartenir à l’ensemble de sommets.

Tout d’abord, nous marquons le sommet d’entrée particulier comme visité. Ensuite, nous calculons les sommets adjacents du sommet d’entrée particulier donné. Pour chaque sommet adjacent, nous vérifions si nous les avons visités ou non. Sinon, nous appelons la fonction DFS récursivement jusqu’à ce que nous marquions tous les sommets adjacents comme visités.

Le point clé à observer dans l’algorithme est que le nombre de composants connectés est égal au nombre d’appels de fonction DFS indépendants. La variable Component_Count compte le nombre d’appels. Bien sûr, cela n’inclut pas les appels qui sont effectués sous la fonction DFS() de manière récursive.

Exécution du test

Exécutons l’algorithme sur un exemple de graphique:

Étant donné un graphe non orienté G3(V, E), où V=\{V1, V2, V3, V4, V5, V6, V7, V8\}, et E = \{E1, E2, E3, E4, E5\}.

La première étape de l’algorithme consiste à initialiser tous les sommets et à les marquer comme non visités.

Le sommet rouge indique qu’il n’est pas visité. Le sommet vert indique qu’il est visité par l’algorithme:

Nous pouvons choisir n’importe quel sommet de la liste des sommets pour démarrer l’algorithme. Choisissons V1.

L’algorithme vérifie s’il est visité ou non. Dans ce cas, V1 n’est pas visité. Il appelle donc DFS(V, V1).

Dans le DFS(), tout d’abord, il étiquette le sommet V1 comme visité et recherche les sommets adjacents de V1. Tous les sommets adjacents sont également marqués comme visités. Lorsque DFS termine la visite de tous les sommets adjacents de V1, le Component_Count devient 1 et l’état des sommets est mis à jour:

Encore une fois, l’algorithme choisit n’importe quel sommet aléatoire. Choisissons V4 cette fois.

Il vérifie si V4 est déjà visité ou non. Comme il n’est pas visité, l’algorithme appelle DFS(V, V4). Encore une fois, l’algorithme marque le sommet V4 comme visité, et DFS recherche ses sommets adjacents et les marque comme visités. Maintenant, le Component_Count devient 2 et l’état de la liste de sommets est à nouveau mis à jour:

L’algorithme continue et choisit V6, vérifie l’état et appelle DFS(V, V6). Le sommet V6 et ses sommets adjacents sont étiquetés comme visités et le Component_Count passe à 3. L’algorithme met à jour l’état de la liste des sommets :

Enfin, l’algorithme choisit V8, appelle DFS(V,V8), et fait V8 comme visité. Le sommet V8 n’a pas de sommets adjacents, donc DFS retourne et Component_Count augmente à 4. Enfin, l’algorithme met à jour l’état de la liste des sommets :

Lorsque l’algorithme a fini de parcourir tous les sommets du graphe G3, il se termine et renvoie la valeur de Component_Count qui est égale au nombre de composants connectés dans G3 div>. Dans ce cas, les algorithmes trouvent quatre composants connectés dans G3:

Nous avons utilisé quatre couleurs différentes pour illustrer les composants connectés dans G3, à savoir: C1=\{V1, V2, V3\}C2 =\{V4, V5\}C3=\{V6, V7\}C4=\{V8\}.

Analyse de complexité temporelle

L’algorithme que nous venons de voir pour trouver des composants connectés dans un graphique non orienté donné utilise la recherche DFS et compte le nombre d’appels à la fonction DFS. Si le graphe est représenté par la liste d’adjacence, la recherche DFS visite tous les sommets une fois et chaque arête deux fois dans le cas d’un graphe non orienté. La vérification de l’état du sommet prend O(1) temps. Ainsi, au total, notre algorithme prendra \mathbf{O(V+E)} temps.

Dans le cas où le graphe est représenté par la matrice d’adjacence, la recherche DFS prend O(V^2) temps car elle doit parcourir toute la ligne pour évaluer les sommets voisins. La vérification de l’état du sommet prend à nouveau le temps O(1). Nous donnant ainsi un total de \mathbf{O(V^2)} temps.

Conclusion

Dans cet article, nous avons discuté d’une définition simple du composant connecté suivie de quelques exemples simples et faciles à comprendre. En outre, nous avons énuméré certaines propriétés communes mais importantes des composants connectés.

Ensuite, nous avons discuté d’un algorithme basé sur la recherche DFS pour trouver le nombre de composants connectés dans un graphique donné. Nous avons démontré l’algorithme à l’aide d’un exemple de graphique. Enfin, nous avons analysé la complexité temporelle de l’algorithme.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.