Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Sumrio
Sumrio
Aviso
Smbolos
1. Grafosdefinies iniciais
Exerccios
1.1. Grau
Exerccios
2. Subgrafos
2.1. Subgrafo induzido por um subconjunto de vrtices
2.2. Subgrafo induzido por um subconjunto de arestas
2.3. Exerccios
3. Clique, conjunto independente, grafo bipartido e corte
3.1. Exerccios
4. Isomorfismo
4.1. Exerccios
5. Outras noes de grafos
5.1. Exerccios
6. Representao computacional
6.1. Matriz de adjacncias de G
6.2. Lista de adjacncias de G
6.3. Complexidade de algoritmos em grafos
Exerccios
7. Percursos em grafos
7.1. Percurso genrico
7.2. Exerccios
8. Algoritmos de busca
8.1. Busca em Largura
8.2. Busca em Profundidade
8.3. Exerccios
9. Caminhos e Circuitos
9.1. Exerccios
10. Caminhos mnimos em grafos com pesos nas arestas
10.1. Exerccios
11. Algoritmo de Dijkstra para caminhos mnimos
11.1. Exerccios
12. Conexidade
12.1. Exerccios
13. rvores e Florestas
13.1. rvores geradoras
13.2. Exerccios
14. rvores geradoras de custo mnimo em grafos com peso nas arestas
14.1. Exerccios
15. Algoritmo de Kruskal para rvore geradora mnima
Exerccios
16. Algoritmo de Prim para rvore geradora mnima
17. Emparelhamento
Exerccios
18. Emparelhamentos em grafos bipartidos
Exerccios
18.1. Algoritmo de Edmonds
Exerccios
19. Cobertura
Exerccios
20. Circuitos hamiltonianos
Exerccios
21. Trilhas eulerianas
Exerccios
22. Grafos Dirigidos
22.1. Representao computacional
Exerccios
11/12/2013 10:59
2 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Aviso
Esse texto contm hyperlinks que ilustram a discusso de alguns tpicos da disciplina. Eu tomei o cuidado de fazer ligaes com pginas WEB
que tinham, no momento que fiz o acesso, informaes corretas, entretanto essas pginas esto fora do meu controle e podem sofrer alteraes,
portanto leia com cautela.
Smbolos
Denota o conjunto dos nmeros naturais;
denota o conjunto dos nmeros inteiros;
denota o conjunto dos nmeros racionais;
denota o conjunto dos nmeros reais;
+ denota o conjunto dos nmeros reais positivos;
|X| denota a cardinalidade do conjunto X;
para X V denotamos por X o complemento de X em V , isto , o conjunto V \ X;
denota o conjunto dos subconjuntos de V de cardinalidade 2
1. Grafosdefinies iniciais
Um grafo um par ordenado de conjuntos finitos (V,E) tal que E . Cada elemento de V chamado de vrtice do grafo e cada elemento de E
chamado de aresta do grafo, dessa forma cada aresta e E um subconjunto de V formado por exatamente dois vrtices, ou seja, e V e |e| =
2.
Todo grafo pode ser representado geometricamente por um diagrama. No plano, desenhamos um ponto para cada vrtice e um segmento de
curva ligando cada par de vrtices que determinam uma aresta (figura 1). Claramente, essa representao geomtrica de um grafo no nica.
Exemplo 1.Os conjuntos
Se G denota o grafo que definido pelo par (V,E) ento escrevemos G = (V,E).
No que segue u e v denotam vrtices e e e f denotam arestas de um grafo
se v e ento dizemos que a aresta e incide em v;
se {u, v} uma aresta, ento dizemos que u e v so vrtices adjacentes;
se |e f| = 1, ento dizemos que e e f so arestas adjacentes;
quando e = {v,u}, dizemos que u e v so os extremos da aresta e.
Quando nos referimos a um grafo conhecido G sem especificarmos o conjunto dos vrtices e o conjunto das arestas que definem G esses
11/12/2013 10:59
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
3 de 40
passam a ser referidos como V(G) e E(G), respectivamente. Assim, se G = (X,Y ) ento V (G) = X e E(G) = Y .
Para um grafo G qualquer, chamamos |V (G)| de ordem de G e chamamos |V (G)| + |E(G)| de tamanho de G.
Um expoente em G, quando G um grafo, denota a ordem de G, assim quando queremos ressaltar que G um grafo de ordem n, para algum
n , escrevemos Gn.
Chamamos G0 = (,) de grafo vazio e todo grafo de ordem 1 de grafo trivial.
Exerccios
Exerccio 1.Um qumico deseja embarcar os produtos A,B,C,D,E,F,X usando o menor nmero de caixas. Alguns produtos no podem ser
colocados numa mesma caixa porque reagem. Os produtos A,B,C,X reagem dois-a-dois; A reage com F e com D e vice-versa; E tambm reage
com F e com D e vice-versa. Descreva o grafo que modela essa situao, mostre um diagrama desse grafo e use esse grafo para descobrir o menor
nmero de caixas necessrias para embarcar os produtos com segurana.
Exerccio 2.Adaltina esperava 4 amigas Brandelina, Clodina, Dejaina e Edina para um lanche em sua casa. Enquanto esperava preparou as
lanches: Bauru, Misto quente, Misto frio e X-salada. Brandelina gosta de Misto frio e de X-salada; Clodina de Bauru e X-salada; Dejaina gosta de
Misto quente e Misto frio; Edina gosta de de Bauru e Misto quente. Descreva o grafo que modela essa situao, mostre um diagrama desse grafo
e use esse grafo para descobrir se possvel que cada amiga de Adaltina tenha o lanche que gosta.
Exerccio 3.Para todo n , qual o nmero mximo de arestas que pode ter um grafo com n vrtices?
Exerccio 4.O complemento de um grafo G, denotado por G, o grafo que tem o mesmo conjunto de vrtices de G
e dois vrtices formam uma aresta em G se e somente se no formam uma aresta de G:
2. H dado por
3. B dado por
A unio G H um grafo?.
Exerccio 6.Um grafo chamado de completo sobre V se todo par de vrtices de V uma aresta do grafo, ou seja E
=
Exerccio 7.Considere o caso geral do exerccio 1: Um qumico deseja embarcar os produtos p1,p2,,pn usando o menor nmero de caixas. Alguns
produtos no podem ser colocados num mesmo caixas porque reagem. Seja G o grafo que modela esse problema, onde vrtices so produtos e
arestas os pares que reagem, e denote por (G) o nmero de mnimo de caixas de modo que seja possvel encaixotar os produtos com segurana.
Prove que
11/12/2013 10:59
4 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
1.1. Grau.
Para um vrtice v qualquer num grafo G, definimos os conjuntos
(1)
e
(2)
esse ltimo chamado de vizinhana de v. Os elementos de NG(v) so chamados de vizinhos de v.
Para todo v V (G), o nmero de vizinhos de v chamado de grau do vrtice v no grafo G. Os graus dos vrtices de um grafo um dos seus
parmetros importantes e por isso recebem uma notao especial. Para um grafo G = (V,E) no-vazio
Observao 1.As vezes suprimimos os ndices _G ou os argumentos _(G) para simplificar escrevendo, por exemplo, usamos simplesmente E(v) e
N(v), omitindo os ndices da notao, ou escrevemos para o grau mximo e d(v) para o grau de v.
Exemplo 2.No exemplo 1 encontramos d(7) = |E(7)| = d(6) = |E(6)| = 1 e d(5) = |E(5)| = 2. Tambm, o grau mximo (G) = 2, o grau mnimo
(G) = 0 e o grau mdio d(G) = 54.
Teorema 1.Para todo grafo G vale que
(7)
Demonstrao. Seja (V,E) em grafo e defina o conjunto X = {(u,e) V E : u e} e vamos contar seu nmero de elementos de duas maneiras
distintas.
Primeiro, cada vrtice u participa de d(u) elementos de X, portanto
(8)
Depois, cada aresta e est presente em dois elementos de X, logo
(9)
De (8) e (9) temos (7).
Corolrio 2.Em todo grafo o nmero de vrtices com grau mpar par.
Demonstrao. Seja G um grafo. Denote por I o subconjunto formado pelos vrtices em V (G) de grau mpar e denote por P o subconjunto
dos vrtices de grau par. Usando que I P = , que I P = V (G) e o Teorema 1, temos
(10)
portanto devemos ter uId(u) par, o que semente possvel quando |I| par.
Exerccios
Exerccio 8.Chico e sua esposa foram a uma festa com trs outros casais. No encontro deles houveram vrios apertos de mo. Ningum apertou a
prpria mo ou a mo da(o) esposa(o), e ningum apertou a mo da mesma pessoa mais que uma vez.
Aps os cumprimentos Chico perguntou para todos, inclusive para a esposa, quantas mos cada um apertou e recebeu de cada pessoa uma
resposta diferente. (i) Quantas mos Chico apertou? (ii) Quantas mos a esposa de Chico apertou?
11/12/2013 10:59
5 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccio 16. Dado G, o grafo linha de G, denotado por LG, o grafo cujos vrtices so as arestas de G e um par de vrtices define uma aresta
em LG se, e somente se, esses vrtices so arestas adjacentes em G. Dado G determine |V (LG)| e |E(LG)|.
2. Subgrafos
Dizemos que o grafo H um subgrafo do grafo G se, e somente se, V (H) V (G) e E(H) E(G) e nesse caso escrevemos H G para indicar
que H subgrafo de G.
Exemplo 3.Considerando o grafo G do exemplo 1 temos que
em e como conjunto
de arestas o prprio M
Exemplo 4.Dos grafos G, H e I cujos diagramas so dados na figura 2, podemos dizer que H um subgrafo induzido de G enquanto que I um
subgrafo mas no induzido.
11/12/2013 10:59
6 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
2.3. Exerccios.
Exerccio 17.Quantos subgrafos completos tem o grafo completo de ordem n?
Exerccio 18. Descubra um subgrafo induzido de
1-regular e o maior nmero possvel de arestas. (Qual a relao com a resoluo do exerccio 2?)
O conjunto de arestas E(A,A) chamado de corte definido por A e, (11) por dessa forma podemos escrever
(12)
11/12/2013 10:59
7 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccio 19. Mostre que em qualquer grafo G com pelo menos 6 vrtices ou existe um 3-clique ou existe um 3-conjunto-independente. (Dica:
exerccio 6 e princpio da casa dos pombos sobre EK (v).)
6
Exerccio 20.Dado um grafo G, denotamos por (G) a cardinalidade do maior conjunto independente em G,
Prove que se d(G) > (G) ento G contm tringulo, para todo G.
Exerccio 21.Para todo grafo G, denotamos por (G) a cardinalidade do maior clique em G
Exerccio 23.Prove que as duas desigualdades dadas a seguir valem para todo grafo G com pelo menos um vrtice
(13)
particionam V (G), ou seja, V (G) = A1 A2 Ak, o conjunto Ai um conjunto independente em G para todo i
{1,2,,k} e Ai Aj = para quaisquer i e j distintos. Prove que dentre os grafos k-partidos (k 3) completos com n vrtices o nmero mximo
de arestas atingido quando |Ai||Aj| 1 para todos i, j {1, 2, , n} distintos.
Exerccio 30.Mostre que, se n = kq + r com 0 r < k, ento o nmero de arestas do grafo do exerccio anterior
4. Isomorfismo
Dizemos que os grafos G e H so isomorfos e, nesse caso escrevemos G H, se existe uma funo bijetora
(14)
tal que
11/12/2013 10:59
8 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
(15)
para todos u, v V (G). Uma funo f como acima chamada de isomorfismo.
Exemplo 6 (Grafo de Petersen). Os grafos representados na figura 3 so isomorfos pelo isomorfismo f(1) = a, f(2) = b, f(3) = c, f(4) = d, f(5) = e,
f(6) = f, f(7) = g, f(8) = h, f(9) = i, f(10) = j. Esse grafo chamado de grafo de Petersen, um dos grafos mais conhecidos na Teoria dos Grafos
(leia mais aqui).
Notamos que quaisquer dois grafos completos G e H de mesma ordem so isomorfos. Mais que isso, qualquer bijeo entre V (G) e V (H)
define um isomorfismo entre eles. Nesse caso, dizemos que o grafo nico a menos de isomorfismos e por isso usamos a mesma notao para
todos eles, a saber Kn, quando o conjunto dos vrtices no relevante.
Exemplo 7.H oito grafos distintos com trs vrtices, eles esto descritos nas representaes da figura abaixo.
No existe uma caracterizao simples de grafos isomorfos. Isso significa que no h algoritmo eficiente que recebe dois grafos e decide se
eles so isomorfos.
Exemplo 8.Nenhum dos grafos G, H e K representados na figura 6 so isomorfos.
11/12/2013 10:59
9 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Nesse exemplo foram dados argumentos diferentes para concluir o mesmo fato, o no-isomorfismo entre pares de grafos. Ainda, existem
exemplos de grafos no isomorfos para os quais esses argumentos no funcionam (da mesma forma que a existncia de um vrtice de grau quatro
funciona para mostrar que G no isomorfo a H mas no serve para mostrar que G no isomorfo a K pois 1,2,2,3,3,3 so os graus dos vrtices
de ambos os grafos). Isso se deve ao fato de ser difcil caracterizar de modo eficiente o no-isomorfismo entre grafos:
O problema do no-isomorfismo de grafos: Dados os grafos G = (V,E) e H = (V,E) decidir se eles so no-isomorfos.
Observao 4 (leia esse aviso antes). No se conhece algoritmo de tempo polinomial no tamanho dos grafos para decidir se dois grafos no so
isomorfos. Mais do que isso, no se conhece um algoritmo de tempo polinomial que receba como entrada uma terna (G,H,P) onde P uma prova
de que G e H no so isomorfos e que devolva sim se G1 no isomorfo a G2 e devolva no caso contrrio. Em linguagem tcnica dissemos que
no se sabe se o problema do no-isomorfismo de grafos est na classe NP de complexidade computacional.
Por outro lado, podemos considerar o problema do isomorfismo de grafos:
O problema do isomorfismo de grafos: Dados os grafos G = (V,E) e H = (V,E) decidir se eles so isomorfos.
Observao 5 (leia esse aviso antes). Atualmente no se conhece algoritmo polinomial no tamanho do grafo que resolva o problema. Entretanto,
no difcil projetar um algoritmo de tempo polinomial que recebe a terna (G, H, f) onde f : V (G) V (H) e devolve sim caso G e H so
isomorfos e f o isomorfismo, caso contrrio devolve no. Em linguagem tcnica dizemos que o problema do isomorfismo de grafos est na
classe NP de complexidade de problemas computacionais. Entretanto, no sabido se esse problema NP-completo
4.1. Exerccios.
Exerccio 31.Determine quais pares dentre os grafos abaixo so isomorfos.
1. G1 dado por V (G1) = {v1,u1,w1,x1,y1,z1} e
E(G1 ) = {{u1,v1},{u1,w1},{v1,w1},{v1,x1},{w1,y1},{x1,y1},{x1,z1}};
2. G2 dado por V (G2) = {v2,u2,w2,x2,y2,z2} e
E(G2 ) = {{u2,v2},{u2,w2},{v2,w2},{v2,x2},{w2,y2},{x2,y2},{y2,z2}};
3. G3 dado por V (G3) = {v3,u3,w3,x3,y3,z3} e
E(G3 ) = {{u3,v3},{u3,w3},{v3,w3},{v3,x3},{w3,y3},{x3,y3},{u3,z3}}.
Exerccio 32.Mostre que existem 11 grafos no-isomorfos com 4 vrtices.
Exerccio 33. Sejam G e H grafos isomorfos e f : V (G) V (H) um isomorfismo. verdade que G[U] isomorfo a H[f(U)] para todo U V
(G)? Justifique.
Exerccio 34.Um automorfismo de um grafo um isomorfismo do grafo sobre ele mesmo. Quantos automorfismos
tem um grafo completo?
Exerccio 35.Mostre que o conjunto de automorfismos de um grafo com a operao de composio de funes definem um grupo.
Exerccio 36.Um grafo G = (V,E) vrtice-transitivo se para quaisquer u,v V existe um automorfismo f de G com f(v) = u. Analogamente, G
aresta-transitivo se para quaisquer arestas {x,y},{z,w} E existe um automorfismo f de G tal que {f(x),f(y)} = {z,w}.
D um exemplo de grafo vrtice-transitivo. D um exemplo de grafo aresta-transitivo. D um exemplo de grafo aresta-transitivo mas no
vrtice-transitivo.
11/12/2013 10:59
10 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
conjunto R em geral depende do problema sendo considerado. Por exemplo, se os pesos representam distncia ento tomamos R = + (reais
no-negativos). O grafo (V,E) chamado grafo subjacente do grafo com pesos nas arestas.
Grafo orientado aquele onde as arestas tm uma orientao (so pares ordenados) de modo que se u e v so vrtices, ento (u,v)(v,u) e
alm disso se (u,v) uma aresta ento (v,u) no aresta. Removendo o sentido das arestas temos o grafo subjacente ao grafo orientado.
Grafos dirigido ou digrafo dado (V,E) onde E V V \{(v,v): v V }.
Multigrafo dado por um conjuntode vrtices e podemos ter mais de uma aresta incidente ao mesmo par de vrtices. Removendo as arestas
repetidas de um multigrafo temos o grafo subjacente ao multigrafo.
Figura 7: (a) Grafo orientado. (b) Multigrafo. (c) Grafo dirigido. (d) Grafo subjacente.
5.1. Exerccios.
Exerccio 37.D uma definio formal para multigrafo.
Exerccio 38.Defina isomorfismo para grafos orientados.
Exerccio 39.Formule uma verso do teorema 1 para grafos orientados.
6. Representao computacional
O primeiro passo para representar computacionalmente um grafo mapear (construir um isomorfismo) o conjunto de vrtices do grafo G no
subconjunto dos nmero naturais {1,2,,|V (G)|} para facilitar o acesso as informaes usando estruturas indexadas. Isso pode ser feito usando as
tcnicas de busca conhecidas para recuperar os inteiros associados aos vrtices como, por exemplo, tabela de espalhamento (hashing) ou rvore
binria de busca. Feito isso, qualquer problema computacional sobre um grafo G tratado computacionalmente sobre um grafo isomorfo G com
vrtices V (G) = {1, 2, ,|V (G)|} e a estrutura de busca escolhida no passo anterior usada para representar o isomorfismo.
No que segue, sempre que tratamos problemas computacionais sobre grafos estamos assumindo os grafos so definidos sobre o conjunto de
vrtices {1,2,,n}, para algum n . Veremos duas das estruturas de dados mais importantes para a representao de grafos.
6.1. Matriz de adjacncias de G.
a matriz |V ||V | denotada por A(G), ou A simplesmente, definida por
11/12/2013 10:59
11 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Observao 6.A representao de uma grafo por lista de adjacncias no nica, pois qualquer permutao dos ns em N[i] define uma lista
vlida.
6.3. Complexidade de algoritmos em grafos.
Neste texto entendemos por complexidade do algoritmo a
complexidade de tempo no pior caso.
Exemplo 11.Sejam A e B dois algoritmos distintos que executam a mesma tarefa sobre um grafo G = (V,E). O algoritmo A gasta, no pior caso, |V |2
passos para executar a tarefa e o algoritmo B gasta (|V | + |E|)log |E| passos no pior caso. Para grafos com |V |24 arestas o primeiro algoritmo
sempre melhor enquanto que para grafos com 1.000|V | arestas o segundo algoritmo assintoticamente melhor (melhor para |V | 16.645,
enquanto que o primeiro melhor para |V | 16.644). Para entradas pequenas (at 25 mil vrtices) a ordem das funes so comparadas nos
grficos da figura 9.
Usualmente, a expresso que estabelece a complexidade de um algoritmo escrita em funo do tamanho da representao usada e em
notao assinttica: sejam f,g duas funes definidas nos naturais, ento
significa que existem constantes positivas c e n0 tais que para todo n n0 vale
O(|V |)
O(|V |)
O(|E|)
11/12/2013 10:59
12 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
portanto, para Devolva E mais eficiente usar listas quando temos poucas arestas. As vezes a comparao entre o desempenho pode ser mais
complicada.
Observao 7. Um algoritmo em grafo de complexidade polinomial se a complexidade de tempo no pior caso expressa por uma funo
polinomial no tamanho da representao. Complexidade polinomial independente da representao do grafo por matriz ou lista de adjacncias,
ou seja, essas representaes so polinomialmente relacionadas.
Exerccios
Exerccio 40.Mostre que se f(n) = O(g(n)) ento O(f(n)) + O(g(n)) = O(g(n)).
Exerccio 41. verdade que para todo G vale que |E(G)| = O(|V (G)|) para |V (G)| suficientemente grande?
Exerccio 42. verdade que para todo G vale que log |E(G)| = O(log |V (G)|) para |V (G)| suficientemente grande?
Exerccio 43.Prove o afirmao feita na observao 7.
Exerccio 44.Sejam G um grafo, A a sua matriz de adjacncias e b(i,j) as entradas da matriz A2. Que parmetro de G est associado ao nmero
b(i,i), para cada i {1,2,,|V (G)|}? Qual a relao entre b(i,j) e, NG(i) e NG(j) quando i j?
Exerccio 45. Para um grafo dirigido dizemos que a aresta (u,v) E sai de u e chega em v. Os vetores de incidncias de um grafo dirigido D =
(V,E) so os vetores S e C indexados por E tais que para e = (u,v) E temos S[e] = u e C[e] = v, e nesse caso dizemos que e sai de u e chega em v.
Determine o tempo para:
(i) dados e E e v V , determinar se e incide em v;
(ii) dado e E, determinar suas extremidades;
(iii) dado v V , determinar as arestas que saem de v e determinar as arestas que chegam em v.
Uma matriz de incidncias de um grafo dirigido D = (V,E) uma matriz B de dimenso |V ||E| (as linhas so indexadas por V e as colunas
por E) tal que
11/12/2013 10:59
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
13 de 40
autovalores da matriz de adjacncias do grafo completo Kn. Mostre que se G r-regular ento r uma autovalor de A.
Exerccio 51.Dada uma representao por listas de adjacncias de um grafo dirigido D descreva um algoritmo com tempo de execuo O(|V (D)|
+ |E(D)|) para computar a representao por listas de adjacncias do grafo subjacente.
Exerccio 52.Quando uma representao por uma matriz de adjacncias utilizada, muitos algoritmos sobre grafos gastam tempo (|V |2), mas
existem algumas excees. Mostre que determinar se um grafo orientado contm um sorvedouro isto , um vrtice com grau de entrada |V | 1
e grau de sada 0 pode ser determinado em tempo O(|V |) quando uma representao por matriz utilizada.
7. Percursos em grafos
Nessa seo veremos algoritmos que formam a base para muitos algoritmos em grafos (para todos os que sero vistos nesse curso). O objetivo de
um percurso num grafo o seguinte: dado a representao de um grafo G = (V,E), sistematicamente visitar todos os vrtices e todas as arestas
desse grafo.
Dado um vrtice w em V , dizemos que o vrtice u do grafo alcanvel por w em G se existe uma seqncia de vrtices v1 , v2 , ,vm de G tal
que
w = v1 ,
u = vm ,
vi e vi+1 so adjacentes, para todo i {1,2,,m 1}.
Definimos que w alcanvel por w em G, para todo w V .
Uma seqncia de vrtices como acima chamada de passeio em G.
7.1. Percurso genrico.
O percurso num grafo G comea com as seguintes consideraes: cada vrtice est em um de dois estados possveis em qualquer instante da
execuo: no-visitado ou visitado; cada aresta em E(u) est em um de dois estados: no-visitada a partir de u ou visitada a partir de u, para todo
u V (G). De incio todos os vrtices de G esto no-visitado e todas as arestas no-visitada a partir de ambos os extremos.
O seguinte algoritmo, que chamaremos de Visite, recebe um grafo G e um vrtice qualquer v V (G) e visita todos os vrtices alcanveis a
partir de v uma vez e visita todas as arestas induzidas por esses vrtices a partir de cada extremo, portanto, visita cada aresta duas vezes. Para
gerenciar essa visita o algoritmo Visite usa uma lista L na qual a busca, insero e remoo de elementos feita de maneira arbitrria e com
custo constante.
Visite
1
2
3
4
6
7
8
9
10
insira
em
e marque
escolha
;
em
h aresta no-visitada a partir de
escolha
no-visitada a partir de
marque
a partir de ;
no-visitado
insira
em
e marque
;
remova
de .
Anlise e correo do algoritmo Visite(G,v). No que segue faremos uma anlise detalhada do algoritmo Visite(G,v). At o fim da seo fixe um grafo G representado por uma
lista de adjacncias e um vrtice v de G e considere uma execuo de Visite(G,v). O seguinte resultado prova que Visite(G,v) faz o que foi prometido.
Seja A o subconjunto dos vrtice alcanveis a partir de v.
Teorema 3. Aps Visite(G,v) cada vrtice de A foi visitado uma vez e cada aresta de G[A] foi visitada duas vezes.
A seguir provamos uma seqncia de resultados menores que culminam na prova desses resultados.
Demonstrao. Um vrtice qualquer w V (G) inserido em L na linha 1 ou 9. A condio para essas linhas serem executadas que w seja no-visitado. Aps a insero, na
11/12/2013 10:59
14 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
linha 1 ou 9, o vrtice w marcado visitado, logo a condio para insero de w em L passa a ser falsa. A proposio segue do fato de que um vrtice visitado nunca se tornar
Demonstrao. Fixe um vrtice w e assuma que w L. Para cada execuo da linha 3 com u = w, se vale a condio da linha 4 ento o nmero de arestas no-visitadas a partir
de w em E(w) diminui de um, seno w removido de L. Como conseqncia sero 0 arestas no-visitadas a partir de w aps d(w) execues mais 1 execuo que resulta na
Demonstrao. Por definio |V (G)| finito. Pela proposio 5 cada vrtice entra em L no mximo uma vez. Pela proposio 6 aps no mximo
d(u) + 1 = 2|E| + |V |
uV (G)
Demonstrao. Seja w V (G) um vrtice alcanvel a partir de v. Por definio existe uma seqncia
(16)
de arestas de G tal que
Vamos provar por induo em m que se w alcanvel a partir de v por uma seqncia de m arestas ento w visitado.
Para a base da induo, suponha m = 1 e escreva e = {v,w}. Na linha 1 do algoritmo Visite(G,v) o vrtice v visitado e entra em L. Pelo corolrio7 v removido em algum
1
momento da execuo e antes disso a aresta e vai ser visitada a partir de v na linha 9, nesse ponto ou w j foi visitado ou vale a condio da linha 8 e w visitado.
1
Suponha (hiptese da induo) que todo vrtice alcanvel a partir de v por uma seqncia de m 1 arestas visitado. Seja w um vrtice como em (16) .
Escreva e = {x,w} com x e e . Por hiptese x foi visitado, portanto, antes de ser removido a aresta {x,w} E(x) visitada a partir de x e assim w visitado, pelo mesmo
m
m1
Corolrio 9. Seja A o subconjunto dos vrtices de V (G) alcanveis a partir de v. Ento cada aresta de G[A] visitada duas vezes.
Demonstrao. Seja e = {x,y} uma aresta de G[A]. Como x,y A temos x L em algum momento da execuo de Visite(G,v); antes de x ser removido de L a aresta e visitada a
partir de x. Analogamente, a aresta e visitada a partir de y, logo a aresta visitada duas vezes.
Desse corolrio podemos concluir que a complexidade de Visite(G,v) (linearmente) proporcional ao tamanho da representao, isto , O(|A| + |E(G[A])|) (lembre-se que foi
assumido custo constante para as operaes em L).
Agora, simples mostrar que o seguinte algoritmo percorre o grafo (V,E), visitando cada vrtice uma nica vez e visitando cada aresta duas
vezes e com complexidade de tempo O(|V | + |E|).
Visite
escolha
insira
h vrtice no-visitado em
no-visitado;
em
e marque
;
escolha
;
em
h aresta no-visitada a partir de
escolha
no-visitada a partir de
marque
a partir de ;
no-visitado
insira
em
e marque
;
remova
de .
7.2. Exerccios.
Exerccio 53.Justifique detalhadamente o custo O(1) nas linhas do algoritmo Visite(G,v).
Exerccio 54.Prove que se G est representado por uma matriz de adjacncias ento o algoritmo Visite tem complexidade O(|V (G)|2).
11/12/2013 10:59
15 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccio 55.Escreva um algoritmo que recebe um grafo G e um subconjunto de vrtices U e devolve as arestas no corte E(U, U). Determine a
complexidade do algoritmo.
Exerccio 56. Seja G um grafo. Para simplificar, suponha que todo vrtice de G alcanvel a partir de qualquer vrtice dado. Para cada vrtice
temos dois estados possveis: no-visitado ou visitado. De incio todos os vrtices de G esto no-visitado. Prove ou refute: o seguinte algoritmo
visita todos os vrtices de G.
Visite-vertices
escolha um vrtice
no-visitado;
insira
em
e marque
;
houver aresta no corte
escolha uma aresta
no corte
no-visitado
ento insira
em
marque
visitado.
;
;
8. Algoritmos de busca
Algoritmo de busca como so chamados, usualmente, alguns dos algoritmos de percurso em grafos.
Observao 8 (leia esse aviso antes). Se voc est interessado em algoritmo de busca, ento pode comear pelos algoritmos de busca descritos na
wikipedia.
Nessa seo veremos dois casos particulares do algoritmo de percurso visto acima obtidos quando definimos a poltica de gerenciamento da
lista L. A estratgia geral de busca , a partir do vrtice v dado, se houver vrtice u no-visitado ento visite u e seus vizinhos no-visitados. Para
visitar os vizinhos de u podemos destacar duas estratgias:
8.1. Busca em Largura.
primeiro visitamos cada vizinho novo de v, percorrendo N(v), e guardamos-o numa fila; quando no houver mais vizinhos marcamos v como
visitado, pegamos o primeiro vrtice da fila e repetimos o processo. Em outras palavras, a lista L administrada como fila.
Visite_em_Largura
1
2
3
4
6
7
8
9
10
insira
seja
em
no fim da fila
e marque
Exemplo 12.Na figura 10 mostramos um esquema de percurso em largura supondo que os vrtices esto armazenados em ordem crescente na lista
de adjacncias. As arestas destacadas indicam quando um vrtice com a marca no-visitado foi visitado.
11/12/2013 10:59
16 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exemplo 14.Por fim, a figura 12 compara as ordens em que os vrtices foram descobertos em cada uma das buscas, largura e profundidade
respectivamente.
Observao 9 (leia esse aviso antes). Veja as entradas no Wikipedia para busca em largura e para busca em profundidade.
8.2.1. Busca em profundidade rotulada. A seguinte verso da busca em profundidade ser muito til adiante; chamaremos-a de busca em
profundidade rotulada e a idia manter um contador (global) de operaes na pilha e rotular cada vrtices com dois valores inteiros: o valor do
contador quando o vrtice entrou na pilha e o o valor do contador quando o vrtice saiu da pilha. A seguir damos uma verso recursiva para o
procedimento Visite da busca rotulada, o qual recebe um grafo G dado por uma lista de adjacncias e um vrtice w V (G); no incio temos cont
= sai[v] = chega[v] = 0 e pai[v] = nil, para todo vrtice v de G.
BP
;
;
BP
;
;
;
.
Proposio 10. Aps uma execuo de BP(G,w), dados u,v V (G) alcanveis a partir de w, um e somente um dos itens abaixo vale para esse
par de vrtices
(a) chega[u] < sai[u] < chega[v] < sai[v];
(a) chega[v] < sai[v] < chega[u] < sai[u];
(b) chega[u] < chega[v] < sai[v] < sai[u];
(c) chega[v] < chega[u] < sai[u] < sai[v].
Demonstrao. A prova deixada como exerccio.
Definimos, para todo t , a t-sima iterao do vetor pai, denotada por pai(t), da seguinte maneira
(17)
11/12/2013 10:59
17 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
8.3. Exerccios.
Exerccio 58.Escreva uma verso no recursiva da busca em profundidade rotulada.
Exerccio 59.Prove a proposio 10.
Exerccio 60. Considere uma execuo da busca rotulada BP(G,w). Para simplificar, considere que todo vrtice de G alcanvel a partir de w.
Prove as seguintes equivalncias. Para quaisquer u,v V (G)
1. chega[v],sai[v] chega[u],sai[u] = se e somente se no existe t tal que pai(t)[u] = v e no existe t tal que pai(t)[v] = u;
2. chega[v],sai[v] chega[u],sai[u] se e somente se existe t tal que pai(t)[v] = u;
3. chega[v],sai[v] chega[u]sai[u] se e somente se existe t tal que pai(t)[u] = v.
Exerccio 61.Adapte o algoritmo do exerccio 56 para que o percurso seja uma busca em largura. Repita para busca em profundidade.
9. Caminhos e Circuitos
Um caminho qualquer grafo ou subgrafo isomorfo a (V,E) dado por
(18)
para algum k . Um caminho pode ser representado, genericamente, pelo diagrama da figura 13.
de seus vrtices de modo que vrtices consecutivos na seqncia so adjacentes e com o cuidado de todos os vrtices serem distintos. Dizemos
que os vrtices 0 e k so os extremos de P e dizemos que os vrtices 1,,k 1 so os vrtices internos de P.
O nmero de arestas num caminho o comprimento desse caminho. Seguindo notao estabelecida na seo 1, denotamos por Pk+1 um
caminho com k + 1 vrtices, portanto com comprimento k.
Exemplo 15.Considere o grafo G do diagrama na figura 14. O subgrafo induzido pelo conjunto {a,b,f,i} um caminho, P = a,b,f,i, tambm o
subgrafo (U,F) dado por U = {a,d,c,h,i} e F = {ad,dc,ch,hi} um caminho, um P4 e um P5, respectivamente, se quisermos destacar o
comprimento. O subgrafo induzido pelo conjunto de vrtices {m} um P1 e o subgrafo induzido pela aresta {j,l} um P2.
Dizemos que os vrtices u e v num grafo G so ligados por um caminho se existe um caminho P G cujos extremos so u e v.
Em um grafo G = (V,E), a distncia entre dois vrtices quaisquer u,v V , denotada por distG(u,v), definida como o comprimento do menor
caminho que liga esses vrtices, isto
(19)
quando existe algum caminho. Se u e v no so ligados por caminho em G, ento convencionamos distG(u,v) = , de modo que
(20)
11/12/2013 10:59
18 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exemplo 16.No grafo do exemplo 15 temos distG(a,j) = , distG(a,b) = 1, distG(a,i) = 3, distG(m,j) = . Observe que o caminho de comprimento
mnimo pode no ser nico.
Observao 10 (desigualdade triangular). Para todo G e todos u,v V (G) temos distG(u,v) = distG(v,u). Tambm segue da definio que
distG(v,u) = 0 se e somente se u = v, e que vale a desigualdade triangular
(21)
para quaisquer u,v,w V (G) distintos. Portanto, a distncia define uma mtrica em G.
Definimos o dimetro do grafo G como a maior distncia entre dois vrtices quaisquer de G, ou seja
(22)
Naturalmente, diam(G) = se existirem dois vrtices no grafo G que no so ligados por caminho.
Um circuito qualquer grafo (V,E) da forma
(23)
para algum k 2.
Como no caso do caminho, para simplificar, o circuito definido em (23) tambm denotado pela seqncia de seus vrtices
com os cuidados de todos os vrtices a menos do primeiro e do ltimo serem distintos e de vrtices consecutivos serem adjacentes. O nmero de
arestas num circuito o comprimento desse circuito e quando queremos destacar o comprimento denotamos um circuito de comprimento k por
Ck.
Exemplo 17.Consideremos o grafo G do exemplo 15 temos que C4 = G {b,d,e,g} um circuito, bem como o subgrafo C5 = (V,E) definido por V =
{a,b,d,e,g} e E = {ab,be,eg,gd,da}.
Proposio 11. Todo grafo G contm um caminho de comprimento pelo menos (G) e, se (G) 2, um circuito de comprimento pelo menos (G)
+ 1.
Demonstrao. Seja P = x0,x1,,xk o caminho mais longo em G. Temos que
(24)
pois, caso contrrio haveria caminho mais longo que P. Logo, |V (P)| > |NG(xk)| como |NG(xk)| (G) segue que |E(P)| (G), isto , um caminho
do comprimento desejado.
Agora, tratando do caso de circuito, devemos supor que (G) 2. Como o grau mnimo pelo menos dois o vrtice xk tem um vizinho em P
diferente de xk1 e, assim, est bem definido o nmero
(25)
que o menor ndice em {0,1,,k 2} de um vrtice vizinho de xk. Por (24) temos que o circuito xi,xi+1,,xk,xi tem pelo menos (G) + 1 vrtices.
11/12/2013 10:59
19 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
u2 , , uk , v1 ,v2,,v. Supondo que P e Q sejam caminhos no grafo, sob que condies a seqncia P,Q caminho?
Exerccio 64.Prove a desigualdade triangular (equao (21)).
Exerccio 65.Escreva um algoritmo que recebe uma grafo G e decide se G um caminho. Estabelea a complexidade do algoritmo.
Exerccio 66.Escreva um algoritmo baseado numa busca em largura que recebe (V,E) e vrtices v,w V e devolve dist G (w,v).
Exerccio 67.Prove que G bipartido se e somente se G no contm circuito de comprimentos mpar.
Exerccio 68.Seja G um grafo onde a distncia entre qualquer par de vrtices finita. Mostre que se existem w V (G) e uv E(G) tais que
dist(w,u) = dist(w,v) ento G contm um circuito de comprimento mpar. Mostre que cin (G) dist(w,u) + dist(w,v) + 1.
Exerccio 69.Mostre que a relao e f em E(G) dada por e = f ou existe um circuito C G tal que e e f pertencem a E(C) uma relao de
equivalncia.
Exerccio 70. Seja k um nmero natural. O k-cubo o grafo cujo conjunto de vrtices so as seqencias binrias de k
bits e dois vrtices so adjacentes se e somente se as k-tuplas correspondentes diferem exatamente em uma posio.
Determine o nmero de vrtices, arestas, o dimetro e a cintura do k-cubo. Determine os parmetros , e do k-cubo.
Exerccio 71. Seja k um nmero natural. O grafo de Fibonacci Fk o grafo cujo conjunto de vrtices so as
seqencias binrias de k bits sem bits 1 consecutivos e dois vrtices so adjacentes se e somente se as k-tuplas
correspondentes diferem exatamente em uma posio. Determine o nmero de vrtices, arestas, o dimetro e a cintura do Fk . Determine os
parmetros , e do Fk.
Exerccio 72.Seja p um nmero primo e tome V = {0,1,,p1}. Defina o grafo bipartido 3-regular G = (AB,E) com A = V {a} e B = V {b} (o
que queremos que A e B sejam duas cpias disjuntas de V , note que isso no possvel tomando A = V e B = V ). Cada vrtice (x,a) A
adjacente aos vrtices (x,b), (x + 1,b) e (x + y, b) de B onde y0,1 fixo e a soma feita mdulo p.
Prove que qualquer subgrafo induzido de G de ordem p + 1 contm um caminho de comprimento 2 quando y = 2, (p + 1)2,p 1.
Repita para qualquer y0,1.
quando existe algum caminho, caso contrrio convencionamos que dist(u,v) = tal que vale (20). Um caminho que liga u a v de comprimento
dist(u,v) < chamado de caminho mnimo.
Exemplo 18.O diagrama da figura 16 representa um grafo com pesos nas arestas.
11/12/2013 10:59
20 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Figura 16: Diagrama de um grafo com peso nas arestas. A distncia entre a e e 10 e um caminho mnimo a, c, b, d, f, e.
No que segue vamos supor que os grafos so dados por lista de adjacncias onde a lista de v contm os vrtices u V (G) tais que {v,u}
E(G) junto com o peso (u,v).
Exemplo 19.Para o grafo G do exemplo 18 uma lista de adjacncias representada na figura 17.
10.1. Exerccios.
Exerccio 73.Seja G um grafo com peso nas arestas e s um vrtice de G. Prove a seguinte variante da desigualdade triangular (21) : para todo
{v,u} E(G)
(27)
Exerccio 74. Suponha que v1,v2,,vk um caminho mnimo num grafo D. Prove que vi,,vj um caminho mnimo que liga vi e vj em D para
quaisquer i, j com 1 i < j k.
Exerccio 75.Dados (V,E,) e s V considere o problema de determinar dist(s,x) para todo x V com a seguinte estratgia: declare s visitado e
em cada passo visite o vrtice no visitado mais prximo de um vrtice j visitado. Construa um exemplo de grafo com peso nas arestas que
mostre que essa estratgia no funciona.
subconjunto vazio de
;
;
11/12/2013 10:59
21 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
No incio d[s] = 0 pois s est a distncia 0 dele mesmo; para qualquer vrtice vs temos d[v] = ; S = .
Num determinado momento da execuo o conjunto S contm os vrtices cujas distncias j esto determinadas. Nesse ponto, escolhemos o
vrtice u S que tem menor valor de d[ ]; u o vrtice de S (conjunto dos vrtices com distncia ainda no determinada pelo algoritmo) mais
prximo do vrtice de sada s, portanto, sua distncia fica determinada pelo valor de d[u] e podemos inseri-lo em S. Em seguida, visitamos cada
vizinho t de u (por (27) dist(s, t) d[u] + (u,t)) e testamos se um caminho de menor comprimento foi encontrado, se for o caso ento atualizamos
d[ ]
Relaxao
1
2
Note que a condio na linha 1 do algoritmo acima sempre falsa para t S. O algoritmo prossegue, at que S = V .
Dijkstra
1
2
3
4
5
6
Inicie
vrtice de
insira
em ;
Relaxao
com
minimo;
Uma demonstrao formal de que o algoritmo funciona, isto , no final d[v] armazena as distncias dist(s,v), para todo v V , segue
facilmente do teorema 14 provado adiante. Esse algoritmo conhecido como algoritmo de Dijkstra.
Observao 11 (leia esse aviso antes). Veja a entrada no Wikipedia sobre o algoritmo de Dijkstra.
Demonstrao. Para provar (a) vamos supor o contrrio e assumir que u V o primeiro vrtice para o qual ocorreu que d[u] < dist(s,u) durante uma execuo e seja v V o
vrtice que causou a mudana no valor de d[u] numa relaxao, assim a relaxao faz
(28)
e, nesse momento da execuo d[v] + ({u,v}) dist(s,v) + ({u,v}) pois u foi a primeira ocorrncia do fato suposto, ou seja,
Proposio 13. Se P = s,x ,,x ,v um caminho mnimo e d[x ] = dist(s,x ) ento aps Relaxao(x ,v) teremos d[v] = dist(s,v).
1
Demonstrao. Aps Relaxao(x ,v) temos d[v] d[x ]+({x ,v}) = dist(s,x )+({x ,v}). Pelo exerccio 74 dist(s, x ) + ({x ,v}) = dist(s,v), portanto, d[v] dist(s,v). Pela
k
Teorema 14. Antes de cada iterao do enquanto d[v] = dist(s,v) para todo v S.
Demonstrao. No incio, antes da primeira iterao, temos S = , portanto o teorema vale trivialmente.
A prova por contradio. Suponha que em algum momento da execuo de Dijkstra(G,s) exista u S tal que d[u] dist (s, u) e, sem perda de generalidade, suponha que u o
primeiro vrtice inserido em S e com d[u]dist(s,u). Seja P um caminho mnimo com extremos s e u em G. Esse caminho existe pela proposio 12(b).
Seja {x, y} E(G) a primeira aresta de P no sentido de s para u com x S e y S no momento da execuo imediatamente anterior a u entrar em S. Notemos que, nesse
11/12/2013 10:59
22 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
onde a ltima desigualdade vem da proposio 12(a). Mas, d[u] d[y] pois ambos esto em S e u foi escolhido, assim d[u] = dist(s,u) e temos uma contradio.
A correo do algoritmo de Dijkstra segue facilmente do teorema acima; antes da ltima iterao do lao vale S = V (G) e a afirmao do teorema que d[v] est correto para
todo v V (G).
Observao 12 (leia esse aviso antes). A prova desse teorema usa uma tcnica de prova chamada de invariante do lao. Veja mais exemplos aqui e aqui.
onde Ti (u) o tempo gasto no linha i para u dado na linha 3. Se o mnimo determinado fazendo comparaes ento em cada rodada o custo
|S| 1, portanto,
Logo uV T3(u) + T4(u) + T5,6(u) = O(|V |2). Levando em conta a complexidade de da iicializao temos O(|V |) + O(|V |2) = O(|V |2).
Outra possibilidade usar fila de prioridades para determinar o mnimo: No caso de fila de prioridades implementada por heap binria O(|V
|) o tempo para construir uma fila de prioridade, portanto Inicie(G,s) tem complexidade O(|V |). A remoo da linha 3 tem o custo O(log(|S|)) de
refazer a heap, logo T3(u) = O(log |V |) para todo u V . Insero em S pode ser feita em tempo constante, ou seja, T4(u) = O(1). Agora, T5,6(u)
pode ser escrita como
Cada vez que a linha 6 de Dijkstra executada pode ser necessria uma atualizao da heap. Essa operao toma tempo O(log |V |). Logo
11.1. Exerccios.
Exerccio 76.Construa um grafo com pesos que podem ser negativos e no qual algoritmo de Dijkstra devolve resposta errada.
Exerccio 77.Considere o seguinte algoritmo que recebe um grafo com pesos nas arestas e um par w,v de vrtices desse grafo e devolve uma
seqncia de vrtices w = v1,v2,,vk = v.
Imprime_caminho_minimo
seja
subconjunto vazio de
;
;
;
;
construa uma fila de prioridades
no-vazio
;
insira
em ;
11/12/2013 10:59
23 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
;
;
diferente de nil
empilhe
em ;
;
imprima ;
no-vazia
imprima (desempilhe
).
;
vezes
em
em
Relaxao
em
em
;
faca
devolva falso,
devolva verdadeiro.
Seja G um grafo com pesos nas arestas, possivelmente negativo. Prove que independente do nmero de vezes que a Relaxao foi executado,
sempre valem:
(a) dist G (s,w) distG(s,u) + (u,w), para toda aresta {u,w} E(G);
(b) d[v] distG(s,v) para todo v V (G), e uma vez que vale a igualdade o valor de d[v] no muda aps qualquer execuo de Relaxao;
(c) se distG(s,v) = ento d[v] = ;
(d) se s, ,u,w caminho mnimo e d[u] = distG(s,u) ento Relaxao(u,w) resulta em d[w] = distG(s,w);
(e) seja s = v0,v1,v2,,vk1,vk = w um caminho mnimo. Se ocorrem as relaxaes em (v0,v1), (v1,v2),, (vk1 , vk ), nessa ordem e com possveis
outras relaxaes intermedirias, ento teremos no final da seqncia d[w] = distG(s,w).
(f) Prove que o algoritmo de BellmanFord devolve o valor booleano prometido;
(g) conclua que o algoritmo de BellmanFord funciona corretamente.
Observao 13 (leia esse aviso antes). Veja as entradas no Wikipedia para algoritmo de BellmanFord.
Exerccio 81.Prove que a complexidade do algoritmo de BellmanFord O(|V ||E|).
Exerccio 82 (Algoritmo de Floyd-Warshall). Seja G = (V,E,) um grafo com pesos nas arestas representado pela matriz
11/12/2013 10:59
24 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
A seguinte estratgia determina distG(i,j) para todos i,j V usando uma tcnica para projeto de algoritmos conhecida como programao
dinmica: Para todo k {0,1,,|V |} denotamos por [k] o subconjunto {1,2,,k} V , com [0] = . Dizemos que o caminho P = i,v0,,vt,j um
[k]-caminho se o seus vrtices internos v0,,vt pertencem a [k]. Com isso podemos definir uma variante da distncia que chamaremos de
[k]-distncia entre i e j como o comprimento do menor [k]-caminho que liga i a j e denotada por distk(i,j), com dist0(i,j) = aij.
Figura 18: O nico [0]-caminho que liga 3 e 4 3,4; os [1]-caminhos que ligam 3 e 4 so 3,4 e 3,1,4; os [2]-caminhos que ligam 3 e 4 so
3,4, 3,1,4, 3,2,4, 3,1,2,4 e 3,2,1,4, esses so tambm todos os [3]-caminhos e [4]-caminhos que ligam 3 e 4. No grafo representado
acima, d0(3,4) = 5, d1(3,4) = 4 e d2(3,4) = d3(3,4) = d4(3,4) = 3. Tambm, d0 (1,2) = d1(1,2) = d2(1,2) = 10, d3(1,2) = 4 e d4(1,2) = 3.
Por definio, a [k + 1]-distncia o comprimento do menor [k + 1]-caminho e a [k]-distncia o comprimento do menor [k]-caminho; a
diferena entre esses caminhos que no primeiro, os [k + 1]-caminhos, possvel que o vrtice k + 1 seja vrtice interno e no segundo no, pois
[k + 1] = [k] {k + 1}. Dessa forma,
(29)
Resumindo:
Floyd-Warshall
e
;
e
em V
em V
.
Prove que o tempo de execuo O(|V |3) e que o algoritmo est correto (segue de (29)).
Observao 14 (leia esse aviso antes). Veja a entrada no Wikipedia para algoritmo de FloydWarshall.
Exerccio 83.Determine di(j,k) para toda terna (i,j,k) V 3 no grafo da figura 18.
Exerccio 84.A seguinte verso do algoritmo de FloydWarshall funciona corretamente?
Floyd-Warshall
e
em V
;
e
em V
.
Exerccio 85.Fecho transitivo: Se D = (V,E) um grafo dirigido ento o fecho transitivo de D o grafo D = (V, E ) onde
Escreva um algoritmo de tempo O(|V |3) para determinar o fecho transitivo de um grafo.
12. Conexidade
Um grafo G conexo se no-vazio e quaisquer dois vrtices de G so ligados por um caminho.
Dizemos que H um subgrafo conexo maximal de G se no existe um subgrafo conexo F G tal que H F. Os subgrafos conexo maximais
de um grafo qualquer so os componentes conexos do grafo. Por exemplo, no grafo do exemplo 1 temos quatro componentes conexos, a saber,
induzidas pelos conjuntos de vrtices {1,2,5}, {3,4}, {6,7} e {8}.
Um vrtice v V num grafo conexo G = (V,E) chamado de articulao (ou vrtice de corte) se a remoo do vrtice v e das arestas de E(v)
em G resulta num grafo desconexo, isto , o grafo G v definido por V {v},E E(v) desconexo.
11/12/2013 10:59
25 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Um grafo sem articulaes chamado de biconexo. Os subgrafos biconexos maximais de um grafo G qualquer so chamados de
componentes biconexos de G.
Exemplo 20.No grafo do diagrama na figura 19 so articulaes os vrtices 1,3,7,9.
12.1. Exerccios.
Exerccio 86. Dado G = (V,E) escrevemos u v, para quaisquer vrtices u e v de G, se e somente se u = v ou existe um caminho ligando u a v em
G. Mostre que uma relao de equivalncia sobre V e caracterize as classes de equivalncia dessa relao.
Exerccio 87. Mostre que se G = (V,E) conexo ento G e = (V,E \{e}) conexo para toda aresta e que pertence a
algum circuito de G.
Exerccio 88. Mostre que se (G) 2 ento os componentes conexos de G ou so caminhos ou so circuitos.
Exerccio 89.Seja H um subgrafo gerador de G, isto , H G e V (H) = V (G). Mostre que se H conexo ento G
conexo.
Exerccio 90.Seja G um grafo com n vrtices. Considere os graus dos vrtices em ordem crescente, (G) = d1 d2
11/12/2013 10:59
26 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
|V (G)| > k e
no existe um U V (G) de cardinalidade |U| < k tal que G U desconexo.
Assim, todo grafo no-vazio 0-conexo, todo grafo no-trivial e conexo 1-conexo e todo grafo biconexo com pelo menos trs vrtices
2-conexo. A conexidade de G o maior inteiro k para o qual G k-conexo
(30)
(i) Prove que todo grafo k-conexo tambm -conexo para todo < k.
(ii) Prove ou refute: para todo G vale (G) (G).
(iii) Prove que para todo G k-conexo vale |E(G)| k|V (G)|2.
Exerccio 97.Dados k 2 e n > k vamos construir o grafo Hn,k = (V,E) sobre V = 0,1,,n 1 com conjunto de arestas que depende da paridade
de k:
1. Se k par, digamos k = 2r, ento
(31)
2. Se k mpar, digamos k = 2r + 1, ento
(2.1) Se n par,
(32)
(2.2) Se n mpar,
(33)
Abaixo temos, respectivamente, os diagramas dos grafos H8,4, H8,5 e H9,5.
G rvore;
para quaisquer x,y V existe um nico caminho em G ligando x a y;
G conexo minimal: G conexo e G e desconexo, para qualquer e E;
G acclico maximal: G acclico e G + xy contm circuito, para quaisquer x,y V no adjacentes.
Na prova do teorema usaremos o fato de o grau mnimo de toda rvore com pelo menos trs vrtices ser 1. Isso porque se o grau mnimo fosse
pelo menos 2 ento a proposio 11 garante que o grafo teria circuito.
Chamamos de folha todo vrtice de grau 1 numa rvore.
Demonstrao do Teorema 15. Para G trivial o teorema vale trivialmente. Se G tem ordem 2 ento G = K2 e a verificao fcil. Vamos supor
que G tem pelo menos 3 vrtices.
Vamos mostrar (1)(2)(3)(4)(1).
[(1)(2)] Seja G uma rvore. Suponha que existam dois caminhos distintos x = x1,x2,,xn = y e x = y1 , y2 ,,ym = y ligando x a y e defina
11/12/2013 10:59
27 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Esses ndices esto bem definidos, como os caminhos so distintos 1 p < min{m,n} e p < j n. Agora, xp , xp+1 , ,xq,y1,y2,,yp um
circuito em G, uma contradio. Assim, o caminho que liga x a y nico.
[(2)(3)] Seja G tal que (2) vale. Por hiptese G conexo. Para toda aresta e = xy E temos que P = x,y o nico caminho que liga x a y,
portanto, G e desconexo.
[(3)(4)] Seja G conexo minimal. Se G contm circuito, ento para qualquer e E(G) que pertena a um circuito temos que G e conexo
(exerc. 87), uma contradio. Agora, seja x,y V no adjacentes em G; como G conexo existe um caminho, digamos P = x,v1,,vk,y, ligando x
a y. Em G + xy temos o circuito x, v1 , , vk ,y,x.
[(4)(1)] Seja G um grafo acclico maximal. Como G acclico s precisamos mostrar que conexo. Observamos que se no existe
caminho ligando x a y, ento G + xy no contm circuito, uma contradio.
Dessa forma, fica estabelecida a equivalncia das proposies.
Como conseqncia do teorema 15 temos o seguinte corolrio.
Corolrio 16. Uma rvore com n vrtices um grafo conexo com o menor nmero possvel de arestas dentre todos os grafos conexos com n
vrtices.
Finalmente, vamos mostrar quantas arestas tem um grafo conexo minimal sobre n vrtices.
Lema 17.Toda rvore com n vrtices tem n 1 arestas.
Demonstrao. Vamos provar por induo em n 1 que a seguinte afirmao vale: se um grafo com n vrtices uma rvore ento o nmero
de arestas n1. No grafo com 1 vrtice o nmero de arestas 0 (base da induo). Vamos assumir que a afirmao acima vale para n 1, onde
n 2.
Agora, seja G uma rvore com n vrtices. Tome v V (G) uma folha de G. O grafo Gv uma rvore (justifique) com n 1 vrtices e pela
hiptese indutiva |E(G v)| = n 2. Como |E(v)| = 1 temos que |E(G)| = n 1. Portanto, pelo Princpio de Induo Finita a afirmao acima vale
para todo n 1.
13.1. rvores geradoras.
Se o subgrafo gerador T G uma rvore ento chamamos T de rvore geradora de G.
Todo grafo conexo tem uma rvore geradora: Seja G um grafo conexo e seja T G um subgrafo gerador de G conexo e com o menor nmero
de arestas possvel. Se T contm circuito ento para qualquer aresta e de um circuito T e conexo e tem menos arestas que T, uma contradio.
Desse fato, podemos concluir que a recproca do lema 17: suponha que G conexo, com n vrtices e n 1 arestas. Seja T G uma subrvore
geradora de G. Como acabamos de mostrar T tem n 1 arestas, logo T = G. Decorre que G uma rvore.
Teorema 18.Um grafo com n vrtices uma rvore se, e somente se, conexo e o nmero de arestas n 1.
Determinar uma rvore geradora de um grafo conexo fcil e rpido e j sabemos como fazer: o subgrafo induzido pelo conjunto de arestas
(34)
onde o vetor pai como no algoritmo 8.2.1.
Exemplo 21.Um grafo conexo e uma rvore geradora determinada por uma busca em profundidade.
Figura 21: T a rvore geradora de G definida pelo vetor pai de uma busca em profundidade rotulada.
13.2. Exerccios.
11/12/2013 10:59
28 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccio 98.Determine o nmero de arestas de uma floresta com n vrtices e com k componentes conexos.
Exerccio 99.Desenhe todas as rvores no-isomorfas com 5 vrtices e todas as rvores no-isomorfas com 7 vrtices e com grau mximo pelo
menos 4.
Exerccio 100. Mostre que toda rvore T tem pelo menos (T) folhas.
Exerccio 101. Prove que o conjunto de arestas {pai[v],v} definido por uma busca em profundidade rotulada induz uma rvore.
Exerccio 102. Seja G um grafo. Mostre que as seguintes afirmaes so equivalentes:
(a) G conexo e |E(G)| = |V (G)| 1;
(b) |E(G)| = |V (G)| 1 e G no contm circuito.
(c) G uma rvore;
Exerccio 103. Uma floresta um grafo acclico. Considere uma floresta F com n vrtices e m arestas.
(a) Qual o nmero mximo de vrtices num componente conexo de F?
(b) Mostre que h pelo menos max{n 2m,0} vrtices de grau zero.
(c) Mostre que se m < n2 ento resta pelo menos um vrtice de grau zero.
14. rvores geradoras de custo mnimo em grafos com peso nas arestas
Dado um grafo conexo com pesos nas arestas G = (V,E,), onde : E , definimos o custo de um subgrafo H G como
O problema no qual estaremos interessados a partir de agora : qual o custo do subgrafo gerador conexo de G mais barato? Em outras
palavras, queremos determinar S E(G) tal que
Uma rvore geradora de G de custo mnimo tambm chamada de rvore geradora mnima do grafo G.
14.1. Exerccios.
Exerccio 104. Mostre que se e uma aresta de peso mnimo em G ento e pertence a alguma rvore geradora mnima.
Exerccio 105. Mostre que se e uma aresta de peso mximo em G e pertence a um circuito de G ento existe uma rvore geradora mnima de (V
(G),E(G) \{e}) que tambm uma rvore geradora mnima de G. Mostre que o mesmo vale para toda aresta de peso mximo de todo circuito de
G.
Exerccio 106. Mostre que para qualquer U V (G) no-vazio, a aresta de menor custo em E(U,U) tem que pertencer a toda rvore geradora
mnima de G.
Exerccio 107. Considere a seguinte estratgia para computar uma rvore geradora de custo mnimo: dado um grafo conexo G = (V,E,),
mantemos um conjunto S (inicialmente vazio) de arestas e a cada passo escolhemos em {u, v} E \ S uma aresta boa para S, onde aresta boa para
S significa que S {{u,v}} est contido no conjunto de arestas de alguma rvore geradora mnima de G. O objetivo desse exerccio e mostrar que
no final as arestas de S induzem uma rvore geradora mnima de G.
AGM(G)
enquanto G[S] no uma rvore geradora faa
descubra uma aresta f boa para S em E(G)\S,
inserir f em S;
devolva S.
Suponha que sempre existe pelo menos uma aresta boa pra ser escolhida em cada iterao do enquanto. Prove que para qualquer G conexo,
AGM(G) constri uma rvore geradora mnima de G. (Dica: use o invariante S subconjunto de alguma rvore geradora mnima de G antes de
cada iterao do lao.)
11/12/2013 10:59
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
29 de 40
Exerccio 108. Agora, o objetivo provar a hiptese assumida no exerccio acima de que sempre h uma aresta boa pra ser escolhida. Prove que
se T uma rvore geradora mnima de G e S E(T) ento para todo U V (G) tal que o corte E(U,U) no contm arestas de S vale o seguinte:
uma aresta {u,v} de custo mnimo no corte E(U, U ) boa para S. (Dica: dados G,S,T como no enunciado, tome U e e E(U,U) como enunciado
e considere 2 casos, se e E(T) e se e E(T).)
Exerccio 109. Seja T G uma rvore geradora de um grafo G com peso nas arestas. Mostre que T uma rvore geradora mnima se e somente se
para toda e E(G) \ E(T), o nico circuito C de T + e tal que todas as arestas de C custam no mais que (e).
Exerccio 110. Mostre que se para todo corte em G existe uma nica aresta de custo mnimo no corte, ento a rvore geradora de custo mnimo
nica. A recproca dessa afirmao vale? Justifique.
Exerccio 111. Seja G um grafo conexo com pesos positivos nas arestas. Para todo T rvore geradora mnima e todo caminho P em T, P um
caminho mnimo em G?
Anlise de complexidade. Notemos que enquanto S evolui de at definir uma rvore geradora, esse conjunto sempre uma subfloresta de G, ou seja, uma coleo de conjuntos
disjuntos de vrtices (componentes conexos) e o teste na linha 3 acima verifica se a aresta e = {x,y} no liga vrtices do mesmo conjunto (caso contrrio, teremos um circuito) e
nesse caso, na linha 4, une o conjunto onde est o vrtice x com o conjunto do vrtice y. Assim, precisamos de estruturas de dados que, dinamicamente, representem e manipulem
conjuntos disjuntos de modo eficiente. Estruturas como essa so conhecidas na literatura como estruturas para unio-e-busca (union-find) ou estruturas de dados para conjuntos
disjuntos. Essa estruturas mantm dinamicamente uma famlia de subconjuntos disjuntos onde um elemento de cada subconjunto eleito como o representante do subconjunto e
temos as operaes
make(x):
cria o conjunto unitrio {x};
find(x):
devolve o representante do conjunto ao qual x pertence;
union(x,y):
une os conjuntos que contm x e y.
Kruskal(G)
F fila das arestas em ordem no-decrescente de peso;
para cada v em V(G) faa
make(v);
para cada u,v em F faa
se find(u) diferente de find(v) ento
insira u,v em S;
11/12/2013 10:59
30 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
union(u,v);
devolva S.
Dentre as estruturas de dados mais conhecidas para representar conjuntos disjuntos, chamamos a ateno para uma delas: a representao por floresta com unio por rank e busca
com compresso de caminhos. Essa representao com as heursticas mencionadas tem um timo desempenho assinttico:
Teorema 20. O tempo gasto com m operaes num universo com n elementos O((m + n) lg (n)).
16
Denotamos por lg (n) o nmero de vezes que temos que iterar lg at que o valor obtido seja menor ou igual a 1, por exemplo, lg 2 = 4.
Nesse caso, o nmero de operaes make, find e union no algoritmos de Kruskal menor que 2(|E| + |V |), portanto o tempo do algoritmo O((|E| + |V |) lg |V |) para as
operaes (teorema 20) mais O(|E| log |E|) para a ordenao das arestas; resultando O(|E| log |E|).
Exerccios.
Exerccio 112. Mostre que para toda rvore geradora mnima T G existe uma ordenao nas arestas de G tal que T a rvore devolvida pelo
algoritmo de Kruskal.
Exerccio 113. Suponha que todos os pesos das arestas de G so positivos. Mostre que qualquer subconjunto de arestas que induz um subgrafo
conexo e tem peso total mnimo uma rvore. D um exemplo com pesos no-positivos onde a concluso no vale.
Exerccio 114. Escreva uma verso do algoritmo de Kruskal que, ao invs de ordenar as arestas por custo, usa uma fila de prioridades (heap, por
exemplo) onde a maior prioridade da aresta fora de S de menor custo. Determine a complexidade dessa implementao. Essa verso do
algoritmo mais eficiente?
Exerccio 115. Suponha que os pesos das arestas so inteiros de 1 at |V |. Quo rpido voc consegue fazer o algoritmo de Kruskal? E se os pesos
das arestas so inteiros de 1 at uma constante m?
Exerccio 116. Escreva um algoritmo que constri uma rvore geradora mnima cuja aresta de maior peso tem peso mnimo dentre todas as
rvores geradoras do grafo.
escolha ;
;
seja
insira
insira
devolva .
, com
17. Emparelhamento
Num grafo G = (V,E), dizemos que M E um emparelhamento se as arestas de M so duas-a-duas no-adjacentes, ou seja, e f = para
quaisquer e,f M. De modo equivalente, chamamos M de emparelhamento se G[M] um subgrafo 1-regular.
Exemplo 22.Considere o grafo dado pelo diagrama da figura 22 abaixo. O conjunto M = {2,4},{5,6} um emparelhamento. Observamos que
pode haver vrtices nos quais no h arestas do emparelhamento incidindo, como o caso dos vrtices 1 e 3.
11/12/2013 10:59
31 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Quando um vrtice v pertence a alguma aresta e de um emparelhamento M dizemos que v coberto por M. Dessa forma, pela definio de
emparelhamento, quando v coberto por M existe uma nica aresta e E(v) M. Se um emparelhamento cobre V (G) ento ele chamado de
emparelhamento perfeito em G.
H grafos que no admitem emparelhamento perfeito como, por exemplo, os circuitos de comprimento mpar; de fato, qualquer
emparelhamento em C tem no mximo
arestas, logo circuitos de comprimento par admitem emparelhamento perfeito, mas os de
comprimento mpar no. No exemplo da figura 22 o emparelhamento {1, 2}, {4, 5}, {3,6} perfeito, assim como o emparelhamento {1,2},
{3,5},{4,6} .
Um emparelhamento em G com o maior nmero possvel de arestas chamado de emparelhamento mximo, isto , um emparelhamento
com
(35)
arestas.
Exemplo 23.No caso dos circuitos C fcil ver que (C) =
(P
21
. No caso de caminhos,
No estudo de emparelhamentos surge um tipo especial de caminho, onde as arestas alternam entre aresta do emparelhamento e aresta fora do
emparelhamento. Um caminho P = x1,x2,,xk, para k 1, em G cujas arestas alternam entre as arestas de E(G) \ M e as arestas de M isto ,
chamado de M-alternante.
Se os vrtices extremos do caminho M-alternante no so cobertos por M ento chamamos esse caminho de M-aumentante. Como o nome
sugere, a existncia de um caminho M-aumentante P em G significa que podemos obter um emparelhamento em G com mais arestas que M. De
fato, a diferena simtrica M E(P) = (M E(P)) \ (M E(P)) um emparelhamento que cobre todos os vrtices cobertos por M e ainda cobre os
extremos de P.
Exemplo 24.Na figura 22 temos M = {2,4},{5,6} e o caminho M-aumentante P com E(P) = {1,2},{2,4},{4,5},{5,6},{6,3} . A diferena
simtrica desses conjuntos
11/12/2013 10:59
32 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Resta provar que M E(P) emparelhamento. Suponha que no, ento existem duas arestas de M E(P) adjacentes, digamos que e,f M
E(P) com e f = x. Dessa forma, x deve ser um vrtice interno em P, portanto, deve estar coberto por uma aresta g M, logo x e g e ambas
arestas esto em M, absurdo.
Exerccios.
Exerccio 119. Prove a igualdade |M E(P)| = |(M \ E(P)) (E(P) \ M)| usada na demonstrao do teorema de Berge.
Exerccio 120. Determine o nmero de arestas num emparelhamento mximo nos grafos: Kn, Cn, Pn e Km,n.
Exerccio 121. Se M um emparelhamento em um grafo G qualquer e se P um caminho M-aumentante em G, mostre que M E(P) tambm
um emparelhamento.
Exerccio 122. Prove que uma rvore qualquer tem no mximo um emparelhamento perfeito.
Exerccio 123. Considere um grafo qualquer G de n vrtices. Mostre que um emparelhamento em G tem no mximo n2 arestas.
Exerccio 124. Mostre que o k-cubo admite emparelhamento perfeito, para todo k 2.
Exerccio 125. Duas pessoas jogam um jogo sobre um grafo G alternadamente selecionando vrtices distintos v0 , v1 , v2 , tais que, para i > 0, vi
adjacente a vi1. O ltimo jogador que conseguir selecionar um vrtice vence o jogo.
Mostre que o primeiro jogador tem uma estratgia para vencer o jogo se e somente se o grafo G no tem um emparelhamento perfeito.
Exerccio 126. Mostre que (G) = (LG) (veja a definio de LG no exerccio 16).
Exerccio 127. Prove que se M emparelhamento em G ento existe um emparelhamento mximo que cobre todos os vrtices cobertos por M.
Exerccio 128. Denotemos ci(G) o nmero de componentes conexos do grafo G com um nmero mpar de vrtices. Mostre que se G tem um
emparelhamento perfeito ento ci(G S) |S| para todo conjunto S de vrtices.
O teorema tem muitas aplicaes interessantes. Por exemplo, se dividimos um baralho em 13 montes de 4 cartas cada, ento, usando o
teorema de casamento, podemos mostrar que sempre possvel selecionar exatamente uma carta de cada pilha de modo que as 13 cartas
selecionadas contm exatamente uma carta de cada valor (s, 2, 3, , rainha, rei). Mais abstratamente, seja G um grupo e H subgrupo finito de
G. Ento, o teorema de casamento pode ser usado para mostrar que existe um conjunto X tal que X um tanto para o conjunto das classes laterais
esquerda quantoa direita de H em G.
O seguinte resultado d a condio necessria e suficiente para que exista um sistema de representantes reescrito em linguagem de teoria dos
grafos.
Teorema 22 (Teorema de Hall, 1935). Em todo grafo bipartido G = (AB,E) existe um emparelhamento que cobre A se, e somente se,
(36)
11/12/2013 10:59
33 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Demonstrao. Sejam G = (A B,E) um grafo bipartido, M um emparelhamento que cobre A e S A. Para cada x S denote por vx o vrtice
de B tal que {x,vx} M. Certamente, vx N(S). Ainda, se x S e y S com x y ento vxvy, logo |N(S)||S|.
Vamos provar por induo em |A| que se |N(S)||S| para todo S A ento existe um emparelhamento que cobre A.
Se |A| = 1 ento facilmente constatamos que existe um emparelhamento que cobre A. Seja G = (AB,E) um grafo bipartido que satisfaz (36) e
suponha que todo grafo bipartido (A B,E) com |A| < |A| que satisfaz a condio de Hall (36) tem um emparelhamento que cobre A.
Caso 1: |NG (S)| > |S| para todo S A no-vazio. Escolha uma aresta {a,b} E e considere o grafo bipartido G = G a b sobre A = A \{a} e
B = B \{b}. Nesse caso, para cada S A A vale que |NG(S)||S| e pela hiptese indutiva conclumos que existe M que cobre A. Portanto M
{{a,b}} cobre A.
Caso 2: |N(S)| = |S| para algum S A no-vazio. O grafo bipartido induzido H = G[S N(S)] satisfaz a condio de Hall (os vizinhos de S em
H so os mesmo vizinhos em G) e pela hiptese indutiva podemos concluir que existe um emparelhamento M em H que cobre S. Agora,
considere o subgrafo bipartido induzido J = G[S NG (S)] e suponha que exista X S tal que no grafo J vale |NJ(X)| < |X|. Teremos no grafo G
contrariando a hiptese de G satisfazer a condio de Hall. Assim |NJ(X)| |X| para todo X S e, pela hiptese indutiva, existe um
emparelhamento M em J que cobre S. Para concluir a demonstrao suficiente observar que M M um emparelhamento em G que cobre A.
Corolrio 23 (Forma defectiva do teorema de Hall). Em todo grafo bipartido G = (AB,E) existe um emparelhamento que cobre A a menos de d
vrtices se, e somente se,
(37)
Exerccios.
Exerccio 129. Como foi dito na observao 2, determinar (G) um problema NP-difcil. Supoha que exista um algoritmo que recebe um grafo
G e computa (G) em tempo polinomial e mostre como computar (G) em tempo polinomial.
Exerccio 130. Prove que se G bipartido ento existe um emparelhamento que cobre todos os vrtices de grau (G).
Exerccio 131. Prove que se G bipartido e regular ento G tem emparelhamento perfeito.
Exerccio 132. Seja G = (A B,E) um grafo bipartido com |A| = |B| = n. Mostre que se no existe um emparelhamento perfeito em G ento existe
um subconjunto S com |S|
tal que |N(S)| = |S| 1 e ou S A ou S B.(Dica: considere um conjunto T minimal violando a condio de Hall,
dada pela equao (36).)
Exerccio 133. Prove a seguinte implicao da forma defectiva do teorema de Hall: Se |N(S)||S|d para todo S A, ento G contm um
emparelhamento de cardinalidade |A| d.
Exerccio 134. Prove que se o grafo bipartido G = (A B,E) conexo contm exatamente um emparelhamento perfeito ento contm uma aresta
e tal que G e desconexo.
Exerccio 135. Seja G = (A B,E) um grafo bipartido e {A1,A2} uma partio de A e {B1,B2} uma partio de B. Mostre que se N(A1) B1 ento
N(B2) A2.
Exerccio 136. Seja G = (A B,E) um grafo bipartido e {A1,A2} uma partio de A e {B1,B2} uma partio de B. Mostre que se N(A1) B1 ento
B1 A2 uma cobertura.
Exerccio 137. Seja G = (AB,E) um grafo bipartido e M um emparelhamento em G. Seja U V (G) o conjunto dos vrtices cobertos por M e W
o conjunto dos vrtices de todos os caminhos M-alternantes que tm um dos extremos em A \ U. Prove que (B W) (A \ W) uma cobertura
em G.
Exerccio 138. Prove que todo emparelhamento mximo em G = (A B,E) tem cardinalidade
11/12/2013 10:59
34 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccio 139. Seja G = (A B,E) um grafo bipartido tal que |A| = |B|. Seja M a matriz indexada por A B e definida por M(u,v) = 1 se uv uma
aresta de G e M(u,v) = 0 caso contrrio. O permanente da matriz M o nmero
onde a soma se estende a todas as bijees : A B. Mostre que o permanente de M igual ao nmero de emparelhamentos perfeitos em G.
18.1. Algoritmo de Edmonds.
O algoritmo abaixo recebe um grafo bipartido G = (A B,E) e devolve um emparelhamento que cobre A ou um subconjunto S A tal que
|N(S)| < |S| cuja existncia garantida pelo teorema de Hall. Assumimos que caminhos M-alternante tm um extremo descoberto em A.
A idia do algoritmo construir caminhos alternantes a partir de um vrtice no-coberto em A. Por exemplo, no grafo da figura abaixo, o
algoritmo comea pelo vrtice a1 no-coberto por M. O prximo passo escolher um vizinho de a1. Se existir algum vizinho no coberto, ento
achamos um caminho aumentante, caso contrrio uma aresta de M incide nesse vizinho e temos um caminho alternante, no exemplo a1,b1,a3. O
prximo passo continuar a busca a partir de um vizinho dos vrtices da forma ai j escolhidos. Notemos, entretanto, que basta buscar tais
vizinhos dentre os vrtices ainda no escolhidos, no nosso exemplo, aps o estgio representado pela figura (e) abaixo no h necessidade de
considerar a aresta {a3,b5} pois o novo caminho alternante definido por essa aresta seria redundante para nossos propsitos. No estgio dado pela
figura (f) chegamos a um caminho aumentante.
Quando o algoritmo descobre um caminho aumentante, usa-o para obter um emparelhamento com mais arestas e recomea o processo. Caso
contrrio, teremos construdo caminhos alternantes que comeam num vrtice descoberto e todos terminam num vrtice coberto. Os vrtices
desses caminhos definem um conjunto que viola a condio de Hall. Por exemplo, na figura abaixo o algoritmo comea pelo vrtice no-coberto
a4. Esse vrtice tem os vizinhos b2 e b3 que esto cobertos pelas arestas a1b2 e a3b3 respectivamente. O vrtice a1 j tem todos os seus vizinhos
escolhidos, assim como a3, e no se pode mais estender os caminhos. Nesse caso N({a1,a3,a4}) = {b1,b2} e {a1,a3,a4} um obstculo para um
emparelhamento cobrir A.
11/12/2013 10:59
35 de 40
2:
existe
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
no coberto por
;
;
devolva
7:
devolva S;
escolha
existe
insere
em ;
insere
em ;
volte para 7;
caminho
;
tal que
-aumentante de
;
at
volte para 2;
reas
Matem. Qumica Fsica Biol. Psicol. Ecol.
Execute um algoritmo conhecido que determine o maior nmero de professores que a escola pode contratar.
Exerccio 142. Faa uma anlise detalhada da complexidade do algoritmo de Edmonds.
Exerccio 143. Modifique o algoritmo Edmonds(A,B,E) para que ele devolva um emparelhamento mximo.
Exerccio 144. Seja B um grafo bipartido com bipartio A,B. Construa um grafo orientado D a partir de B orientando as arestas no sentido de X
para Y . Agora, acrescente aos vrtices de D dois novos vrtices s e t, com s ligado a todos os vrtices de X, no sentido de s para X, e com t ligado
a todos os vrtices de Y no sentido de Y para t.
Suponha que esse grafo orientado D que voc construiu modela uma rede de computadores onde cada aresta tem a capacidade de 1 unidade
de transmisso. Mostre que o fluxo mximo de s para t igual ao nmero mximo de arestas num emparelhamento em B.
19. Cobertura
Uma cobertura por vrtices em um grafo G um subconjunto U V (G) tal que eU para toda aresta e E, ou seja, toda aresta de G
encontra U.
Exemplo 25.No exemplo da figura abaixo temos o diagrama de um grafo bipartido, as arestas em destaque definem um emparelhamento M. O
subconjunto de vrtices {a1,a2,b3,b4} uma cobertura pois todas as arestas do grafo incidem em pelo menos um desses vrtices.
11/12/2013 10:59
36 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Uma cobertura mnima uma cobertura com o menor nmero possvel de vrtices que denotado por (G),
(38)
Teorema 24 (Teorema de Knig, 1931). Num grafo bipartido G = (A B,E) o tamanho de um emparelhamento mximo igual ao tamanho de
uma cobertura mnima, ou seja
(39)
Demonstrao. Para qualquer cobertura U e qualquer emparelhamento M vale que toda aresta de M tem que ter pelo menos um extremo em
U, portanto |M||U|. Em particular,
(40)
Agora, considere M um emparelhamento mximo em G e vamos construir uma cobertura C V (G) da seguinte maneira: para cada aresta
{a,b} M, onde a A e b B, escolhemos b para C se b extremo de algum caminho M-alternante, caso contrrio, escolhemos a. Note que
dessa forma temos |C| = |M|.
Se C for uma cobertura ento |C| e como |M| temos .
Vamos mostrar que C uma cobertura. Considere uma aresta qualquer {a,b} E(G), onde a A e b B, e vamos mostrar que essa aresta
encontra C. Se {a,b} M ento a aresta encontra C. Vamos supor que {a,b} no aresta de M. Como M mximo, ou a ou b ou ambos so
cobertos por M.
Se M no cobre a ento b pertence ao um caminho M-alternante P = a,b e como b coberto por M, nesse caso, b C.
Vamos supor que M cobre a e {a,b} M para algum b B, bneqb. Agora, se a C ento b C, mas isso significa que b est no extremo de
algum caminho M-alternante que chamamos de P. Se b est em P ento b extremo de algum caminho M-alternante e com isso b C. Caso
contrrio, tambm haver um caminho M-alternante com extremo b: ou P, a, b no caso a V (P), ou P,b caso a pertence a P, onde P denota um
subcaminho alternante de P com extremo em a. Em ambos os casos teremos b C pois no pode haver caminho M-aumentante G. Em todos os
casos a aresta {a,b} encontra C, portanto,
(41)
Das equaes (40) e (41) conclumos que (G) = (G).
Demonstrao. Se existe um emparelhamento M que cobre A ento tome H = (V (G),M). Para todo S A temos |NG (S)||NH(S)| = |S|.
Agora, suponha que |N(S)||S| para todo S A. Seja U uma cobertura mnima em G e tome com A = A U e B = B U. Se no existe um
emparelhamento que cobre A ento |U| < |A| pelo teorema 24. Essa ltima desigualdade implica que |B| < |A \ A|. Ainda, no h arestas de A \ A
para B \ B, pois elas no estariam cobertas por U, ou seja N(A \ A) B. Portanto
(42)
contrariando a hiptese.
Essa demonstrao bastante simples pois todo o trabalho j foi feito no Teorema de Knig. Vejamos uma demonstrao que no depende de
outros resultados.
Observao 15. O teorema de Knig no vale para grafo no-bipartido, o motivo computar a cobertura mnima um problema NP-difcil
(exerccio 129) enquanto que pode ser computado em tempo polinomial (veja notas de aula do professor Richard Karp, um notvel cientista da
computao).
Exerccios.
Exerccio 145. Na primeira prova que apresentamos do teorema de Hall deduzimos o resultado do teorema de Knig. Esses teoremas so, de fato,
equivalentes. Demonstre o teorema de Knig ( > ) a partir do teorema de Hall.
11/12/2013 10:59
37 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
Exerccios
Exerccio 146. Mostre que se G no 2-conexo ento G no hamiltoniano.
Exerccio 147. Prove que se G bipartido com bipartio V (G) = A B onde |A||B|, ento G no hamiltoniano.
11/12/2013 10:59
38 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
e no-hamiltoniano.
Exerccio 153. Suponha que existe um algoritmo (G,u,v) que determina em tempo polinomial um (u v)-caminho mnimo no grafo dirigido
com pesos reais nas arestas G. Mostre como usar esse algoritmo para determinar se G tem um circuito (orientado) hamiltoniano em tempo
polinomial. (Dica: atribua peso 1 a todas as arestas do grafo e compute (G,u,v) para todo (v,u) E(G).)
Exerccio 154. Observamos que o problema de determinar se um grafo hamiltoniano NP-completo, portanto a existncia de uma algoritmo
como acima estabelece que P=NP.
Vamos reformular essa pergunta na terminologia de Teoria dos Grafos. Dizemos que num grafo G = (V,E) uma seqncia alternada vrtice
arestavrtice que no repete arestas
(44)
com ei = {vi1 ,vi} E, para todo i {1,2,,k}, e eiej para todo ij, chamada de trilha.
11/12/2013 10:59
39 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
temos que v0 = v.
Agora suponha que e uma aresta que no aparece na trilha. Note que podemos assumir e = uvi para algum vi T, pois o grafo conexo.
Mas, isso implica que ueviei+1eve1v1ei1vi uma trilha com mais arestas que T. Portanto, T passa por todas as arestas do grafo.
Exerccios
Exerccio 155. Mostre que se G tem no mximo dois vrtices de grau mpar ento contem uma trilha euleriana.
Exerccio 156. Mostre que se G euleriano ento LG (veja exerccio 12.16, na pgina 13, para a definio de LG) euleriano.
Exerccio 157. Mostre que se G euleriano ento LG hamiltoniano.
D um exemplo onde a recproca no vale.
Exerccio 158. Um grafo euleriano pode ter uma aresta de corte?
Exerccio 159. Prove que um grafo conexo euleriano se pode ser particionado em circuitos aresta-disjuntos.
Exerccio 160. O caso a fortuna do bilionrio Bob Leo Marinho. Ele foi assassinado em sua manso e Ed Mort, o detetive internacionalmente
conhecido, que nas horas vagas estuda Teoria dos Grafos, foi chamado para investigao. O mordomo afirma que viu o faxineiro entrar no salo
da piscina (onde aconteceu o assassinato) e ento, logo em seguida, saiu do salo da piscina pela mesma porta. O faxineiro, entretanto, diz que ele
no pode ser o homem que o mordomo alega ter visto, j que ele entrou na manso por uma das portas do salo da piscina, atravessou cada
aposento, passando por cada cada porta da manso exatamente uma vez, e deixou a casa pela outra porta do salo da piscina. Ed Mort verifica a
planta da casa (veja figura abaixo). Dentro de algumas horas ele declara o caso resolvido. Quem voc acredita ter matado Bob Leo Marinho?
Exerccio 161. O algoritmo de Fleury, de 1883, descobre uma trilha euleriana fechada se o grafo dado for euleriano.
Fleury
escolha
insira
no final de
escolha
;
.
;
e, se for possvel, de forma que
Prove que se G euleriano ento a trilha definida pela seqncia vrtices adjacentes S = u1,u2,,u construda pelo algoritmo euleriana.
Determine a complexidade do algoritmo.
Exerccio 162. A figura abaixo mostra a planta da Casa dos Espelhos, um labirinto em um parque de diverses que funciona de forma inusitada:
depois que um visitante passa por uma porta, ela automaticamente trancada. Considerando que todas as portas esto inicialmente abertas,
determine se sempre possvel escapar da Casa dos Espelhos ou se algum pode ficar trancafiado para sempre em algum quarto. Se este perigo
for real, execute um algoritmo que ajuda a projetar um brinquedo mais seguro, mostrando que haver sempre a possibilidade de escapar da Casa
dos Espelhos. Voc pode alterar a planta de acordo com o algoritmo e deve mostrar um percurso completo nesta nova planta em que um visitante
pode escapar da Casa dos Espelhos de forma segura. (Dica: no modele cada porta da casa como um vrtice de um grafo.)
11/12/2013 10:59
40 de 40
http://professor.ufabc.edu.br/~jair.donadelli/disciplinas-ufpr/ci065/
11/12/2013 10:59