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 . Aqui denota o conjunto de vértices e indica a borda do conjunto de . The graph has one connected component, let’s name it , which contains all the vertices of . Agora vamos verificar se o conjunto mantém a definição ou não.
de acordo com a definição, os vértices no conjunto devem chegar um ao outro através de um caminho. Estamos escolhendo dois aleatório vértices e :
- é acessível para por:
- é acessível para via:
Os vértices e satisfeito com a definição, e poderíamos fazer o mesmo com outros vértices pares 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 , where , and . The graph has 3 connected components: and .
Agora, vamos ver se os componentes conectados e satisfaz a definição ou não. Vamos escolher aleatoriamente um par de cada e definir.
o , vamos escolher os vértices e .
- é acessível a via:
- é acessível para por:
Agora, vamos escolher os vértices e a partir do .
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
- é acessível para
Então, a partir destas simples manifestações, é claro que e 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 :
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 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:
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 , onde e .
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 .
o algoritmo verifica se é visitado ou não. Neste caso, não é visitado. Assim, ele chama .
Dentro do DFS(), primeiro, ele identifica o vértice como visitado e pesquisas para os vértices adjacentes de . Todos os vértices adjacentes também são marcados como visitados. Quando o DFS termina de visitar todos os vértices adjacentes de , O Component_Count torna-se 1, e o estado dos vértices é atualizado:
novamente, o algoritmo escolhe qualquer vértice Aleatório. Vamos escolher desta vez.verifica se o já foi visitado ou não. Como não é visitado, o algoritmo chama . Novamente o algoritmo marca o vértice 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 , verifica o status e as chamadas de . The vertex 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 , chamadas de , e faz como visitado. The vertex 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 , ele termina e retorna o valor de Component_Count que é igual ao número de componentes conectados em . Neste caso, os algoritmos encontram quatro componentes conectados em :
foram utilizados quatro cores diferentes para ilustrar os componentes conectados no , a saber: .
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 tempo. Assim, no total, nosso algoritmo levará tempo.
No caso, o gráfico é representado pela matriz de adjacências, o DFS pesquisa tempo necessário para atravessar a linha inteira para avaliar o vizinho vértices. A verificação do Estado do vértice leva novamente tempo. Assim, dando – nos um total de 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.