Componentes Conectados em um Gráfico

Descrição

neste tutorial, vamos discutir o conceito de componentes conectados em um não-gráfico.

vamos passar por alguns exemplos simples para obter um entendimento básico, e então vamos listar as propriedades dos componentes conectados.

definição de componente conectado

Um componente conectado ou simplesmente componente de um grafo não direcionado é um subgrafo no qual cada par de nós é conectado uns com os outros através de um caminho.

vamos tentar simplificá-lo ainda mais, no entanto. Um conjunto de nós forma um componente conectado em um grafo não direcionado se qualquer nó do conjunto de nós pode alcançar qualquer outro nó atravessando arestas. O ponto principal aqui é a acessibilidade.

em componentes conectados, todos os nós são sempre alcançáveis uns dos outros.

alguns exemplos

nesta secção, discutiremos alguns exemplos simples. Tentaremos relacionar os exemplos com a definição dada acima.

3.1. Um componente conectado

neste exemplo, o grafo não direcionado dado tem um componente conectado:

Vamos nomear este gráfico G1(V, E). Aqui V = \{V1, V2, V3, V4, V5, V6\} denota o conjunto de vértices e E = \{E1, E2, E3, E4, E5, E6, E7\} indica a borda do conjunto de G1. The graph G1 has one connected component, let’s name it C1, which contains all the vertices of G1. Agora vamos verificar se o conjunto C1 mantém a definição ou não.

de acordo com a definição, os vértices no conjunto C1 devem chegar um ao outro através de um caminho. Estamos escolhendo dois aleatório vértices V1 e V6:

  • V6 é acessível para V1 por: E4 \rightarrow E7 \ ou\ E3 \rightarrow E5 \rightarrow E7 \ ou\ E1 \rightarrow E2 \rightarrow E6 \rightarrow E7
  • V1 é acessível para V6 via: E7 \rightarrow E4 \ ou\ E7 \rightarrow E5 \rightarrow E3 \ ou\ E7 \rightarrow E6\rightarrow E2 \rightarrow E1

Os vértices V1 e V6 satisfeito com a definição, e poderíamos fazer o mesmo com outros vértices pares C1 bem.

3, 2. Mais de um componente conectado

neste exemplo, o grafo não direcionado tem três 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\}.

Agora, vamos ver se os componentes conectados C1C2 e C3 satisfaz a definição ou não. Vamos escolher aleatoriamente um par de cada C1C2 e C3 definir.

o C1, vamos escolher os vértices V4 e V6.

  • V6 é acessível av4 via: E2 \rightarrow E6 \rightarrow E7 \ ou\ E1 \rightarrow E4 \rightarrow E7 \ ou\ E1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • V4 é acessível para V6 por: E7 \rightarrow E6 \rightarrow E2 \ ou\ E7 \rightarrow E4 \rightarrow E1 \ ou\ E7 \rightarrow E5 \rightarrow E3 \rightarrow E1

Agora, vamos escolher os vértices V8 e V9 a partir do 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 é acessível para V11E10 \rightarrow E11

Então, a partir destas simples manifestações, é claro que C1C2 e C3 siga o componente conectado definição.

propriedades

como já discutimos a definição e demonstramos alguns exemplos dos componentes conectados, é uma boa hora para listar algumas das propriedades importantes que o componente conectado sempre possui.

Em Primeiro Lugar, O conjunto de componentes ligado é sempre não-vazio.

além disso, se houver mais de um componente conectado para um dado grafo, então a união de componentes conectados dará o conjunto de todos os vértices do grafo dado.

Por exemplo G2:

\

finalmente, os conjuntos de componentes ligados são disjuntos em pares. Isso significa que se tomarmos a intersecção entre dois conjuntos de componentes conectados diferentes, então a intersecção será igual a um conjunto vazio ou um conjunto nulo.

Let’s considered the connected components of graph G2 again. Em , vamos verificar esta propriedade:

\

Localizar Componentes Conectados

uma vez um não-gráfico, é importante saber o número de componentes conectados para analisar a estrutura do gráfico – tem muitas real de vida de aplicações. Podemos usar DFS ou BFS para esta tarefa.

nesta secção, discutiremos um algoritmo baseado em DFS que nos dá o número de componentes conectados para um dado grafo não direcionado:

renderizado por QuickLaTeX.com

a variável Component_Count devolve o número de componentes ligados no gráfico indicado.

começamos inicializando todos os vértices para a bandeira não visitada. Nós então escolhemos qualquer vértice aleatório para iniciar e verificar se nós visitamos o vértice ou não. Se não o fizéssemos, chamaríamos a função DFS.

