Aula 06 - Introdução à Teoria dos Grafos
Universidade Federal do Rio Grande do Sul
Instituto de Informática
Departamento de Informática Teórica
Estes slides utilizam conteúdo adaptado da bibliografia da disciplina e também de notas de aula e slides prévios dos professores Bruno Grisci, Rodrigo Machado, André Grahl Pereira, Lucas Nunes Alegre, Marcus Ritt e Luciana Buriol.
Definição: Um grafo simples é uma tupla (V,E) onde:
- V é um conjunto não-vazio de vértices.
- E é um conjunto de subconjuntos de V com exatos dois elementos (chamados arestas).
Exemplo:
G_1 = (\{A,B,C,D,E,F\}, \{\{A,B\}, \{B,D\}, \{B,E\}, \{D,E\}, \{E,F\}\})
Nota: Um mesmo grafo pode ser desenhado de muitas formas diferentes.
Contudo, o jeito de desenhá-lo não o modifica, visto que o grafo é uma estrutura algébrica que representa somente conexão entre nodos.
Exemplo:
Pergunta: Se formos construir um grafo simples usando os elementos de V como nodos, qual o número máximo de arestas que podemos inserir?
Resposta: Uma aresta para cada par distinto de nodos, ou seja, o número de possíveis pares de nodos (sem considerar ordem entre eles).
\binom{n}{2} = \frac{n!}{(n-2)! \cdot 2!} = \frac{1}{2}n^2 - \frac{1}{2}n
Pergunta: Quantos grafos distintos podemos construir sobre o conjunto de vértices V?
Resposta: Considerando que todos os nodos sempre estarão presentes, o que diferenciará os grafos será quais arestas estão presentes. Cada aresta pode ou não existir no grafo (duas opções), e temos \binom{n}{2} possíveis arestas.
2 \times 2 \times 2 \times \dots = 2^{\binom{n}{2}} = 2^{\frac{1}{2}n^2 - \frac{1}{2}n}
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| Máximo de arestas | 0 | 1 | 3 | 6 | 10 | 15 | 21 | 28 |
| Grafos simples possíveis | 1 | 2 | 8 | 64 | 1.024 | 32.768 | 2.097.152 | 268.435.456 |
Definição: Relação de incidência de G (sobre E \times V) relaciona arestas com os vértices que elas conectam.
Definição: Matriz de incidência: representação matricial da relação de incidência de um grafo simples.
Exemplo: Matriz de incidência de G_1:
\begin{array}{c|cccccc} & A & B & C & D & E & F \\ \hline \{A,B\} & 1 & 1 & 0 & 0 & 0 & 0 \\ \{B,D\} & 0 & 1 & 0 & 1 & 0 & 0 \\ \{B,E\} & 0 & 1 & 0 & 0 & 1 & 0 \\ \{D,E\} & 0 & 0 & 0 & 1 & 1 & 0 \\ \{E,F\} & 0 & 0 & 0 & 0 & 1 & 1 \end{array}
Definição: Relação de adjacência de vértices de G (sobre V\times V) relaciona vértices conectados por arestas.
Definição: Matriz de adjacência de vértices: representação matricial da relação de adjacência de um grafo simples.
Exemplo: Matriz de adjacência (vértices) de G_1:
\begin{array}{l|cccccc} & A & B & C & D & E & F \\ \hline A & 0 & 1 & 0 & 0 & 0 & 0 \\ B & 1 & 0 & 0 & 1 & 1 & 0 \\ C & 0 & 0 & 0 & 0 & 0 & 0 \\ D & 0 & 1 & 0 & 0 & 1 & 0 \\ E & 0 & 1 & 0 & 1 & 0 & 1 \\ F & 0 & 0 & 0 & 0 & 1 & 0 \\ \end{array}
Definição: Relação de adjacência de arestas de G (sobre E\times E) relaciona arestas que incidem sobre um único vértice comum.
Definição: Matriz de adjacência: representação matricial da relação de adjacência.
Exemplo: Matriz de adjacência (arestas) de G_1:
\footnotesize \begin{array}{c|ccccc} & \{A,B\} & \{B,D\} & \{B,E\} & \{D,E\} & \{E,F\} \\ \hline \{A,B\} & 0 & 1 & 1 & 0 & 0 \\ \{B,D\} & 1 & 0 & 1 & 1 & 0 \\ \{B,E\} & 1 & 1 & 0 & 1 & 1 \\ \{D,E\} & 0 & 1 & 1 & 0 & 1 \\ \{E,F\} & 0 & 0 & 1 & 1 & 0 \end{array}
Uma relação de adjacência R sobre U \times U é:
\forall a \in U, \quad (a,a) \notin R
\forall a,b \in U, \quad (a,b) \in R \Rightarrow (b,a) \in R
Nota: U pode ser V (nodos) ou E (arestas) de um grafo simples.
Grafos simples podem ser armazenados de várias formas em computadores:
str, int).Matriz de adjacência:
\begin{array}{l|cccccc} & A & B & C & D & E & F \\ \hline A & 0 & 1 & 0 & 0 & 0 & 0 \\ B & 1 & 0 & 0 & 1 & 1 & 0 \\ C & 0 & 0 & 0 & 0 & 0 & 0 \\ D & 0 & 1 & 0 & 0 & 1 & 0 \\ E & 0 & 1 & 0 & 1 & 0 & 1 \\ F & 0 & 0 & 0 & 0 & 1 & 0 \\ \end{array}
Pergunta: Qual a complexidade de encontrar o tamanho de uma lista com n elementos?
Resposta: O(n) ou O(1) se o tamanho atual da lista sempre for guardado junto dela.
Seja n = |V| e m = |E|.
| Operação | Matriz | Lista |
|---|---|---|
| Espaço | O(n^2) | O(n + m) |
| Verificar aresta (u,v) | O(1) | O(\deg(u)) |
| Listar vizinhos de v | O(n) | O(\deg(v)) |
| Inserir aresta | O(1) | O(1) |
| Remover aresta | O(1) | O(\deg(u)) |
Matriz de adjacência:
Lista de adjacência:
Nota: A maioria dos grafos do mundo real é esparsa \Rightarrow listas de adjacência são a representação padrão.
Definição: Dois grafos G = (V,E) e G'=(V',E') são iguais sss V = V' e E = E'.
Definição: Um grafo G = (V,E) é subgrafo de G'=(V',E'), escrito G \subseteq G', sss V \subseteq V' e E \subseteq E'. O grafo G' é chamado sobregrafo de G.
Definição: Um grafo G é subgrafo próprio de G', escrito G \subset G', sss G \subseteq G' e G \neq G'.
Exemplo:
Definição: Seja G = (V,E) um grafo e V' \subseteq V um subconjunto de vértices de G. O subgrafo G' induzido por V' é definido por: G' = (V', \{\{a,b\} \mid \{a,b\} \in E \land a \in V' \land b \in V'\})
Intuição: O subgrafo induzido por um conjunto de vértices contém todas (e somente) as arestas do grafo original sobre os vértices selecionados.
Exemplo: Para G com V' = \{A,B,C,E\}:
Definição: O grau de um nodo n, escrito \deg(n), é o número de arestas que incidem sobre n.
Exemplo:
Nota: \deg(n) é definido somente quando o número de arestas incidentes sobre n é finito.
Em um grafo simples, podemos calcular o grau de um nodo somando a coluna correspondente ao nodo na matriz de incidência.
Exemplo:
\begin{array}{c|cccccc} & A & B & C & D & E & F \\ \hline \{A,B\} & 1 & 1 & 0 & 0 & 0 & 0 \\ \{B,D\} & 0 & 1 & 0 & 1 & 0 & 0 \\ \{B,E\} & 0 & 1 & 0 & 0 & 1 & 0 \\ \{D,E\} & 0 & 0 & 0 & 1 & 1 & 0 \\ \{E,F\} & 0 & 0 & 0 & 0 & 1 & 1 \\ \hline \hline \deg & 1 & 3 & 0 & 2 & 3 & 1 \\ \end{array}
Lema: (Handshaking Lemma) Em um grafo simples G=(V,E): \sum_{v \in V} \deg(v) = 2 |E|
Demonstração: Soma total da matriz de incidência por linhas vs. por colunas.
Grau de um único nodo v:
Graus de todos os nodos:
| Operação | Matriz | Lista |
|---|---|---|
| \deg(v) de um nodo | O(n) | O(\deg(v)) |
| \deg(v) de todos | O(n^2) | O(n + m) |
Definição: O grau mínimo de um grafo G, denotado \delta(G), é o menor grau de nodo do grafo.
Definição: O grau máximo de um grafo G, denotado \Delta(G), é o maior grau de nodo do grafo.
Definição: Um grafo é k-regular, ou simplesmente regular, quando \delta(G) = \Delta(G) = k (todos os nodos têm o mesmo grau k).
?