GRAFOS E ALGORITMOS TEORIA DE GRAFOS 1a. PARTE Prof. Ronaldo R. Goldschmidt rribeiro@univercidade.br ronaldo_goldschmidt@yahoo.com.br
ROTEIRO 1. INTRODUÇÃO E MOTIVAÇÃO 2. FUNDAMENTOS 3. CONECTIVIDADE 4. GRAFOS EULERIANOS 5. GRAFOS HAMILTONIANOS 6. PLANARIDADE 7. DIGRAFOS
ROTEIRO 1. INTRODUÇÃO E MOTIVAÇÃO 2. FUNDAMENTOS 3. CONECTIVIDADE 4. GRAFOS EULERIANOS 5. GRAFOS HAMILTONIANOS 6. PLANARIDADE 7. DIGRAFOS
1. INTRODUÇÃO E MOTIVAÇÃO Um grafo é um conjunto de pontos (vértices) e um conjunto de linhas (arestas) que ligam estes pontos. e 1 v 2 v 1 e 2 e 7 e 8 Exemplo: e 5 e 4 e 3 e 6
1. INTRODUÇÃO E MOTIVAÇÃO São muitas as aplicações de grafos em problemas práticos: Definição de Rotas
1. INTRODUÇÃO E MOTIVAÇÃO São muitas as aplicações de grafos em problemas práticos: Modelagem de Circuitos Lógicos
1. INTRODUÇÃO E MOTIVAÇÃO São muitas as aplicações de grafos em problemas práticos: Modelagem de Sistemas
1. INTRODUÇÃO E MOTIVAÇÃO São muitas as aplicações de grafos em problemas práticos: Planejamento e Gerenciamento de Projetos Tarefa 1 Tarefa 2 Tarefa 3 Tarefa 4
1. INTRODUÇÃO E MOTIVAÇÃO São muitas as aplicações de grafos em problemas práticos: Espeificação de Máquinas de Estados
ROTEIRO 1. INTRODUÇÃO E MOTIVAÇÃO 2. FUNDAMENTOS 3. CONECTIVIDADE 4. GRAFOS EULERIANOS 5. GRAFOS HAMILTONIANOS 6. PLANARIDADE 7. DIGRAFOS
Def: Um grafo G é uma tripla (V(G), E(G), G ), onde V(G) conjunto não vazio de vértices, E(G) conjunto de arestas e G função de incidência que associa a cada aresta de G um par não ordenado de vértices de G. Exemplo: v1 e 1 e5 e4 v2 e2 e 7 e8 e3 v4 e6 V(G) = {v 1, v 2,,, } E(G) = {e 1, e 2, e 3, e 4, e 5, e 6, e 7, e 8 }
Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 V(G) = {v 1, v 2,,, } E(G) = {e 1, e 2, e 3, e 4, e 5, e 6, e 7, e 8 } G (e 1 ) = v 1 v 2 ; G (e 2 ) = v 2 ; G (e 3 ) = ; G (e 4 ) = ; G (e 5 ) = v 2 ; G (e 6 ) = ; G (e 7 ) = v 2 ; G (e 8 ) = v 2.
Def: Um grafo G é planar se admite uma representação plana (não há cruzamento de arestas). Exemplo: Representação não planar, mas o grafo é planar.
Def: Uma aresta é incidente aos dois vértices em seus extremos. Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 A aresta e 1 é incidente em v 1 e v 2
Def: Dois vértices incidentes a uma aresta comum são chamados de vértices adjacentes. Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 Os vértices v 1 e v 2 são adjacentes pois possuem uma aresta comum: e 1
Def: Duas arestas incidentes a um vértice comum são chamadas de arestas adjacentes. Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 As arestas e 1, e 5, e 2, e 7, e 8 são adjacentes pois possuem um vértice comum: v 2
Def: Uma aresta que liga um vértice a ele mesmo é chamada de loop. Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 A aresta e 3 é um loop pois liga a ele mesmo.
Def: Duas arestas com vértices incidente idênticos são chamadas de arestas paralelas. Exemplo: v 1 e 1 e 5 e 4 v2 e 2 e 7 e8 e 3 v4 e6 As arestas e 7 e e 8 são arestas paralelas pois ambas incidem em v 2 e.
Def: Um grafo que não possui loops e nem arestas paralelas é chamado de grafo simples. v e 1 2 Exemplo: v 1 e 2 e e 7 5 e 4 v4 e6
Representação de Grafos Matriz de Incidência Seja G um grafo com n vértices e m arestas. I n m é a matriz de incidência de G tal que cada elemento (i,j) de I denota o número de vezes que v i e e j são incidentes. e 1 e v 2 1 v 2 e 5 e 7 e 3 v e 3 4 v 1 v 2 e 1 e 2 e 3 e 4 e 5 e 6 e 7 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 2 0 e 6
Representação de Grafos Matriz de Adjacência Seja G um grafo com n vértices e m arestas. A n n é a matriz de adjacência de G tal que cada elemento (i,j) de A denota o número de arestas que unem v i e v j. e 1 e v 2 1 v 2 e 5 e 7 e 3 v e 3 4 v 1 v 2 v 1 v 2 01 21 1 21 01 1 1 1 0 1 0 1 1 0 1 1 e 6
Def: Um grafo é completo se para cada par de vértices, existir somente uma aresta que os una. Notação: K n Exemplo de grafo completo: K 4
Def: Um grafo é chamado bipartido (bipartite) se o seu conjunto de vértices puder ser particionado em dois subconjuntos X e Y, tal que cada aresta tenha uma extremidade em X e a outra em Y. Exemplo de grafo bipartido:
Def: Um grafo é chamado bipartido completo se ele for bipartido e se todos os vértices de X estiverem ligados a todos os vértices de Y (por meio de uma única aresta para cada par de vértices). Notação: K n,m Exemplo de grafo bipartido completo: K 2,2
Verifique se os grafos abaixo são: a) bipartidos; b) completos Bipartido Completo: K 1,1 Bipartido não completo Bipartido Completo: K 2,3
Verifique se os grafos abaixo são: a) bipartidos; b) completos a g f a c e f g b d c e b d Bipartido Completo: K 2,5
Verifique se os grafos abaixo são: a) bipartidos; b) completos a g f b d c e Não é Bipartido
Vértice Nó Nodo Outras Definições: Aresta Arco Conexão Grafo Rotulado:
Def: Dois grafos G e H são idênticos (G=H) se V(G)=V(H) e E(G)=E(H) a G: H: a f g c e f g b d b d c e G e H são idênticos, embora possuam representações diferentes
Def: Dois grafos G e H são isomorfos (G H) se existirem duas funções f: V(G) V(H) e g: E(G) E(H), ambas bijetoras tais que: se a aresta uv E(G), então f(u)f(v) E(H) para todo par de vértices de G e H. G: H: v 2 b c d e v 1 a G e H não são idênticos (vértices diferentes). Eles são isomorfos?
G: v 2 2. FUNDAMENTOS H: b c d e v 1 a f( )=c f(v 2 )=d f( )=a f(v 1 )=e f( )=b g( )=f( )f( )=cc g(v 2 )=f(v 2 )f( )=da g(v 2 )=f(v 2 )f( )=dc g( )=f( )f( )=cb g( )=f( )f( )=ba g(v 1 v 2 )=f(v 1 )f(v 2 )=ed g(v 2 )=f(v 2 )f( )=db G e H são distintos (vértices diferentes), mas são isomorfos.
Def: Um grafo H é um subgrafo de G se V(H) V(G) e E(H) E(G). H é um subgrafo próprio de G se H for um subgrafo de G e H G. G: v 2 H: v 2 v 1 v 1 G e H são idênticos. H é subgrafo de G e G é subgrafo de H.
Def: Um grafo H é um subgrafo de G se V(H) V(G) e E(H) E(G). H é um subgrafo próprio de G se H for um subgrafo de G e H G. G: v 2 H: v 2 v 1 v 1 H é subgrafo próprio de G.
Def: Um grafo H é um subgrafo de G se V(H) V(G) e E(H) E(G). H é um subgrafo próprio de G se H for um subgrafo de G e H G. G: v 2 H: v 2 v 1 v 1 H não é subgrafo de G.
Def: Seja H um subgrafo de G. Se V(H) = V(G) então H é chamado subgrafo gerador de G. G: v 2 H: v 2 v 1 v 1 G e H são idênticos. H é subgrafo gerador de G e vice-versa.
Def: Seja H um subgrafo de G. Se V(H) = V(G) então H é chamado subgrafo gerador de G. G: v 2 H: v 2 v 1 v 1 H é subgrafo gerador de G.
Def: Seja H um subgrafo de G. Se V(H) = V(G) então H é chamado subgrafo gerador de G. G: v 2 H: v 2 v 1 H é subgrafo de G, mas H não é subgrafo gerador de G.
Def: Grau de um vértice v é o número de arestas incidentes em v. Notação: d G (v) G: v 2 v 1 d G (v 1 ) = 1; d G (v 2 ) = 5; d G ( ) = 4; d G ( ) = 3; d G ( ) = 3
Teorema: v V d ( G) G ( v) 2n Onde n é o número de arestas. G: v 2 v 1 n = 8 2n=16: d G (v 1 ) + d G (v 2 ) + d G ( ) + d G ( ) + d G ( ) = 16
Teorema: v V d ( G) G ( v) 2n Onde n é o número de arestas. Demonstração: Cada aresta contribui com grau 2 (um grau em cada vértice que ela une). Assim, o somatório dos graus do grafo é 2n.
Demonstração: 2. FUNDAMENTOS Teorema: Em todo grafo o número de vértices com grau ímpar é par.
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex1: Conhecendo a matriz de adjacência de um grafo (com n vértices), faça um algoritmo que verifique se este grafo possui loops. Função testa_loops() Para i variando de 1 até n faça se A G [i,i] = 1 então retorne Verdade; fim-se; fim-para retorna (Falso) Fim testa_loops
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex2: Conhecendo a matriz de adjacência de um grafo (com n vértices), faça um algoritmo que verifique se este grafo possui arestas paralelas. paralelas := não; para i:= 1 até n para j:= 1 até n se A G [i,j] 2 então paralelas := sim; i:=n; j:=n; fim-se; fim-para fim-para retorna (paralelas);
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex3: Conhecendo a matriz de adjacência de um grafo (com n vértices), faça um algoritmo que verifique se este é um grafo simples.
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex4: Conhecendo a matriz de incidência de um grafo (com n vértices e m arestas), faça um algoritmo que verifique se este grafo possui loops. loops := não; para i:= 1 até n para j:= 1 até m se I G [i,j] = 2 então loops := sim; i:=n; j:=n; fim-se; fim-para fim-para retorna (loops);
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex5: Conhecendo a matriz de incidência de um grafo (com n vértices e m arestas), faça um algoritmo que verifique se este grafo possui arestas paralelas.
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex6: Conhecendo a matriz de incidência de um grafo (com n vértices e m arestas), faça um algoritmo que verifique se este é um grafo simples.
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex7: Conhecendo as matrizes de adjacência de dois grafos G (com n vértices) e H (com m vértices), faça um algoritmo que verifique se estes grafos são idênticos.
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex8: Verifique se são isomorfos os grafos abaixo: a) v 1 v 2 v 2 v 1
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex8: Verifique se são isomorfos os grafos abaixo: b) v 1 v 2 b e a c d
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex8: Verifique se são isomorfos os grafos abaixo: c) v 1 v 2 b e a c d
EXERCÍCIOS TEORIA DE GRAFOS 1a. PARTE Ex8: Verifique se são isomorfos os grafos abaixo: d) v 1 v 6 v 7 a c e f g v 2 b d