Uma vez que todos os vértices marcados como visitados, o algoritmo termina e imprime o número dos componentes conectados.

na função DFS, os argumentos que passamos são um conjunto de vértices contendo todos os vértices do grafo dado e um vértice particular que deve pertencer ao conjunto de vértices.

primeiro, marcamos o vértice de entrada particular como visitado. Então nós calculamos os vértices adjacentes do dado vértice de Entrada particular. Para cada vértice adjacente, verificamos se os visitamos ou não. Se não, então chamamos a função DFS recursivamente até marcarmos todos os vértices adjacentes como visitados.

O ponto chave a observar no algoritmo é que o número de componentes conectados é igual ao número de chamadas de funções DFS independentes. A variável Component_Count conta o número de chamadas. Claro, isso não inclui as chamadas que estão sendo feitas sob a função DFS() recursivamente.

Test Run

Let’s run the algorithm on a sample graph:

uma vez um não-gráfico de G3(V, E), onde V = \{V1, V2, V3, V4, V5, V6, V7, V8\} e E = \{E1, E2, E3, E4, E5\}.

o primeiro passo do algoritmo é inicializar todos os vértices e marcá-los como não visitados.

o vértice vermelho indica que não é visitado. O vértice verde denota que é visitado pelo algoritmo:

podemos escolher qualquer vértice da lista de vértices para iniciar o algoritmo. Vamos escolher V1.

o algoritmo verifica se é visitado ou não. Neste caso, V1 não é visitado. Assim, ele chama DFS (V, V1).

Dentro do DFS(), primeiro, ele identifica o vértice V1 como visitado e pesquisas para os vértices adjacentes de V1. Todos os vértices adjacentes também são marcados como visitados. Quando o DFS termina de visitar todos os vértices adjacentes de V1, O Component_Count torna-se 1, e o estado dos vértices é atualizado:

novamente, o algoritmo escolhe qualquer vértice Aleatório. Vamos escolher V4 desta vez.verifica se o V4 já foi visitado ou não. Como não é visitado, o algoritmo chama DFS (V, V4). Novamente o algoritmo marca o vértice V4 marca como visitado, e DFS procura por seus vértices adjacentes e marca-os como visitados. Agora o Component_Count torna-se 2, e o status da lista de vértices é atualizado novamente:

O algoritmo continua e escolhe V6, verifica o status e as chamadas de DFS(V, V6). The vertex V6 and its adjacent vertices are labeled as visited and the Component_Count increases to 3. O algoritmo atualiza o vértice status da lista:

Finalmente, o algoritmo escolhe V8, chamadas de DFS(V, V8), e faz V8 como visitado. The vertex V8 doesn’t have any adjacent vertices so DFS returns and Component_Count increases to 4. Finalmente, o algoritmo atualiza o status do vértice da lista:

Como o algoritmo terminou de percorrer todos os vértices do grafo G3, ele termina e retorna o valor de Component_Count que é igual ao número de componentes conectados em G3. Neste caso, os algoritmos encontram quatro componentes conectados em G3:

foram utilizados quatro cores diferentes para ilustrar os componentes conectados no G3, a saber: C1 = \{V1, V2, V3\}C2 = \{V4, V5\}C3 = \{V6, V7\}C4 = \{V8\}.

Análise de complexidade Temporal

o algoritmo que acabamos de ver para encontrar componentes conectados em um dado grafo não direcionado usa a pesquisa DFS e conta o número de chamadas para a função DFS. Se o grafo é representado pela lista de adjacência, então a pesquisa DFS visita todos os vértices uma vez e cada aresta duas vezes no caso de um grafo não direcionado. A verificação do Estado do vértice leva o(1) tempo. Assim, no total, nosso algoritmo levará \mathbf{o(V+e)} tempo.

No caso, o gráfico é representado pela matriz de adjacências, o DFS pesquisa O(V^2) tempo necessário para atravessar a linha inteira para avaliar o vizinho vértices. A verificação do Estado do vértice leva novamente o(1) tempo. Assim, dando – nos um total de \mathbf{o(v^2)} tempo.

conclusão

neste artigo, discutimos uma definição simples de componente conectado seguido por um par de exemplos simples e fáceis de entender. Além disso, listamos algumas propriedades comuns mas importantes de componentes conectados.

então, discutimos um algoritmo de pesquisa DFS para encontrar o número de componentes conectados em um dado grafo. Nós demonstramos o algoritmo com a ajuda de um grafo de amostra. Por último, analisamos a complexidade temporal do algoritmo.

Deixe uma resposta

O seu endereço de email não será publicado.