aleph0.info...sum ario 1 conceitos b asicos 7 1.1 grafosoes|c~iniciaisde ni . . . . . . . . . . . ....

107

Upload: others

Post on 15-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Teoria dos Grafos

Uma breve introduc~ao com algoritmos

Jair Donadelli1

ultima revisao, 24 de agosto de 2010

1A vers~ao eletronica desse texto contem hyperlinks que ilustram a discuss~ao de alguns topicos da disci-

plina. Eu tomei o cuidado de fazer ligac~oes com paginas WEB que tinham, no momento que z o acesso,

informac~oes corretas, entretanto essas paginas est~ao fora do meu controle e podem sofrer alterac~oes, portanto

leia com cautela.

Page 2: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

2

Page 3: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Sumario

1 Conceitos Basicos 7

1.1 Grafos | denic~oes iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1.1 Grau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.2 Subgrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.2.1 Clique e conjunto independente . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.2.2 Grafo bipartido e corte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.2.3 Teorema de Mantel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.3 Isomorsmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.4 Outras noc~oes de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.5 Representac~ao computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.5.1 Listas de adjacencias de G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.5.2 Matriz de adjacencias de G . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.5.3 Complexidade de algoritmos em grafos . . . . . . . . . . . . . . . . . . . . . . 20

1.6 Percursos em grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1.6.1 Percurso generico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1.7 Algoritmos de busca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.7.1 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.7.2 Busca em Profundidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2 Caminhos, circuitos e caminhos mınimos 29

2.1 Caminhos e circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.2 Caminhos mnimos em grafos com pesos nas arestas . . . . . . . . . . . . . . . . . . 33

2.2.1 Algoritmo de Dijkstra para caminhos mnimos . . . . . . . . . . . . . . . . . 34

2.2.2 Algoritmo de FloydWarshall para caminhos mnimos . . . . . . . . . . . . . 38

3 Conexidade 41

3.1 Grafos conexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.1.1 Articulac~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.2 Conexidade de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

3.2.1 Construc~ao de grafos k-conexos minimais . . . . . . . . . . . . . . . . . . . . 48

3.3 Grafos eulerianos e grafos hamiltonianos . . . . . . . . . . . . . . . . . . . . . . . . . 50

3.3.1 Grafos eulerianos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3.3.2 Grafos hamiltonianos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4 Arvores e Florestas 55

4.1 Arvores, denic~ao e caracterizac~ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.2 Arvores geradoras de custo mnimo em grafos com pesos nas arestas . . . . . . . . . 57

4.2.1 Algoritmo de JarnkPrim para arvore geradora mnima . . . . . . . . . . . . 58

4.2.2 Algoritmo de Kruskal para arvore geradora mnima . . . . . . . . . . . . . . . 59

5 Emparelhamentos 63

5.1 Emparelhamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2 Emparelhamentos e coberturas em grafos bipartidos . . . . . . . . . . . . . . . . . . 65

5.3 Algoritmo de Edmonds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

6 Grafos Dirigidos 71

6.1 Representac~ao computacional e Percurso . . . . . . . . . . . . . . . . . . . . . . . . . 71

6.2 Caminhos mnimos em grafos dirigidos com pesos nas arestas . . . . . . . . . . . . . 73

6.2.1 Algoritmo de BellmanFord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

6.3 Componentes fortemente conexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Page 4: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

4 SUMARIO

6.4 Fluxo em redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

A Algoritmos e Estruturas de dados 87

A.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

A.1.1 Correc~ao de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

A.2 Estruturas de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

A.2.1 Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

A.2.2 Estruturas de dados para representar conjuntos disjuntos . . . . . . . . . . . 92

A.2.3 Estruturas de dados para representac~ao de conjuntos disjuntos . . . . . . . . 92Indice Remissivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Indice de Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Page 5: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

SUMARIO 5

Apresentacao

O primeiro registro bibliograco da Teoria dos Grafos tem como autor o ilustre matematico

Leonhard Euler, que em 1736 desceveu uma soluc~ao para os problema da pontes de Konigsberg.

\In 1736, Euler solved the problem known as the Seven Bridges of Konigsberg. The

city of Konigsberg, Prussia was set on the Pregel River, and included two large

islands which were connected to each other and the mainland by seven bridges.

The problem is to decide whether it is possible to follow a path that crosses each

bridge exactly once and returns to the starting point. It is not: there is no Eulerian

circuit. This solution is considered to be the rst theorem of graph theory"

Wikipedia (en.wikipedia.org/wiki/Leonhard Euler)

Mapa de Konigsberg em 1652.

Fonte: http://www.preussen-chronik.de/_/bild_jsp/key=bild_kathe2.html (domnio

publico)

O termo grafo foi cunhado por James Joseph Sylvester em 1878e o primeiro livro surgiu em

1936 escrito por Denes Konig, Theorie der endlichen und unendlichen Graphen.

Nos ultimos trinta anos a Matematica Discreta tem tido cada vez mais destaque na Matematica.

Isso se deve a grande variedade de aplicac~oes em problemas modernos como os algoritmos de busca

do Google e roteamento na internet, os quais s~ao modelados por uma estrutura discreta conhecida

como Grafo.

Essa imagem do Wikipedia e do Wikimedia Commons e devida ao usuario Matt Britt e esta disponvel em http:

//en.wikipedia.org/wiki/Image:Internet_map_1024.jpg?redirect=no sob a licensa Creative Commons Attribution

2.5

\Each line is drawn between two nodes, representing two IP addresses. The length

of the lines are indicative of the delay between those two nodes. This graph re-

presents less than 30% of the Class C networks reachable by the data collection

program in early 2005. Lines are color-coded according to their corresponding

RFC 1918 allocation as follows:

Page 6: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

6 SUMARIO

Grafo da Internet em 2005.

Dark blue: net, ca, us

Green: com, org

Red: mil, gov, edu

Yellow: jp, cn, tw, au, de

Magenta: uk, it, pl, fr

Gold: br, kr, nl

White: unknown"

Em contraste com a sua origem recreativa, a moderna Teoria dos Grafos usa tecnicas sostica-

das com conex~oes profundas com outros ramos da Matematica, da Ciencia da Computac~ao e com

aplicac~oes numa variedade de outras areas como Fsica [11], Qumica [26], Biologia [5, 23, 24]. S~ao

conhecidas muitas aplicac~oes de grafos em disciplinas da Matematica como Teoria da Medida [20],

Teoria dos Grupos [22], Teoria de Codigos [25], Criptograa [16] e Complexidade Computacional

[10, 18, 27, 28]. Ainda, encontramos aplicac~oes em diversos problemas de interesse pratico como

Page 7: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

SUMARIO 7

alocac~ao de registradores para otimizac~ao de codigo gerado por compiladores [4, 17], alocac~ao de

processos para processadores [8], alocac~ao de frequencia para radios moveis [14] e trafego aereo [2].

Dentre as aplicac~oes modernas, a teoria de redes complexas (grosso modo, grafos com estrutu-

ras n~ao-triviais) desempenha um papel importante em uma ampla variedade de disciplinas como

Sociologia e Epidemiologia (redes sociais), Biologia (redes de regulac~ao), Engenharia (redes de co-

municac~ao).

Na Biologia as aplicac~oes incluem, por exemplo, determinar o papel das protenas ou genes de

func~ao desconhecida. De um modo geral, tres classes de redes biomoleculares tem atrado mais

atenc~ao atualmente: redes metabolicas de reac~oes bioqumicas, redes de interac~ao proteica e as

redes de regulac~ao que descrevem as interac~oes entre os diferentes reguladores genes.

Sımbolos

N Denota o conjunto dos numeros naturais;

Z denota o conjunto dos numeros inteiros;

Q denota o conjunto dos numeros racionais;

R denota o conjunto dos numeros reais;

R+ denota o conjunto dos numeros reais positivos;

|X| denota a cardinalidade do conjunto X;

para X ⊆ V denotamos por X o complemento de X em V, isto e, o conjunto V \ X;

(V2

)denota o conjunto dos subconjuntos de V de cardinalidade 2(

V

2

)=X ⊆ V : |X| = 2

;

bxc = maxn ∈ Z : n ≤ x para todo x real;

lg(x) e a notac~ao para logaritmo na base 2;

para qualquer famlia de conjuntos A1, A2, . . . , Am

m⋃i=1

Ai = A1 ∪A2 ∪ · · · ∪Am;

denotamos por A4B a diferenca simetrica dos conjuntos A e B, isto e, A4B = (A∪B)\(A∩B);

Notac~ao assintotica : Sejam fn e gn sequencias de numeros reais, onde fn > 0 para todo

n sucientemente grande. Usaremos as seguintes notac~oes para o comportamento assintotico

dessas sequencias:

– gn = O(fn), quando n → ∞, se existem constantes positivas c ∈ R e n0 ∈ N tais que

|gn| ≤ cfn, para todo n ≥ n0;– gn = Ω(fn), quando n → ∞, se existem constantes positivas C ∈ R e n0 ∈ N tais que

gn ≥ Cfn, para todo n ≥ n0;– gn = Θ(fn), quando n→∞, se existem constantes positivas c, C ∈ R e n0 ∈ N tais que

Cfn ≤ gn ≤ cfn, para todo n ≥ n0;

Page 8: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

8 SUMARIO

Page 9: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 1

CONCEITOS BASICOS

Neste captulo introduzimos os conceitos mais basicos da Teoria dos Grafos dos pontos de vista

combinatorio e algortmico, tambem aqui convencionamos as notac~oes que ser~ao usadas por todo o

texto. Nas primeiras sec~oes, apresentamos a denic~ao de grafo e alguns parametros e aspectos estru-

turais de grafos. Os conceitos algortmicos aparecer~ao a partir da setima sec~ao onde representac~oes

de grafos apropriadas para tratar problemas computacionais s~ao apresentadas. O captulo termina

com um algoritmo para percorrer grafos e que serve como base para muitos outros algoritmos que

veremos nos captulos posteriores.

1.1 Grafos — definicoes iniciais

Um grafo e um par ordenado de conjuntos nitos (V, E) tal que E ⊆(V2

). Cada elemento de V

e chamado de vertice do grafo e cada elemento de E e chamado de aresta do grafo.

Todo grafo pode ser representado geometricamente por um diagrama. No plano, desenhamos

um ponto para cada vertice e um segmento de curva ligando cada par de vertices que determinam

uma aresta (gura 1.1). Claramente, a representac~ao geometrica de um grafo n~ao e unica, mas para

cada representac~ao existe um unico grafo.

Exemplo 1. Os conjuntos

V = 1, 2, 3, 4, 5, 6, 7, 8

E =1, 2, 1, 5, 2, 5, 3, 4, 6, 7

denem um grafo (V, E) e um diagrama desse grafo e apresentado na gura 1.1 a seguir.

2

4

7

8

13

5

6

Figura 1.1: Representac~ao geometrica (ou diagrama) do grafo.

Se G denota o grafo que e denido pelo par (V, E) ent~ao escrevemos G = (V,E).

Sejam u e v vertices de um grafo G; se u, v e uma aresta de G, ent~ao dizemos que u e v s~ao

vertices adjacentes, tambem dizemos que u e v s~ao extremos de uma aresta; dizemos que duas

arestas s~ao arestas adjacentes se elas tem um vertice em comum.

Quando nos referimos a um grafo conhecido G sem especicarmos o conjunto dos vertices e o con-

junto das arestas que denem G esses passam a ser referidos como V(G) e E(G), respectivamente.

Para um grafo G qualquer, chamamos |V(G)| de ordem de G e chamamos |V(G)| + |E(G)| de

tamanho de G, por exemplo, o grafo do exemplo 1 tem ordem 8 e tamanho 13. Um expoente em

G explicta a ordem de G, assim quando queremos ressaltar que G e um grafo de ordem n, para

algum n ∈ N, escrevemos Gn.

Chamamos G0 = (∅,∅) de grafo vazio e todo grafo de ordem 1 de grafo trivial.

Page 10: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

10 Conceitos Basicos

1.1.1 Grau

Para um vertice v qualquer num grafo G, denimos os conjuntos

EG(v) =x, y ∈ E(G) : x = v ou y = v

, (1.1)

e

NG(v) =w ∈ V(G) : v,w ∈ E(G)

, (1.2)

esse ultimo chamado de vizinhanca de v. Os elementos de NG(v) s~ao chamados de vizinhos de v.

Para todo v ∈ V(G), o numero de vizinhos de v e chamado de grau do vertice v no grafo G.

Os graus dos vertices de um grafo formam um dos seus parametros importantes e por isso recebem

uma notac~ao especial. Para um grafo G = (V, E) n~ao-vazio

grau de u em G: dG(u) = |NG(u)| (1.3)

grau mınimo em G: δ(G) = mindG(u) : u ∈ V (1.4)

grau maximo em G: ∆(G) = maxdG(u) : u ∈ V (1.5)

grau medio em G: d(G) =1

|V |

∑u∈V

dG(u) (1.6)

Observac~ao 1. As vezes suprimimos osndices G ou os argumentos (G) para simplicar a notac~ao;

escrevemos, por exemplo, E(v) e N(v) para os conjuntos denidos acima, e escrevemos ∆ para o

grau maximo e d(v) para o grau de v. Fazemos isso sempre que n~ao ha ambiguidade, ou perigo de

confus~ao.

Exemplo 2. No exemplo 1 encontramos d(7) = |E(7)| = d(6) = |E(6)| = 1 e d(5) = |E(5)| = 2.

Tambem, o grau maximo e ∆(G) = 2, o grau mnimo e δ(G) = 0 e o grau medio e d(G) = 5/4 = 1, 25.

Teorema 1. Para todo grafo G vale que∑u∈V(G)

dG(u) = 2|E(G)|. (1.7)

Demonstrac~ao. Seja (V, E) em grafo e dena o conjunto X = (u, e) ∈ V×E : u ∈ e e vamos contar

seu numero de elementos de duas maneiras distintas.

Primeiro, cada vertice u participa de d(u) elementos de X, portanto

|X| =∑u∈V

d(u). (1.8)

Depois, cada aresta e esta presente em dois elementos de X, logo

|X| = 2|E|. (1.9)

De (1.8) e (1.9) temos (1.7).

Corolario 2. Em todo grafo o numero de vertices com grau mpar e par.

Demonstrac~ao. Seja G um grafo. Denote por I o subconjunto formado pelos vertices em V(G) de

grau mpar e denote por P o subconjunto dos vertices de grau par. Usando que I ∩ P = ∅ e que

I∪ P = V(G) podemos escrever∑u∈V dG(u) =

∑u∈I dG(u) +

∑v∈P dG(v), e do Teorema 1, temos

2|E(G)|︸ ︷︷ ︸par

=∑u∈I

dG(u) +∑v∈P

dG(v)︸ ︷︷ ︸par

, (1.10)

portanto devemos ter∑u∈I dG(u) par, o que semente e possvel quando |I| e par.

Page 11: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Grafos | denic~oes iniciais 11

Exercıcios

Exerccio 1. Um qumico deseja embarcar os produtos A,B,C,D, E, F, X usando o menor numero de

caixas. Alguns produtos n~ao 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 tambem reage com F e com

D e vice-versa. Descreva o grafo que modela essa situac~ao, mostre um diagrama desse grafo e use-o

para descobrir o menor numero de caixas necessarias para embarcar os produtos com seguranca.

Exerccio 2. Adaltina esperava as amigas Brandelina, Clodina, Dejaina e Edina para um lanche

em sua casa. Enquanto esperava preparou os 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

situac~ao, mostre um diagrama desse grafo e use-o para descobrir se e possvel que cada amiga de

Adaltina tenha o lanche que gosta. Se e possvel, determine o numero de soluc~oes.

Exerccio 3. Dena todos os grafos sobre o conjunto de vertices 1, 2, 3, 4 e tamanho 6.

Exerccio 4. Para todo n ∈ N, qual e o numero maximo de arestas que pode ter um grafo com n

vertices?

Exerccio 5. O complemento de um grafo G, denotado por G, e o grafo que tem o mesmo conjunto

de vertices de G e dois vertices formam uma aresta em G se e somente se nao formam uma aresta

de G:

V(G) = V(G),

E(G) =

(V(G)

2

)\ E(G) =

u, v ⊂ V(G) : u, v 6∈ E(G)

.

De o complemento dos seguintes grafos

(i) G dado por

V(G) = 1, 2, 3, 4, 5,

E(G) = 1, 2, 1, 3, 1, 4, 1, 5, 2, 3, 2, 4, 2, 5, 3, 4, 3, 5, 4, 5.

(ii) H dado por

V(H) = 1, 2, 3, 4, 5, 6, 7,

E(H) = 1, 2, 1, 3, 2, 4, 2, 5, 3, 6, 3, 7.

(iii) B dado por

V(B) = a, b, c, 1, 2, 3,

E(B) = a, 1, a, 2, a, 3, b, 1, b, 2, b, 3, c, 1, c, 2, c, 3.

Exerccio 6. Dena a uniao dos grafos G e H por

G ∪H =(V(G) ∪ V(H), E(G) ∪ E(H)

).

A uni~ao G ∪H e um grafo?

Exerccio 7. Dena a interseccao dos grafos G e H por G ∩H =(V(G) ∩ V(H), E(G) ∩ E(H)

). A

intersecc~ao G ∩H e um grafo?

Exerccio 8. Um grafo e chamado de completo sobre V se todo par de vertices de V e uma aresta

do grafo, ou seja E =(V2

). Um grafo completo com n vertices e denotado por Kn. Prove que

G ∪G = Kn.

Page 12: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

12 Conceitos Basicos

Exerccio 9. Considere o caso geral do exerccio 1: Um qumico deseja embarcar os produtos

p1, p2, . . . , pn usando o menor numero de caixas. Alguns produtos n~ao podem ser colocados numa

mesma caixa porque reagem. Seja G o grafo que modela esse problema, onde vertices s~ao produtos

e arestas os pares que reagem, e denote por χ(G) o numero de mnimo de caixas de modo que seja

possvel encaixotar os produtos com seguranca. Prove que

χ(G) ≤ 12+

√2m+

1

4

onde m e o numero de pares de produtos que reagem. (Dica: Em uma distribuic~ao mnima de

caixas, a cada duas caixas, precisa existir pelo menos um produto em uma caixa reagindo com um

produto da outra caixa. Assim podemos garantir um numero mnimo de arestas para o grafo, m.)

Exerccio 10. Chico e sua esposa foram a uma festa com tres outros casais. No encontro deles

houveram varios apertos de m~ao. Ninguem apertou a propria m~ao ou a m~ao da(o) esposa(o), e

ninguem apertou a m~ao da mesma pessoa mais que uma vez.

Apos os cumprimentos Chico perguntou para todos, inclusive para a esposa, quantas m~aos cada

um apertou e recebeu de cada pessoa uma resposta diferente. Quantas m~aos Chico apertou?

Exerccio 11. Prove que δ(G) ≤ d(G) ≤ ∆(G) para todo grafo G.

Exerccio 12. Decida se pode existir um grafo G com vertices que tem graus 2, 3, 3, 4, 4, 5, respec-

tivamente. E graus 2, 3, 4, 4, 5? Se sim, descreva-os.

Exerccio 13. Seja G um grafo com 14 vertices e 25 arestas. Se todo vertice de G tem grau 3 ou 5,

quantos vertices de grau 3 o grafo G possui?

Exerccio 14. Prove que existem pelo menos dois vertices com o mesmo grau em todo grafo de

ordem pelo menos dois. (Dica: comece por um caso pequeno, por exemplo ordem 3, antes de tentar

resolver o caso geral.)

Exerccio 15. Para um numero natural r, um grafo e r-regular se todos os vertices tem grau r.

Para um grafo r-regular com n vertices e m arestas, expresse m em func~ao de n e r.

Exerccio 16. De exemplo de um grafo 3-regular que n~ao e completo.

Exerccio 17. Dado G, o grafo linha de G, denotado por LG, e o grafo cujos vertices s~ao as

arestas de G e um par de vertices dene uma aresta em LG se, e somente se, esses vertices s~ao

arestas adjacentes em G. Dado G determine |V(LG)| e |E(LG)|.

1

2

3

4

5

646

12

35

23

34

25

56

G LG

Figura 1.2: Exemplo de um grafo e o respectivo grafo linha.

Exerccio 18. Determine χ(G) e χ(LG) para os grafos denidos pelos diagramas da gura 1.2, em

que χ e o parametro denido no exerccio 9.

Exerccio 19. Prove que num grafo G com δ(G) > 0 e |E(G)| < |V(G)| existem pelo menos dois

vertices de grau 1.

Page 13: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Subgrafos 13

1.2 Subgrafos

Dizemos que o grafo H e 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 e subgrafo de G.

Exemplo 3. Considerando o grafo G do exemplo 1 temos que

G ′ =(1, 2, 5

,1, 5, 5, 2, 1, 2

)e

G ′′ =(3, 5, 6

,∅)

s~ao subgrafos de G, enquanto que

H =(1, 2, 3

,1, 2, 3, 4

),

I =(1, 2, 3, 4, 9

,1, 2, 3, 4

)e

J =(1, 2, 3, 4, 8

,1, 2, 3, 4, 1, 8

)n~ao s~ao subgrafos de G pois: H n~ao e grafo, em I n~ao vale V(I) ⊆ V(G) e em J n~ao vale E(J) ⊆ E(G).

Dados um grafo G e um subconjunto de vertices U ⊆ V(G), escrevemos G[U] para o subgrafo

induzido por U que e o subgrafo

G[U] =

(U,E(G) ∩

(U

2

)).

Analogamente, denimos subgrafo induzido por um subconjunto de arestas. SeM = e1, e2, . . . , em ⊆E(G), ent~ao o subgrafo induzido por M, denotado G[M], tem como conjunto de vertices e1 ∪e2 ∪ · · · ∪ em e como conjunto de arestas o proprio M, ou seja,

G[M] =( m⋃i=1

ei,M).

Exemplo 4. Dos grafos G, H e I cujos diagramas s~ao dados na gura 1.3, podemos dizer que H e

um subgrafo induzido de G enquanto que I e um subgrafo mas n~ao e induzido.

G H I

a b

c

d e

a

d

b

e

a

d

c

b

e

Figura 1.3: Diagrama dos grafos G, H e I.

Um subgrafo H ⊆ G onde V(H) = V(G) e chamado de subgrafo gerador. No exemplo acima

I e subgrafo gerador de G, enquanto que H n~ao e subgrafo gerador de G.

1.2.1 Clique e conjunto independente

Se o subconjunto U ⊆ V(G) induz um subgrafo completo em G ent~ao chamamos U de clique

em G. Mais especicamente, se G[U] e um grafo completo com k vertices ent~ao dizemos que U e

um k-clique em G. O caso particular de um 3-clique num grafo G e chamado de triangulo de G.

Por outro lado, se U ⊆ V(G) e tal que G[U] = (U,∅) ent~ao U e chamado de conjunto inde-

pendente de G, ou k-conjunto-independente no caso |U| = k.

Page 14: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

14 Conceitos Basicos

Exemplo 5. O subgrafo G ′ do exemplo 3 e um 3-clique e G ′′ do exemplo 3 e um 3-conjunto-

independente.

No grafo G do exemplo 1 os conjuntos 3, 5, 6 e 1, 4, 6, 8 s~ao independentes; no caso de 1, 4, 6, 8

temos um conjunto independente de cardinalidade maxima pois n~ao ha naquele grafo conjunto

independente com 5 ou mais vertices. Nesse mesmo grafo, 8, 6, 7 e 1, 2, 5 s~ao cliques, o ultimo

de cardinalidade maxima.

Observac~ao 2. O tamanho do maior clique e o tamanho do maior conjunto independente num grafo

G s~ao difceis de serem calculados computacionalmente. Eles pertencem a classe dos problemas NP-

difceis (veja [15], pagina 53). Uma consequencia desse fato e que n~ao e sabido se existe algoritmo que

resolve algum desses problemas cuja complexidade de tempo e um polinomio em |V(G)| + |E(G)|.

A descoberta de um algoritmo com complexidade de tempo polinomial no tamanho de G, ou a

prova de que ele n~ao existe, e um dos problemas n~ao-resolvidos mais importantes da atualidade, o

problema P × NP. Trata-se de um dos sete problemas do milenio [19], dos quais restam seis n~ao

resolvidos, cada um com uma recompensa de US$1.000.000,00 para uma soluc~ao, paga pelo Clay

Mathematics Institute.

1.2.2 Grafo bipartido e corte

Chamamos um grafo G de grafo bipartido se existem dois conjuntos independentes A e B em

G que particionam V(G), isto e, A e B s~ao tais que A ∩ B = ∅ e A ∪ B = V(G). Por exemplo, o

seguinte grafo e bipartido

V(G) = 1, 2, 3, 4, 5, 6, 7, 8

E(G) =1, 6, 6, 2, 3, 7, 3, 8, 7, 4, 7, 5

,

pois V(G) = 1, 2, 3, 4, 5 ∪ 6, 7, 8 e tanto 1, 2, 3, 4, 5 quanto 6, 7, 8 s~ao conjuntos independentes.

Notemos que a bipartic~ao pode n~ao ser unica, no caso do exemplo acima podemos escrever

V(G) = 6, 3, 4, 5∪ 1, 2, 7, 8 e tanto 6, 3, 4, 5 quanto 1, 2, 7, 8 s~ao conjuntos independentes. Para

evitar ambiguidades escrevemos um grafo bipartido G com bipartic~ao A,B como G = (A ∪B,E).

Sejam G um grafo, A e B ⊂ V(G) dois subconjuntos disjuntos em V(G). Denimos o subconjunto

de arestas

E(A,B) =u, v ∈ E(G) : u ∈ A e v ∈ B

; (1.11)

e o subgrafo bipartido induzido por A e B e o grafo bipartido(A ∪ B, E(A,B)

).

Observac~ao 3. Convencionamos que os grafos triviais e vazio s~ao grafos bipartidos.

Exemplo 6. A gura abaixo mostra as arestas de E(A,B) para A = 0, 1, 8 e B = 3, 4, 5, 6.

0

1

45

6

7

8

3

2

Figura 1.4: E(0, 1, 8, 3, 4, 5, 6

)e formado pelas arestas

0, 4, 0, 5, 1, 3, 1, 6, 8, 3, 6, 8

.

Page 15: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Subgrafos 15

O conjunto de arestas E(A,A) e chamado de corte definido por A. Da denic~ao de corte

podemos escrever

E(G) = E(G[A]) ∪ E(G[A]) ∪ E(A,A). (1.12)

Exemplo 7. A gura abaixo mostra as arestas de E(A,B) para A = 0, 1, 8 e B = 3, 4, 5, 6.

0

1

45

6

7

8

2

3

Figura 1.5: O corte denido pelo conjunto 0, 1, 2, 7, 8 e formado pelas arestas0, 4, 0, 5, 1, 3, 1, 6, 8, 3, 6, 8, 5, 7, 6, 7, 2, 3, 2, 4

.

1.2.3 Teorema de Mantel

Suponha que G = (V, E) e um grafo que n~ao contenha triangulo. Vamos determinar o numero

maximo de arestas que pode haver em G.

Seja A um conjunto independente em G de cardinalidade maxima. Como G n~ao contem

triangulos a vizinhanca de qualquer vertice e um conjunto independente, portanto temos

d(v) ≤ |A|, para todo v ∈ V. (1.13)

Como A e um conjunto independente em G podemos classicar as arestas de E(G) em dois tipos:

E1 s~ao as arestas de G que tem exatamente um dos extremos fora de A e E2 s~ao as arestas de G

que tem ambos extremos fora de A. Dessa forma, o numero de arestas em E e |E1|+ |E2| e∑u∈A

d(u) = |E1|+ 2|E2| ≥ |E|.

Usando (1.13) chegamos a ∑u∈A

d(u) ≤∑u∈A

|A| = |A||A|,

portanto |E| ≤ |A||A|. Usando a desigualdade entre as medias aritmetica e geometrica1

|A||A| = |A|(|V | \ |A|) ≤ |V |2

4. (1.14)

Assim, provamos o seguinte resultado que foi mostrado pela primeira vez por Mantel em 1906.

Teorema (Mantel, 1906). Se G e um grafo sem triangulos ent~ao |E(G)| ≤ |V(G)|2/4.

Esse teorema e um caso particular do famoso Teorema de Turan, que foi o princpio de um ramo

da teoria dos grafos chamada de Teoria Extremal de Grafos (veja mais sobre esse assunto em [3]).

1Desigualdade: (a1a2 · · ·an)1n ≤ a1+a2+···+an

n. O caso n = 2 e simples e pode ser derivado do fato de que

(a − b)2 ≥ 0.

Page 16: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

16 Conceitos Basicos

Exercıcios

Exerccio 20. Quantos subgrafos tem o grafo(1, 2, 3, 4, 5, 6, 1, 2

)?

Exerccio 21. Quantos subgrafos completos tem o grafo completo de ordem n?

Exerccio 22. Sejam G um grafo e M ⊆ E(G). Tome o subconjunto U =⋃e∈M e de vertices de G.

Prove ou de um contra-exemplo para G[U] = G[M].

Exerccio 23. Descubra um subgrafo induzido de

V(G) = 1, 2, 3, 4, 5, 6, 7, 8 e

E(G) =1, 2, 1, 3, 2, 3, 2, 5, 3, 6, 8, 5, 8, 6, 5, 6, 3, 4, 5, 7

1-regular e com o maior numero possvel de arestas. (Qual a relac~ao com a resoluc~ao do exerccio

2?)

Exerccio 24. Mostre que em qualquer grafo G com pelo menos 6 vertices vale: ou G tem um

3-clique e G tem um 3-conjunto-independente, ou G tem um 3-conjunto-independente e G tem um

3-clique. (Dica: exerccio 8 e princpio da casa dos pombos sobre EK6(v), para algum vertice v.)

Exerccio 25. Dado um grafo G, denotamos por α(G) a cardinalidade do maior conjunto indepen-

dente em G,

α(G) = max|A| : A ⊂ V(G) e um conjunto independente

.

Prove que se d(G) > α(G) ent~ao G contem triangulo, para todo G.

Exerccio 26. Para todo grafo G, denotamos por ω(G) a cardinalidade do maior clique em G

ω(G) = max|A| : A ⊂ V(G) e um clique

.

Prove que ω(G) = α(G).

Exerccio 27. Demonstre que as desigualdades abaixo valem para todo grafo G

(i) α(G) ≥ |V(G)|/(∆(G) + 1);

(ii) α(G) ≤ |E(G)|/δ(G), se δ(G) 6= 0;

(iii) ω(G) ≤ ∆(G) + 1.

Exerccio 28. Suponha H ⊆ G. Prove ou refute as desigualdades:

(i) α(H) ≤ α(G);

(ii) α(G) ≤ α(H);

(iii) ω(G) ≤ ω(H);

(iv) ω(H) ≤ ω(G).

Exerccio 29. Seja G um grafo bipartido. Prove que todo subgrafo de G e bipartido.

Exerccio 30. Seja G = (A∪B, E) um grafo bipartido qualquer e suponha que |A| < |B|. E verdade

que α(G) = |B|? Determine ω(G).

Exerccio 31. Um grafo bipartido G com partes A e B e dito completo se

E(G) =a, b ⊆ V(G) : a ∈ A e b ∈ B

.

Um grafo bipartido completo sobre A,B com partes de cardinalidade |A| = n e |B| = m e denotado

por Kn,m. Determine |E(Kn,m)|.

Exerccio 32. Prove que todo grafo G tem um subgrafo bipartido H com |E(H)| ≥ |E(G)|/2.

Page 17: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Subgrafos 17

Exerccio 33. Prove que todo grafo G tem um subgrafo gerador bipartido H tal que dH(v) ≥dG(v)/2 para todo v ∈ V(G).

Exerccio 34. Prove a armac~ao da equac~ao (1.12).

Exerccio 35. Dado um grafo G, dena para todo U ⊆ V(G) a vizinhanca de U, denotada NG(U),

por

NG(U) =⋃u∈U

NG(u).

E verdade que |E(U,U)| = |NG(U)|? Justique.

Exerccio 36. Prove que para quaisquerU,W ⊆ V(G), ondeG e um grafo, vale que E(U4W,U4W) =

E(U,U)4E(W,W).

Exerccio 37. Prove que para todo G e todo U ⊂ V(G)∑u∈U

dG(u) = 2|E(G[U])|+ |E(U,U)|.

Exerccio 38. Um grafo G e dito k-partido, para k ∈ N, se existem k conjuntos independentes A1,

A2, . . . , Ak que particionam V(G), ou seja, V(G) = A1∪A2∪· · ·∪Ak, o conjunto Ai e 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 ≥ 2) completos com n vertices o numero maximo de arestas e

atingido quando |Ai|− |Aj| ≤ 1 para todos i, j ∈ 1, 2, . . . , n distintos.

Exerccio 39. Mostre que, se n = kq + r com 0 ≤ r < k, ent~ao o numero de arestas do grafo do

exerccio anterior e1

2

(k− 1

k

)(n2 − r2) +

(r

2

)e que esse numero e limitado por

≤ k− 1k

(n

2

).

Exerccio 40 (Teorema de Turan, 1941). Para todo k ≥ 2, se G tem n vertices e n~ao contem um

k-clique ent~ao

|E(G)| ≤ k− 2k− 1

n2

2.

Exerccio 41. Redena para todo grafo G o parametro χ(G) dado no exerccio 9 em func~ao dos

conjuntos independentes de G. Esse parametro de um grafo e conhecido na literatura como numero

cromatico2 do grafo (veja [9], captulo 5).

Exerccio 42. Prove que G e bipartido se e somente se χ(G) < 3.

Exerccio 43. Prove que as duas desigualdades dadas a seguir valem para todo grafo G com pelo

menos um vertice

ω(G) ≤ χ(G) (1.15)

χ(G) ≥ |V(G)|

α(G). (1.16)

Exerccio 44. Prove que todo grafo G satisfaz

χ(G) ≤ 1+ maxH⊆G

δ(H).

2Computar o numero cromatico e um problema NP-difcil [15].

Page 18: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

18 Conceitos Basicos

1.3 Isomorfismo

Dizemos que os grafos G e H s~ao isomorfos e, nesse caso, escrevemos G ' H, se existe uma

func~ao bijetora

f : V(G)→ V(H) (1.17)

tal que

u, v ∈ E(G) se, e somente se, f(u), f(v) ∈ E(H) (1.18)

para todos u, v ∈ V(G). Uma func~ao f como acima e chamada de isomorfismo.

Exemplo 8 (Grafo de Petersen). Os grafos representados na gura 1.6 s~ao isomorfos pelo isomor-

smo 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 e chamado de grafo de Petersen, e um dos grafos mais conhecidos na Teoria

dos Grafos.

6

1

10 72

9 8

43

5

a

bjg

d i

c

f

he

Figura 1.6: Grafos isomorfos (grafo de Petersen).

Notemos que quaisquer dois grafos completos G e H de mesma ordem s~ao isomorfos. Mais que

isso, qualquer bijec~ao entre V(G) e V(H) dene um isomorsmo entre eles. Nesse caso, dizemos que

o grafo e unico a menos de isomorsmos e por isso usamos a mesma notac~ao para todos eles, a

saber Kn, quando o conjunto dos vertices n~ao e relevante.

Exemplo 9. Ha oito grafos distintos com tres vertices, eles est~ao descritos nas representac~oes da

gura 1.7 abaixo.

3 2

1

3 2

1

3 2

1

3 2

1

3 2

1

3 2

1

3 2

1

3 2

1

Figura 1.7: Grafos distintos de ordem 3.

No entanto, ha apenas 4 grafos n~ao-isomorfos com tres vertices, representados pelos diagramas

da gura 1.8

Figura 1.8: Grafos n~ao-isomorfos de ordem 3.

N~ao existe uma caracterizac~ao simples de grafos isomorfos. Isso signica que n~ao ha algoritmo

eciente que recebe dois grafos e decide se eles s~ao isomorfos.

Page 19: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Isomorsmo 19

Exemplo 10. Nenhum dos grafos G, H e K representados na gura 1.9 s~ao isomorfos.

1

2

3

4

G H K

1

2

3

1

2

3

4

5

6

4

5

6

5

6

Figura 1.9: Grafos n~ao-isomorfos.

Temos que G n~ao e isomorfo a H porque G n~ao tem um vertice de grau quatro enquanto que

o vertice 5 em H tem grau quatro, portanto n~ao ha como haver uma bijec~ao entre os vertices

desse grafo que preserve as adjacencias. Pelo mesmo motivo H n~ao e isomorfo a K. Agora, G n~ao

e isomorfo a K porque caso existisse um isomorsmo f : V(G) → V(K) ent~ao a imagem por f do

conjunto 2, 3, 5 ⊂ V(G) e, obrigatoriamente, o conjunto 2, 3, 5 ⊂ V(K), mas qualquer bijec~ao f

n~ao preserva adjacencia entre esses vertices pois 2, 3, 5 em G induz um triangulo e em K n~ao (veja

o exerccio 47 abaixo).

Nesse exemplo foram dados argumentos diferentes para concluir o mesmo fato, o n~ao-isomorsmo

entre pares de grafos. Ainda, existem exemplos de grafos n~ao isomorfos para os quais esses argu-

mentos n~ao funcionam (da mesma forma que a existencia de um vertice de grau quatro funciona

para mostrar que G n~ao e isomorfo a H mas n~ao serve para mostrar que G n~ao e isomorfo a K pois

1, 2, 2, 3, 3, 3 s~ao os graus dos vertices de ambos os grafos).

Observac~ao 4. E difcil caracterizar de modo eciente o n~ao-isomorsmo entre grafos:

O problema do n~ao-isomorsmo de grafos : Dados os grafos G = (V, E) e H = (V, E ′) decidir

se eles s~ao n~ao-isomorfos.

N~ao se conhece algoritmo de tempo polinomial no tamanho dos grafos para decidir se dois grafos

n~ao s~ao isomorfos. Mais do que isso, n~ao se conhece um algoritmo de tempo polinomial no tamanho

dos grafos que receba como entrada uma terna (G,H, P) onde P e uma prova de que G e H n~ao s~ao

isomorfos e que devolva sim se G1 n~ao e isomorfo a G2 e devolva n~ao caso contrario. Em linguagem

tecnica dizemos que n~ao se sabe se o problema do n~ao-isomorsmo de grafos esta na classe

NP de complexidade computacional.

Observac~ao 5. Por outro lado, podemos considerar o problema do isomorsmo de grafos:

O problema do isomorsmo de grafos : Dados os grafos G = (V, E) e H = (V, E ′) decidir se

eles s~ao isomorfos.

Atualmente n~ao se conhece algoritmo polinomial no tamanho do grafo que resolva o problema.

Entretanto, n~ao e 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 s~ao isomorfos e f e o isomorsmo, caso contrario

devolve n~ao. Em linguagem tecnica dizemos que o problema do isomorsmo de grafos esta na

classe NP de complexidade de problemas computacionais. Entretanto, n~ao e sabido se esse

problema e NP-completo.

Exercıcios

Exerccio 45. Determine quais pares dentre os grafos abaixo s~ao isomorfos.

(i) 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;

Page 20: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

20 Conceitos Basicos

(ii) 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;

(iii) 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 46. Mostre que existem 11 grafos n~ao-isomorfos com 4 vertices.

Exerccio 47. Sejam G e H grafos isomorfos e f : V(G) → V(H) um isomorsmo. E verdade que

G[U] e isomorfo a H[f(U)] para todo U ⊆ V(G)? Justique.

Exerccio 48. Mostre que o grafo de Petersen e isomorfo ao complemento do grafo linha do K5.

Exerccio 49. Um automorfismo de um grafo e um isomorsmo do grafo sobre ele mesmo. Quantos

automorsmos tem um grafo completo?

Exerccio 50. Mostre que o conjunto de automorsmos de um grafo com a operac~ao de composic~ao

de func~oes denem um grupo.

Exerccio 51. Qual o numero de grafos distintos sobre um conjunto de vertices V de tamanho n?

Exerccio 52. Prove que ha pelo menos 2(n2)(n!)−1 grafos n~ao isomorfos sobre um conjunto de

vertices V de tamanho n.

Exerccio 53. Um grafo G = (V, E) e vertice-transitivo se para quaisquer u, v ∈ V existe um

automorsmo f de G com f(v) = u. Analogamente, G e aresta-transitivo se para quaisquer

arestas x, y, z,w ∈ E existe um automorsmo f de G tal que f(x), f(y) = z,w.

De um exemplo de grafo vertice-transitivo. De um exemplo de grafo aresta-transitivo. De um

exemplo de grafo aresta-transitivo mas n~ao vertice-transitivo.

1.4 Outras nocoes de grafos

Em algumas situac~oes podemos ter um modelo para um problema a ser resolvido e esse modelo

seria um grafo se desconsiderassemos algumas peculiaridades da situac~ao. Por exemplo, um mapa

rodoviario pode ser modelado denindo-se um vertice para cada cidade e duas cidades formam

uma aresta no grafo (modelo) se existe rodovia ligando essas cidades correspondentes aos vertices.

Normalmente, distancia e um parametro importante nesses mapas e assim as arestas devem ter um

comprimento associado a elas. Entretanto, \comprimento de aresta" n~ao faz parte da denic~ao de

um grafo. Num outro exemplo, se estamos interessados em rotas de trafego dentro de uma cidade

podemos denir um vertice por esquina e duas esquinas consecutivas numa mesma rua formam uma

aresta. Nesse caso, as ruas tem sentido (m~ao e contra-m~ao) e as arestas tambem deveriam ter mas,

novamente, essa caracterstica n~ao faz parte da denic~ao de grafos.

Esses problemas e muitos outros podem ser modelados com \outros tipos" de grafos. Alguns

desses outros tipos s~ao

Grafo com pesos nas arestas e um tripla (V, E, ρ) de modo que (V, E) e um grafo e ρ : E→ R

e uma func~ao que assume valores em R ⊆ R.Grafo orientado tem orientac~ao nas arestas (s~ao pares ordenados) de modo que para vertices

u e v, se (u, v) e uma aresta ent~ao (v, u) n~ao e aresta.

Grafos dirigido ou digrafo e dado por um par (V, E) onde E ⊆ V × V \ (v, v) : v ∈ V.Multigrafo e dado por um conjunto V de vertices, um conjunto E de arestas e uma func~ao de

E em(V2

)que diz quem s~ao os extremos de cada aresta; nesse caso podemos ter mais de uma aresta

com os mesmos extremos.

Em cada um dos casos acima, o grafo (V, E) naturalmente denido por essas estruturas e chamado

grafo subjacente .

Outros tipos podem ser derivados combinando esses tipos de grafos, por exemplo, grafo dirigido

com pesos nas arestas.

Page 21: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Representac~ao computacional 21

1 2

5

3 4

1

3 4

5

(c) (d)

2

(b)

1

3 4

5

(a)

1

3 4

5

2 2

Figura 1.10: (a) Grafo orientado. (b) Multigrafo. (c) Grafo dirigido. (d) Grafo subjacente aos

grafos dados em (a), (b) e (c).

Exercıcios

Exerccio 54. Dena isomorsmo para grafos orientados.

Exerccio 55. Formule uma vers~ao do teorema 1 para grafos orientados.

1.5 Representacao computacional

Nesta sec~ao comecamos uma abordagem algoritmica da teoria dos grafos. O primeiro passo e de-

nir representac~oes computacionais de grafos; as representac~oes que mostraremos a seguir assumem

que os vertices s~ao um segmento inicial dos inteiros positivos. Log, precisamos de um mapeamento

do conjunto de vertices do grafo G no subconjunto dos numero naturais V ′ = 1, 2, . . . , |V(G)|. Isso

e feito para facilitar o acesso as informac~oes usando estruturas de dados indexadas disponveis nas

linguagens de programac~ao estruturadas. Em resumo, dado G o problema e construir um grafo

isomorfo a G com vertices no conjunto V. Assim, se G e uma entrada para um problema computa-

cional, ent~ao G deve ser \traduzido" para sua copia isomorfa e a partir da o problema e tratado;

a soluc~ao do problema sobre a copia deve ser recuperada para uma soluc~ao para G. Isso pode ser

feito usando as tecnicas de busca conhecidas para recuperar os inteiros associados aos vertices como,

por exemplo, tabela de espalhamento (hashing) ou arvore binaria de busca. Feito isso, qualquer

problema computacional sobre um grafo G e tratado computacionalmente sobre um grafo isomorfo

G ′ com vertices V(G ′) = 1, 2, . . . , |V(G)| e a estrutura de busca escolhida no passo anterior e usada

para representar o isomorsmo.

No que segue, sempre que tratamos problemas computacionais sobre grafos estamos assumindo

os grafos s~ao denidos sobre o conjunto de vertices 1, 2, . . . , n, para algum n ∈ N. Veremos duas

das estruturas de dados mais conhecidas para a representac~ao de grafos.

1.5.1 Listas de adjacencias de G

E um vetor N[ ] de listas ligadas. A lista N[i] contem os vizinhos do vertice i e cada no dessa lista

e composto por uma variavel que armazena um vertice e um ponteiro que aponta para o proximo

no da lista.

Exemplo 11. Para o G grafo representado na gura 1.9, uma lista de adjacencias e como segue

Observac~ao 6. A representac~ao de uma grafo por listas de adjacencias n~ao e unica, pois qualquer

permutac~ao dos nos em N[i] dene uma lista valida.

1.5.2 Matriz de adjacencias de G

E a matriz |V |× |V | denotada por A(G), ou A simplesmente, denida por

A(i, j) =

1, se i, j ∈ E(G)0, caso contrario.

Page 22: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

22 Conceitos Basicos

N:

2 3

1 5 3

32

4

2 4

5

6

6

5

1 2 3 4 5 6

Figura 1.11: Lista de adjacencias do grafo G na gura 1.9.

Exemplo 12. Para o G grafo representado na gura 1.9, a matriz de adjacencias e

A =

0 1 0 0 0 0

1 0 1 0 1 0

0 1 0 1 1 0

0 0 1 0 0 1

0 1 1 0 0 1

0 0 0 1 1 0

.

1.5.3 Complexidade de algoritmos em grafos

Neste texto entendemos por complexidade do algoritmo a

complexidade de tempo no pior caso

expressa em func~ao do tamanho da representac~ao do grafo, ou seja,

T(n) = maxT(G) : G tem representac~ao de tamanho n

onde T(G) denota o numero de instruc~oes executadas por um algoritmo dado com entrada G.

Exemplo 13. Sejam A e B dois algoritmos distintos que executam a mesma tarefa sobre um grafo

G = (V, E). O algoritmoA 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 |2/4 arestas o primeiro algoritmo e sempre

melhor enquanto que para grafos com 1.000|V | arestas o segundo algoritmo e assintoticamente

melhor (melhor para |V | ≥ 16.645, enquanto que o primeiro e melhor para |V | ≤ 16.644). Para

entradas pequenas (ate 25 mil vertices) as func~oes |V |2 e (|V | + |E|) log |E| s~ao comparadas nos

gracos da gura 1.12 para grafos com 1.000|V | arestas.

Usualmente, a express~ao que estabelece a complexidade de um algoritmo e escrita em func~ao

do tamanho da representac~ao usada e em notac~ao assintotica: sejam f, g duas func~oes denidas nos

naturais e que assumem valores naturais (ou, reais positivos, ent~ao

f(n) = O(g(n)), para n aucientemente grande

signica que existem constantes positivas c e n0 tais que para todo n ≥ n0 vale

f(n) ≤ c · g(n).

No nosso caso n e o tamanho da representac~ao do grafo, n = |V |2 na caso de matriz de adjacencias

e n = |V |+ |E| no caso de listas de adjacencias.

Vejamos a complexidade de alguns algoritmos que executam tarefas simples comparando cada

uma das representac~oes dadas acima para um grafo xo G = (V, E)

Page 23: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Representac~ao computacional 23

01e+072e+073e+074e+075e+076e+077e+078e+079e+071e+08

0 1000 2000 3000 4000 5000

n2(n+ 1000n) log(1000n)

(n2/4+ n) log(n2/4)

0

5e+08

1e+09

1.5e+09

2e+09

2.5e+09

3e+09

5000 10000 15000 20000 25000

n2(n+ 1000n) log(1000n)

(n2/4+ n) log(n2/4)

Figura 1.12: Graco das func~oes do exemplo 13.

Tarefa Matriz de adjacencias Lista de adjacencias

i, j ∈ E? O(1) O(|V |)

Determine d(i) O(|V |) O(|V |)

Devolva E O(|V |2) O(|E|)

Observac~ao 7. Um algoritmo em grafo e de complexidade polinomial se a complexidade de tempo

no pior caso e expressa por uma func~ao polinomial no tamanho da representac~ao, entretanto, \

ter complexidade polinomial" e independente da representac~ao do grafo por matriz ou lista de

adjacencias pois essas representac~oes s~ao polinomialmente relacionadas, ou seja, uma pode ser

obtida da outra por algoritmo de tempo polinomial.

Exercıcios

Exerccio 56. Mostre que se f(n) = O(g(n)) ent~ao O(f(n)) +O(g(n)) = O(g(n)).

Exerccio 57. E verdade que para todo Gn vale que |E(Gn)| = O(n) para n sucientemente grande?

Exerccio 58. E verdade que para todo Gn vale que log |E(Gn)| = O(logn) para n sucientemente

grande?

Exerccio 59. Sejam G um grafo sobre o conjunto de vertices 1, 2, . . . , n, A a sua matriz de

adjacencias e b(i, j) as entradas da matriz A2. Que parametro de G esta associado ao numero

b(i, i), para cada i ∈ V(G)? Qual a relac~ao entre b(i, j) e, NG(i) e NG(j) quando i 6= j?Exerccio 60. Seja G um grafo qualquer sobre o conjunto de vertices 1, 2, . . . , n e A sua matriz de

adjacencias. Como e possvel determinar o numero de triangulos de um grafo G qualquer a partir

de A3?

Exerccio 61. Em 1990, Coppersmith e Winograd [6] mostraram um algoritmo que determina o

produto de matrizes duas n×n usando O(n2,376) operac~oes aritmeticas. Como esse algoritmo pode

ser usado para determinar se um grafo tem triangulo?

Page 24: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

24 Conceitos Basicos

Exerccio 62. Sejam G um grafo sobre o conjunto de vertices 1, 2, . . . , n e A sua matriz de

adjacencias. Prove que se os autovalores de A s~ao distintos ent~ao o grupo dos automorsmos e

abeliano.

Exerccio 63. O traco de uma matriz A, denotado por tr(A), e a soma dos elementos na diagonal

da matriz. Quanto vale o traco de uma matriz de adjacencias? Quanto vale tr(A2) em func~ao de

E(G)?

Exerccio 64. Por A ser uma matriz simetrica, sabemos da Algebra Linear que todos os seus

autovalores s~ao numeros reais. Determine os autovalores da matriz de adjacencias do grafo completo

Kn sobre o conjunto de vertices 1, 2, . . . , n. Mostre que se G e um grafo r-regular sobre o conjunto

de vertices 1, 2, . . . , n, ent~ao r e uma autovalor de A.

Exerccio 65. Dada uma representac~ao por listas de adjacencias de um grafo dirigido D descreva

um algoritmo com tempo de execuc~ao O(|V(D)|+ |E(D)|) para computar a representac~ao por listas

de adjacencias do grafo subjacente.

Exerccio 66. Neste exerccio apresentamos duas estruturas de dados para representar grafos diri-

gidos. Dizemos que a aresta (u, v) ∈ E num grafo dirigido (V, E) sai de u e chega em v.

Os vetores de incidencias de um grafo dirigido D = (V, E) s~ao 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.

Uma matriz de incidencias de um grafo dirigido D = (V, E) e uma matriz B de dimens~ao

|V |× |E| (as linhas s~ao indexadas por V e as colunas por E) tal que

B(i, j) =

−1 se a aresta j sai do vertice i,

1 se a aresta j chega no vertice i,

0 caso contrario.

Para cada uma das representac~oes, determine o tempo para:

(i) dados e ∈ E e v ∈ V, determinar se e sai ou chega 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.

Determine o que as entradas da matriz |V |× |V | dada por B ·BT representam, onde BT e a matriz

transposta de B.

Exerccio 67 ([7]). Mostre que determinar se um grafo orientado contem um sorvedouro | isto e,

um vertice com grau de entrada |V |− 1 e grau de sada 0 | pode ser feito em tempo O(|V |) quando

uma representac~ao por matriz e utilizada.

SorvedouroFonte

1.6 Percursos em grafos

Nessa sec~ao veremos algoritmos que formam a base para muitos algoritmos em grafos (para quase

todos deste texto). O objetivo de um percurso num grafo e o seguinte: dado a representac~ao de um

grafo G = (V, E), sistematicamente visitar todos os vertices e todas as arestas desse grafo.

Dado um vertice w em V, dizemos que o vertice u do grafo e alcancavel por w em G se existe

uma sequencia de vertices v1, v2, . . . , vm de G tal que

w = v1,

Page 25: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Percursos em grafos 25

u = vm,

vi e vi+1 s~ao adjacentes, para todo i ∈ 1, 2, . . . ,m− 1.

Denimos que w e alcancavel por w em G, para todo w ∈ V.Uma sequencia de vertices como acima e chamada de passeio em G.

1.6.1 Percurso generico

Um percurso num grafo G comeca com as seguintes considerac~oes: cada vertice esta em um de

dois estados possveis em qualquer instante da execuc~ao: n~ao-visitado ou visitado; cada aresta em

E(u) esta em um de dois estados: n~ao-visitada a partir de u ou visitada a partir de u, para todo

u ∈ V(G). De incio todos os vertices de G est~ao no estado n~ao-visitado e todas as arestas no

estado n~ao-visitada a partir de ambos os extremos.

O seguinte algoritmo, que chamaremos de Visite(G, v), recebe um grafo G e um vertice inicial

v ∈ V(G) e visita uma unica vez todos os vertices alcancaveis a partir de v e visita duas vezes todas

as arestas induzidas por esses vertices, uma visita a partir de cada extremo. Para gerenciar essa

visita o algoritmo Visite(G, v) usa uma lista L na qual a busca, inserc~ao e remoc~ao de elementos

e feita de maneira arbitraria e com custo constante, tambem o teste \L = ∅?" e feito em tempo

constante.

Algoritmo 1: Visite(G, v).

Dado : um grafo G e um vertice v.

Devolve: visita aos vertices e arestas n~ao-visitados e alcancaveis a partir de v.

insira v em L;1

marque v visitado;2

enquanto L 6= ∅ faca3

escolha u ∈ L;4

se em EG(u) ha aresta n~ao-visitada a partir de u entao5

escolha u,w em EG(u) n~ao-visitada a partir de u;6

marque u,w visitada a partir de u;7

se w e n~ao-visitado entao8

insira w em L;9

marque w visitado;10

senao remova u de L.11

Analise e correcao do algoritmo Visite(G, v). No que segue faremos uma analise do algoritmo

Visite(G, v). Fixe um grafoG representado por uma lista de adjacencias e um vertice v deG, suponha

que todos os vertices e arestas s~ao n~ao-visitados, considere uma execuc~ao de Visite(G, v) e dena

A = u ∈ V(G) : u e alcancavel a partir de v.

Proposicao 3. Cada vertice de G entra em L no maximo uma vez.

Demonstrac~ao. Um vertice w e inserido em L na linha 1 ou 9. A condic~ao para essas linhas serem

executadas e que w seja n~ao-visitado e apos a inserc~ao o vertice w e marcado visitado, nas linhas

2, 10. Logo a condic~ao para inserc~ao de w em L passa a ser falsa. A proposic~ao segue do fato de

que um vertice visitado nunca se tornara n~ao-visitado durante uma execuc~ao de Visite(G, v).

Proposicao 4. A linha 4 e executada no maximo dG(w) + 1 vezes, para cada w ∈ V(G).

Demonstrac~ao. Fixe um vertice w e assuma que w ∈ L. Para cada execuc~ao da linha 4 com u = w,

ou vale a condic~ao da linha 5 ou e executada a linha 11.

Se vale a condic~ao da linha 5 ent~ao o numero de arestas n~ao-visitadas a partir de w em EG(w)

diminui de um, se n~ao vale ent~ao w e removido de L. Como consequencia n~ao ha aresta n~ao-

visitadas a partir de w apos d(w) execuc~oes da linha 4 com u = w, e apos d(w) + 1 execuc~oes w

Page 26: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

26 Conceitos Basicos

e removido de L. O resultado agora segue da proposic~ao anterior e do fato de nunca uma aresta ser

marcada n~ao-visitada.

Corolario 5. O algoritmo Visite(G, v) termina.

Demonstrac~ao. Por denic~ao de grafo o conjunto |V(G)| e nito. Pela proposic~ao 3 cada vertice

entra em L no maximo uma vez. Pela proposic~ao 4 apos no maximo∑u∈V(G)

d(u) + 1 = 2|E|+ |V |

iterac~oes do enquanto - faca na linha 3 temos L = ∅.

Lema 6. Numa execuc~ao de Visite(G, v) todo vertice alcancavel a partir de v e visitado.

Demonstrac~ao. Seja w ∈ V(G) um vertice alcancavel a partir de v. Por denic~ao existe um passeio

v1, v2, . . . , vm−1, vm (1.19)

em G. Vamos provar por induc~ao em m que se w e alcancavel a partir de v por um passeio com m

verticesx ent~ao w e visitado.

Para a base da induc~ao, suponha m = 1. Como v e alcancavel a partir de v e e visitado (linha

2), a base esta provada.

Suponha (hipotese da induc~ao) que todo vertice alcancavel a partir de v por um passeio de

m− 1 vertices e visitado, m > 1. Seja w um vertice alcancavel a partir de v por um passeio com m

vertices, como em (1.19).

Escreva em = vm−1, vm. Como vm−1 e alcancavel por um passeio com m − 1 vertices, po

hipotese vm−1 foi visitado, portanto, entrou em L. Pelo corolario5 vm−1 e removido de L em algum

momento da execuc~ao e antes disso a aresta em e visitada a partir de vm−1 na linha 7; nesse ponto

ou vm ja foi visitado ou vale a condic~ao da linha 8 e vm e visitado na linha 10. Assim w = vm e

visitado. Pelo Princpio da Induc~ao Finita todo vertice alcancavel por m arestas e visitado, para

todo inteiro m ≥ 1.

Corolario 7. Cada aresta de G[A] e visitada duas vezes.

Demonstrac~ao. Seja x, y uma aresta de G[A]. Como x ∈ A temos x ∈ L em algum momento

da execuc~ao de Visite(G, v) e antes de x ser removido de L a aresta x, y e visitada a partir de

x. Analogamente, de y ∈ A temos que a aresta x, y e visitada a partir de y, logo a aresta e

visitada duas vezes. Como uma aresta visitada nunca sera rotulada como n~ao-visitada durante uma

execuc~ao, a aresta x, y sera visitada exatamente duas vezes.

Com isso temos o seguinte resultado, que estabelece que Visite(G, v) faz o que foi prometido.

Esse resultado e a correc~ao do algoritmo, isto e, a prova de que ele funciona corretamente.

Teorema 8. Apos Visite(G, v) cada vertice de A foi visitado uma vez e cada aresta de G[A]

foi visitada duas vezes.

O proximo passo e determinar a complexidade do algoritmo. Como e usual, O(1) denota tempo

constante. As duas primeiras linhas tem tempo O(1). Vimos que o laco e executado no maximo

2|E| + |V | vezes, logo uma estimativa e o numero maximo de rodadas do laco vezes o custo de

cada rodada; se cada linha tiver custo constante, ent~ao o custo total do laco e O(|E| + |V |). Para

determinar o custo de cada linha precisamos saber detalhadamente como cada operac~ao de cada

linha pode ser realizada.

A linha 1 e feita em tempo constante por hipotese, assim como as linhas 3, 4, 9 e 11. A linha 2

pode ser implementada em tempo constante, basta manter um vetor com |V | posic~oes, a posic~ao i

do vetor contem 0 ou 1 indicando se o vertice i e n~ao-visitado ou visitado. Com isso, as linha 8 e

10 tambem tem custo O(1). Resta determinar os custos das linhas 5, 6 e 7; pra esses casos basta

manter um ponteiro em cada lista de adjacencias N[i] indicando o primeiro vertice n~ao visitado

dela, os detalhes s~ao deixamos a cargo do leitor.

Page 27: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Percursos em grafos 27

Lema 9. A complexidade de Visite(G, v) e O(|A|+ |E(G[A])|).

Demonstrac~ao. O algoritmo Visite(G, v) pode ser implementado de forma que cada linha tenha

custo constante, logo a complexidade e proporcional ao numero de rodadas do laco na linha 3,

ou seja, o tempo gasto e proporcional ao numero de visitas. Pelo teorema 8 a complexidade e

O(|A|+ |E(G[A])|).

Agora, e simples mostrar (exerccio 68) que o seguinte algoritmo percorre o grafo (V, E), visitando

cada vertice uma unica vez e visitando cada aresta duas vezes e com complexidade de tempo

O(|V |+ |E|).

Algoritmo 2: Percurso(G).

Dado : um grafo G.

Devolve: visita aos vertices e arestas de G.

marque todos elementos de V(G) e de E(G) n~ao-visitado;1

enquanto ha vertice n~ao-visitado faca2

escolha v n~ao-visitado;3

insira v em L;4

marque v visitado;5

enquanto L 6= ∅ faca6

escolha u ∈ L;7

se em EG(u) ha aresta n~ao-visitada a partir de u entao8

escolha u,w em EG(u) n~ao-visitada a partir de u;9

marque u,w visitada a partir de u;10

se w e n~ao-visitado entao11

insira w em L;12

marque w visitado;13

senao remova u de L.14

Exercıcios

Exerccio 68. Prove que Percurso(G) visita cada vertice de G uma vez e cada aresta de G duas

vezes e tem complexidade O(|V(G)|+ |E(G)|).

Exerccio 69. Para facilitar a analise do seguinte algoritmo, voce pode considerar instancias G tais

que todo vertice de G e alcancavel a partir de qualquer vertice dado.

Algoritmo 3: Visite vertices(G).

Dado : um grafo G tal que todo vertice e alcancavel a partir de qualquer outro vertice.

Devolve: visita aos vertices de G.

marque todos elementos de V(G) n~ao-visitado;1

escolha um vertice v n~ao-visitado;2

insira v em L;3

marque v visitado;4

enquanto E(L, L) 6= ∅ faca5

escolha uma aresta u,w ∈ E(L, L);6

insira u,w em M;7

v← u,w ∩ L;8

insira v em L;9

marque v visitado.10

(a) Prove ou refute: o seguinte algoritmo visita todos os vertices de G (Pode-se assumir que

E(L, L) 6= ∅ se e somente se L = V(G); esse fato sera provado no captulo 3).

(b) Prove que, no nal de execuc~ao do algoritmo, M contem |V(G)|− 1 arestas.

Page 28: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

28 Conceitos Basicos

(c) Determine a complexidade do algoritmo do exerccio anterior. Justique tudo com

cuidado, principalmente no que se rera as linhas 5, 6 e 8. Pode-se assumir que as operac~ao

em L e em M s~ao feitas em tempo constante.

1.7 Algoritmos de busca

Algoritmo de busca e como s~ao chamados, usualmente, alguns dos algoritmos de percurso em

grafos. Nessa sec~ao veremos dois casos particulares do algoritmo 2 visto acima, cada caso e obtido

quando denimos uma poltica de gerenciamento para a lista L.

Se consideramos apenas as visitas aos vertice, ent~ao uma estrategia geral de busca pode ser

descrita da seguinte maneira: enquanto houver vertice u n~ao-visitado, visite u e seus vizinhos n~ao-

visitados. Para visitar os vizinhos de u destacamos as duas estrategias a seguir, as quais re etem

duas polticas de gerenciamento da lista L.

1.7.1 Busca em Largura

Numa busca em largura, primeiro visitamos cada vizinho n~ao-visitado de v, percorremos N(v) e

guardamos-o numa la; quando n~ao houver mais vizinhos removemos v, pegamos o primeiro vertice

da la e repetimos o processo. Em outras palavras, a lista L e administrada como la .

No algoritmo 2, inserc~ao e feita no m da la L, remoc~ao e feita no comeco da la L e a linha

escolha u ∈ L devolve o primeiro elemento da la.

Algoritmo 4: Visite em Largura(G, v).

Dado : um grafo G e um vertice v.

Devolve: visita aos vertices e arestas n~ao-visitados e alcancaveis a partir de v.

insira v no m da la L;1

marque v visitado;2

enquanto L 6= ∅ faca3

seja u ∈ L o primeiro vertice da la;4

se em EG(u) ha aresta n~ao-visitada a partir de u entao5

escolha u,w em EG(u) n~ao-visitada a partir de u;6

marque u,w visitada a partir de u;7

se w e n~ao-visitado entao8

insira w no m da la L;9

marque w visitado;10

senao remova u de L.11

1.7.2 Busca em Profundidade

Numa busca em profundidade, visitamos cada vizinho n~ao visitado de v, percorremos N(v) e

guardamos-o numa pilha; quando n~ao houver mais vizinhos removemos v de L, pegamos o topo da

pilha e repetimos o processo. Em outras palavras, a lista L acima e administrada como pilha .

No algoritmo 2, inserc~ao e feita no topo da pilha L, remoc~ao e feita no topo da pilha L e a linha

escolha u ∈ L devolve o topo da pilha L.

Busca em profundidade rotulada. A seguinte vers~ao da busca em profundidade, que chamamos

de busca em profundidade rotulada, sera muito util adiante; a ideia e manter um contador de

operac~oes na pilha e rotular cada vertice com dois valores inteiros: o valor do contador quando o

vertice entrou na pilha e o valor do contador quando o vertice saiu da pilha. Pra isso o algoritmo

usa dois vetores, chega[ ] e sai[ ], indexados por V. Em chega[v] temos o momento no qual v foi

empilhado e em sai[v] o momento em que v foi removido da pilha.

Page 29: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Algoritmos de busca 29

Ainda, o algoritmo usa um vetor pai[ ] indexado pelos vertices. No nal da execuc~ao pai[v] tem

o vertice que foi empilhado antes de v durante a execuc~ao, em outras palavras, foi o vertice que

descobriu v.

A seguir damos uma vers~ao recursiva para a busca em profundidade rotulada (a pilha ca

implementada, implicitamente, pela pilha da recurs~ao) a qual recebe um grafo G dado por uma

lista de adjacencias e um vertice w ∈ V(G); no incio temos cont = sai[v] = chega[v] = 0 e

pai[v] = nil, para todo vertice v de G.

Algoritmo 5: BP(G,w).

Dado : um grafo G e um vertice w.

Devolve: busca em profundidade em G a partir de w com rotulos chega, sai e pai em cada

vertice.

cont← cont+ 1;1

chega[w]← cont;2

para cada u ∈ N(w) faca3

se chega[u] = 0 entao4

pai[u]← w;5

BP(G,u);6

cont← cont+ 1;7

sai[w]← cont.8

Proposicao 10. Apos uma execuc~ao de BP(G,w), para quaisquer u, v ∈ V(G) alcancaveis apartir de w, um e somente um dos itens abaixo vale para esse par de vertices

(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].

Demonstrac~ao. A prova e deixada como exerccio.

Denimos, para todo t ∈ N, a t-esima iterac~ao do vetor pai, denotada por pai(t), da seguinte

maneira

pai(t)[v] =

v se t = 0

pai(t−1)[pai[v]

]se t > 0.

(1.20)

Exercıcios

Exerccio 70. Escreva uma vers~ao n~ao recursiva da busca em profundidade rotulada.

Exerccio 71. Prove a proposic~ao 10.

Exerccio 72. Considere uma execuc~ao da busca rotulada BP(G,w). Para simplicar, considere

que todo vertice de G e alcancavel a partir de w. Prove as seguintes equivalencias. Para quaisquer

u, v ∈ V(G)

1.[chega[v], sai[v]

]∩[chega[u], sai[u]

]= ∅ se e somente se n~ao existe t ∈ N tal que pai(t)[u] =

v e n~ao existe t ′ ∈ N tal que pai(t′)[v] = u;

2.[chega[v], sai[v]

]⊂[chega[u], sai[u]

]se e somente se existe t ∈ N tal que pai(t)[v] = u;

3.[chega[v], sai[v]

]⊃[chega[u], sai[u]

]se e somente se existe t ∈ N tal que pai(t)[u] = v.

Exerccio 73. Adapte o algoritmo 3 do exerccio 69 para que o percurso seja uma busca em largura.

Faca o mesmo para busca em profundidade.

Page 30: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

30 Conceitos Basicos

Page 31: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 2

CAMINHOS, CIRCUITOS E CAMINHOS MINIMOS

Neste captulo tratamos de duas classes especiais de grafos e de um problema algortmico classico.

Na primeira sec~ao apresentamos a classe dos caminhos e noc~oes que permeiam essa classe como

comprimento de caminhos e alguns parametros associados a caminhos em grafos como distancia

entre vertices e diametro do grafo, em seguida apresentamos a classe dos circuitos. A segunda sec~ao

trata do problema algortmico de determinar distancias entre pares de vertices num grafo com pesos

nas arestas. Mais especicamente, nessa sec~ao s~ao apresentados dois algoritmos tradicionais para

o problema: o algoritmo de Dijkstra de 1959 e o algoritmo e o algoritmo de Floyd e Warshall de

1962. Esses algoritmos usam uma tecnica para projeto de algoritmos conhecida como Programac~ao

Dinamica.

2.1 Caminhos e circuitos

Um caminho e qualquer grafo ou subgrafo isomorfo a (V, E) dado por

V = 0, 1, . . . , k

E =i, i+ 1 : 0 ≤ i ≤ k− 1

,

(2.1)

para algum k ∈ N.Exemplo 14. Um caminho com quatro vertices e representado pelo diagrama da gura 2.1.

x0 x2x1x0 x1 x2 x3

Figura 2.1: Representac~ao geometrica do caminho(x0, x1, x2, x3,

x0, x1, x1, x2, x3, x3

).

O caminho P denido em (2.1) tambem e denotado pela sequencia

P = 0, 1, . . . , k

de seus vertices, de modo que vertices consecutivos na sequencia s~ao adjacentes. Seguindo notac~ao

estabelecida na sec~ao 1.1, denotamos por Pk+1 um caminho com k+1 vertices. Em outras palavras,

um caminho e um passeio sem repetic~ao de vertices.

Exemplo 15. Considere o grafo G representado no diagrama da gura 2.2 abaixo. O caminho P4 =

a, b, f, i e o subgrafo G[a, b, f, i], tambem o subgrafo P5 =(a, d, c, h, i,

a, d, d, c, c, h, h, i

)e um caminho. O subgrafo induzido pelo conjunto de vertices m e um P1 e o subgrafo induzido

pela aresta j, l e um P2.

Num caminho P = x, v0, . . . , vk, y, dizemos que os vertices x e y s~ao os extremos de P e dizemos

que os vertices vi, 0 ≤ i ≤ k, s~ao os vertices internos de P.

O numero de arestas num caminho e o comprimento desse caminho.

Em um grafo G = (V, E), a distancia entre dois vertices quaisquer u, v ∈ V, denotada por

distG(u, v), e denida como o comprimento do menor caminho com extremos u e v, isto e

distG(u, v) = mink ∈ N : u, v s~ao extremos de um caminho Pk+1 ⊆ G

, (2.2)

quando existe algum caminho. Se u e v n~ao s~ao extremos de algum caminho em G, ent~ao conven-

cionamos distG(u, v) =∞, de modo que ∞ satisfaz

n+∞ = ∞ e (2.3)

n < ∞, (2.4)

para todo n ∈ N.

Page 32: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

32 Caminhos, circuitos e caminhos mnimos

G:

c f

i

m

j `

ba

dge

h

Figura 2.2: Exemplos de subgrafos que s~ao caminhos.

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 n~ao ser unico.

Observac~ao 8 (dist e uma metrica). Para todo G temos denida a func~ao distG : V(G)×V(G)→ Nque satisfaz

1) distG(u, v) = distG(v, u) para todos u, v ∈ V(G);

2) distG(v, u) = 0 se e somente se u = v;

3) a desigualdade triangular

dist(u,w) ≤ dist(u, v) + dist(v,w) (2.5)

para quaisquer u, v,w ∈ V(G).

Portanto, a distancia dene uma metrica em V(G).

Denimos o diametro do grafo G como a maior distancia entre dois vertices quaisquer de G,

ou seja

diam(G) = maxu,v∈V(G)

distG(u, v). (2.6)

Naturalmente, diam(G) =∞ se existirem dois vertices no grafo G que n~ao extremos de um caminho.

Um circuito e qualquer grafo ou subgrafo isomorfo a (V, E) dado por

V = 1, . . . , k

E =i, i+ 1 : 1 ≤ i ≤ k− 1 ∪

k, 1,

(2.7)

para algum k ≥ 3.Como no caso do caminho, para simplicar, o circuito denido em (2.7) tambem e denotado

pela sequencia de seus vertices

C = 1, 2 . . . , k, 1

de modo que vertices consecutivos s~ao adjacentes. O numero de arestas num circuito e o compri-

mento desse circuito e 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

]e um circuito,

bem como o subgrafo C5 = (V, E) dado por V = a, b, d, e, g e E = a, b, b, e, e, g, g, d, d, a.

Observac~ao 9. Quando denotamos um caminho por uma sequencia v1, v2, . . . , vk os elementos da

sequencia s~ao 2-a-2 distintos, ou seja, n~ao ha vertices repetidos na sequencia. Quando a sequencia

denota um circuito a unica repetic~ao permitida e a do primeiro vertice que deve ser igual ao ultimo.

Proposicao 11. Todo grafo G contem um caminho de comprimento pelo menos δ(G) e, se

δ(G) ≥ 2, um circuito de comprimento pelo menos δ(G) + 1.

Page 33: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos e circuitos 33

Demonstrac~ao. Dado um grafo G, vamos exibir um caminho com pelo menos δ(G) arestas e um

circuito com pelo menos δ(G) + 1 arestas.

Seja P = x0, x1, . . . , xk um caminho de comprimento maximo em G. Temos que

NG(x0) ⊂ V(P), (2.8)

caso contrario, haveria caminho mais longo que P em G. Logo, |NG(x0)| ≤ |V(P)| − 1 e, como

|NG(x0)| ≥ δ(G) e |E(P)| = |V(P)| − 1, segue que |E(P)| ≥ δ(G), isto e, P e um caminho de

comprimento pelo menos δ(G).

Agora, tratando do caso de circuito, vamos supor que δ(G) ≥ 2. Se o grau mnimo e pelo menos

dois, ent~ao o vertice x0 tem um vizinho em P diferente de x1 e assim esta bem denido o numero

m = maxj : 1 < j ≤ k e xj ∈ NG(x0)

, (2.9)

que e o maior ndice em 2, . . . , k de um vertice vizinho de x0 em P. Agora, basta notar que o

circuito x0, x1, . . . , xm, x0 tem comprimento m+1 e que NG(x0) ⊆ x1, x2, . . . , xm, logo m ≥ δ(G).Portanto, C tem comprimento pelo menos δ(G) + 1.

Denimos a cintura do grafo G como o comprimento do menor circuito contido em G, ou seja

cin(G) = mink ∈ N : existe um circuito Ck ⊆ G

, (2.10)

quando existe um, se n~ao existe convencionamos cin(G) =∞.

Notemos que um circuito de comprimento mpar, ou simplesmente circuito mpar n~ao e um

grafo bipartido. Como subgrafo de grafo bipartido tambem e bipartido (exerccio 29), conclumos

que grafos bipartidos n~ao contem circuito mpar. De fato, a classe dos grafos livres de circuitos de

comprimento mpar e a classe dos grafos bipartidos coincidem.

Teorema 12. Um grafo G e bipartido se e somente se G n~ao contem circuitos de comprimento

mpar.

Demonstrac~ao. Seja G um grafo. Suponha que G contem um circuito mpar e vamos mostrar que

G n~ao e bipartido.

A prova e por contradic~ao. Seja C = x0, . . . , x2k, x0 um circuito mpar em G e suponha que G e

bipartido com partes A e B. Para 1 ≤ j ≤ k− 1 temos

NC(x2j) = x2j−1, x2j+1

portanto, x2j n~ao pode pertencer a mesma parte que os vertices x2j−1, x2j+1. Digamos, sem perda

de generalidade, quek−1⋃j=1

x2j ⊆ A

e, portanto,k−1⋃j=1

x2j−1, x2j+1 ⊆ B.

Como x1 ∈ B devemos ter x0 ∈ A. Como x2k−1 ∈ B devemos ter x2k ∈ A, portanto x0, x2k ∈ E(C),contradizendo o fato de A ser um conjunto independente.

Agora, vamos mostrar que se G n~ao contem circuito mpar ent~ao G e bipartido. Fixamos w, um

vertice de G, e seja Hw o subgrafo de G induzido pelos vertices v ∈ V(G) com distG(w, v) < ∞.

Primeiro, vamos mostrar que Hw e bipartido. Dena os conjuntos disjuntos

Aw = v ∈ V(Hw) : distG(w, v) = 2j para algum j ∈ N (2.11)

Bw = v ∈ V(Hw) : distG(w, v) = 2j+ 1 para algum j ∈ N (2.12)

com Aw ∪ Bw = V(Hw). Vamos mostrar que esses conjuntos s~ao independentes. Sejam u, v ∈ Awdistintos e sejam P = w = x1, . . . , x2a = u e Q = w = y1, . . . , y2b = v os caminhos com extremos

Page 34: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

34 Caminhos, circuitos e caminhos mnimos

w e u e w e v, respectivamente, e que realizam as distancias. Se os vertices internos de P e Q s~ao

disjuntos ent~ao u, v ∈ E(G) implicaria num circuito mpar, logo u e v n~ao s~ao adjacentes nesse

caso. Se os vertices internos n~ao s~ao disjuntos, sejam p e q os maiores ndices para os quais xp = yq.

Como os caminhos realizam as distancias p = q e, como anteriormente, se u, v ∈ E(G) ent~ao essa

aresta e os caminhos de xp a u e de yq (=xp) a v formariam circuito mpar.

SejaW = w1, w2, . . . , wm um subconjunto de V(G) tal que distG(wi, wj) =∞ para todo i 6= jde cardinalidade maxima. Os subgrafos Hw1

, . . . , Hwms~ao bipartidos

V(Hwi) ∩ V(Hwj

) = ∅, para todos i 6= j (2.13)

e

G =

m⋃i=1

Hi (2.14)

logo G e bipartido, pois uni~ao de grafos bipartidos disjuntos e bipartido (verique).

Exercıcios

Exerccio 74. E verdade que todo grafo com pelo menos tres vertices, exatamente dois vertices de

grau 1 e os demais vertices com grau 2 e um caminho?

Exerccio 75. Escreva um algoritmo que recebe uma grafo G e decide se G e um caminho. Determine

a complexidade do algoritmo.

Exerccio 76. Prove que se u1, u2, . . . , uk e um passeio em G ent~ao existem ndices i1, i2, . . . , ittais que a subsequencia u1, ui1 , ui2 , . . . , uit , uk e um caminho em G.

Exerccio 77. Dado F ⊂ E(G) mostre que se |E(C) ∩ F| e par para todo circuito C em G ent~ao F e

um corte.

Exerccio 78. Sejam P = u1, u2, . . . , uk e Q = v1, v2, . . . , v` duas sequencias de vertices de um

grafo. Denimos a concatenacao dessas sequencias como a sequencia dos vertices de P seguidos

dos vertices deQ, denotada P,Q = u1, u2, . . . , uk, v1, v2, . . . , v`. Supondo que P eQ sejam caminhos

no grafo, sob que condic~oes a sequencia P,Q e caminho?

Exerccio 79. Prove a desigualdade triangular (equac~ao (2.5)).

Exerccio 80. Prove as armac~oes feitas nas equac~oes (2.13) e (2.14).

Exerccio 81. Escreva um algoritmo baseado na busca em largura para reconhecer grafos bipartidos.

Prove que seu algoritmo funciona corretamente.

Exerccio 82. Seja G um grafo onde a distancia entre qualquer par de vertices e nita. Mostre que

se existem w ∈ V(G) e u, v ∈ E(G) tais que dist(w,u) = dist(w, v) ent~ao cin(G) ≤ dist(w,u) +

dist(w, v) + 1.

Exerccio 83. Mostre que a relac~ao e ∼ f em E(G) dada por e = f ou existe um circuito C ⊂ G tal

que e e f pertencem a E(C) e uma relac~ao de equivalencia.

Exerccio 84. Seja G um grafo nas condic~oes do exerccio 69 e seja M o conjunto construdo por

Visite vertices(G). Prove que G[M] n~ao contem circuito.

Exerccio 85. Seja C ⊆ G um circuito no grafo G. Prove que para qualquer U ⊆ V(G) vale que

|E(C) ∩ E(U,U)| n~ao pode ser mpar.

Exerccio 86. Seja k um numero natural. O k-cubo e o grafo cujo conjunto de vertices s~ao as

sequencias binarias de k bits e dois vertices s~ao adjacentes se e somente se as k-tuplas correspon-

dentes diferem exatamente em uma posic~ao. Determine o numero de vertices, arestas, o diametro e

a cintura do k-cubo. Determine os parametros α, ω e χ do k-cubo. Prove que o k-cubo e bipartido.

Page 35: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos com pesos nas arestas 35

110 111

011010

000 001

101100

Figura 2.3: Exemplo: o 3-cubo.

Exerccio 87. Prove que o seguinte algoritmo (que esta baseado numa busca em largura) funciona

corretamente. Determine a complexidade do algoritmo.

Algoritmo 6: Distancia(G,w).

Dado : um grafo G e um vertice w ∈ V(G).Devolve: distG(w, v) para todo v ∈ V(G).

marque todos elementos de V(G) n~ao-visitado;1

marque w visitado;2

insira w no m da la L;3

d[w]← 0;4

enquanto L 6= ∅ faca5

tome u o primeiro elemento da la L;6

para cada v ∈ NG(u) faca7

se v e n~ao-visitado entao8

marque v visitado;9

insira v no m da la L;10

d[v]← d[u] + 1;11

remova u de L;12

devolva d[ ].13

2.2 Caminhos mınimos em grafos com pesos nas arestas

Nesta sec~ao consideramos grafos com pesos nas arestas, esses grafos s~ao denidos por uma terna

(V, E, ρ) onde V e E s~ao os usuais conjuntos de vertices e arestas, respectivamente, e ρ : E(G)→ R+

e uma func~ao que atribui um peso a cada aresta de E.

O comprimento de um caminho P = x0, x1, . . . , xk em (V, E, ρ) e a soma dos pesos (compri-

mentos) das arestas do caminho

c(P) =

k−1∑i=o

ρ(xi, xi+1),

e a distancia entre dois vertices u e v e o comprimento do menor caminho com extremos u e v,

dist(u, v) = minc(P) : P e um caminho com extremos u e v

quando existe algum caminho, caso contrario convencionamos que dist(u, v) =∞ tal que valem (2.3)

e (2.4), pagina 29. Um caminho com extremos u e v de comprimento dist(u, v) <∞ e chamado de

caminho mınimo.

Esses grafos podem ser representados por lista de adjacencias com a lista de v contem os vertices

u ∈ V(G) tais que v, u ∈ E(G) junto com o peso ρ(u, v).

Exemplo 18. O diagrama da gura 2.4 representa um grafo com pesos nas arestas e uma lista de

adjacencias para esse grafo e representada na gura 2.5.

Page 36: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

36 Caminhos, circuitos e caminhos mnimos

b

4

a

2

c

1

1 d

e

3

10f

3

8

Figura 2.4: Diagrama de um grafo com peso nas arestas. A distancia entre a e e e 10 e um caminho

mnimo e a, c, b, d, f, e.

b

1

4

f

3

e

d

10

a b c f

2

3 3

b

4

c

c e

1

e

ed

N:

Figura 2.5: Lista de adjacencias do grafo G no exemplo acima.

Exercıcios

Exerccio 88. Seja G um grafo com pesos nas arestas e s um vertice de G. Prove a seguinte variante

da desigualdade triangular (2.5): para todo v, u ∈ E(G)

distG(s, u) ≤ distG(s, v) + ρ(v, u). (2.15)

Exerccio 89. Suponha que P = v1, v2, . . . , vk e um caminho mnimo num grafo G. Prove que

Pi,j = vi, . . . , vj e um caminho mnimo com extremos vi e vj em G para quaisquer i, j com 1 ≤ i <j ≤ k.

Exerccio 90. Dados (V, E, ρ) e s ∈ V considere o problema de determinar dist(s, x) para todo

x ∈ V com a seguinte estrategia: declare s visitado e em cada passo visite o vertice n~ao visitado

mais proximo de um vertice ja visitado. Construa um exemplo de grafo com pesos nas arestas que

mostre que essa estrategia n~ao funciona.

2.2.1 Algoritmo de Dijkstra para caminhos mınimos

Suponha que s~ao dados G = (V, E, ρ) e um vertice s ∈ V. Queremos determinar distG(s, v), para

todo v ∈ V.As estruturas de dados que vamos usar s~ao: um vetor d[ ], uma estrutura para representar um

subconjunto S ⊆ V (pode ser um vetor de bits).

S: em qualquer ponto da execuc~ao do algoritmo o conjunto S identica os vertices v ∈ V que ja

tem a distancia dist(s, v) computada;

Page 37: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos com pesos nas arestas 37

d[ ]: em qualquer ponto da execuc~ao do algoritmo d[v] armazena um valor que signica

(a) ou a distancia dist(s, v) de s para v, caso v ∈ S;(b) ou d[v] e o comprimento de algum caminho com extremos s e v (n~ao necessariamente

o mnimo), caso v ∈ S;(c) ou d[v] =∞, caso v ainda n~ao tenha sido visitado.

O algoritmo que descrevemos a seguir recebe G e s como acima, determina distG(s, x), para todo

x ∈ V e funciona da seguinte forma. A inicializac~ao das estruturas de dados s~ao: S = ∅; d[s] = 0

pois s esta a distancia 0 dele mesmo; para qualquer vertice v 6= s temos d[v] =∞.

Algoritmo 7: Inicie(G, s).

seja S subconjunto vazio de V(G);1

para cada v ∈ V(G) faca d[v]←∞;2

d[s]← 0;3

Num determinado momento da execuc~ao, em que S 6= ∅, o conjunto S contem os vertices

cujas distancias ja est~ao determinadas. Nesse ponto, retiramos de S o vertice u que tem menor

valor de d[ ]), esse e o vertice de S (conjunto dos vertices com distancia ainda n~ao determinada

pelo algoritmo) mais proximo do vertice de sada s, portanto, sua distancia ca determinada pelo

valor de d[u] e podemos inser-lo em S. Em seguida, visitamos cada vizinho t de u (por (2.15)

dist(s, t) ≤ d[u] + ρ(u, t)) e testamos se um caminho de menor comprimento foi encontrado e se

for o caso, ent~ao atualizamos d[ ], essa etapa e chamada de Relaxac~ao

Algoritmo 8: Relaxac~ao(u, t).

se d[t] > d[u] + ρ(u, t) entao d[t]← d[u] + ρ(u, t).1

Note que a condic~ao na linha 1 do algoritmo 8 e sempre falsa para t ∈ S. O algoritmo prossegue,

ate que S = V. Esse algoritmo e conhecido como algoritmo de Dijkstra.

Algoritmo 9: Dijkstra(G, s).

Dado : um grafo G com pesos ρ nas arestas e um vertice s ∈ V(G).Devolve: distG(s, v) para todo v ∈ V(G).

Inicie(G, s);1

enquanto S n~ao-vazio faca2

seja u tal que d[u] = mind[v] : v ∈ S;3

insira u em S;4

para cada t ∈ N(u) faca5

Relaxac~ao(u, t).6

Uma demonstrac~ao formal de que o algoritmo funciona, isto e, no nal d[v] armazena as distancias

dist(s, v), para todo v ∈ V, e a complexidade do algoritmo s~ao determinados a seguir.

Analise e correcao do algoritmo de Dijkstra. Vamos mostrar que o algoritmo funciona cor-

retamente.

Proposicao 13. Em qualquer momento da execuc~ao de Dijkstra(G, s) valem os seguintes fatos

(a) d[v] ≥ dist(s, v) para todo v ∈ V e uma vez que d[v] = dist(s, v) o valor de d[v] nunca

mais muda.

(b) Se dist(s, v) =∞ ent~ao d[v] =∞ durante toda a execuc~ao.

Demonstrac~ao. Para provar (a) vamos supor o contrario e assumir que u ∈ V e o primeiro vertice

para o qual ocorreu que d[u] < dist(s, u) durante uma execuc~ao e seja v ∈ V o vertice que causou

a mudanca no valor de d[u] numa relaxac~ao, assim a relaxac~ao faz

d[u] = d[v] + ρ(u, v) (2.16)

Page 38: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

38 Caminhos, circuitos e caminhos mnimos

e, nesse momento da execuc~ao d[v]+ρ(u, v) ≥ dist(s, v)+ρ(u, v) pois u foi a primeira ocorrencia

do fato suposto, ou seja,

dist(s, u) > d[u] = d[v] + ρ(u, v) ≥ dist(s, v) + ρ(u, v)

contradizendo a desigualdade (2.15).

Para provar (b) notemos que, por (a), d[v] ≥ dist(s, v) =∞.

Proposicao 14. Se P = s, x1, . . . , xk, v e um caminho mnimo e d[xk] = dist(s, xk) ent~ao apos

Relaxac~ao(xk, v) teremos d[v] = dist(s, v).

Demonstrac~ao. Apos Relaxac~ao(xk, v) temos d[v] ≤ d[xk] + ρ(xk, v) = dist(s, xk) + ρ(xk, v).

Pelo exerccio 89 dist(s, xk) + ρ(xk, v) = dist(s, v), portanto, d[v] ≤ dist(s, v). Pela proposic~ao

13(a), d[v] ≥ dist(s, v), portanto d[v] = dist(s, v).

A correc~ao do algoritmo segue do proximo resultado. Provaremos um invariante do laco en-

quanto. Esse invariante e uma propriedade que permanece valida a cada iterac~ao laco, independen-

temente do numero de vezes que e executado.

Teorema 15. Para todo k ∈ N, apos k iterac~oes enquanto na linha 2 vale que

d[v] = dist(s, v) para todo v ∈ S.

Demonstrac~ao. No incio, antes da primeira iterac~ao, temos S = ∅, portanto o teorema vale

trivialmente.

A prova e por contradic~ao. Suponha que

X = t ∈ N : apos a t-esima rodada existe u ∈ S tal que dist(s, u) 6= d[u] 6= ∅.

Pelo Princpio da Boa-Ordenac~ao, esse conjunto tem um mnimo. Seja k = minX, k ≥ 1. Seja

u o primeiro vertice inserido em S e com d[u] 6= dist(s, u), ou seja, o vertice inserido na k-esima

iterac~ao do laco. Seja P um caminho mnimo com extremos s e u em G. Esse caminho existe por

causa da armac~ao feita na proposic~ao 13(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 execuc~ao imediatamente anterior a u entrar em S. Notemos que, nesse momento da execuc~ao,

u 6= s, logo S 6= ∅, e possvel termos x = s e y = u mas x 6= u.Agora, quando x entrou em S, antes de u, ocorreu Relaxac~ao(x, y) o que fez com que d[y] =

dist(s, y) pela proposic~ao 14 e por d[x] = dist(s, x). Como os pesos n~ao s~ao negativos e P e mnimo

dist(s, y) ≤ dist(s, u), ou seja

d[y] = dist(s, y) ≤ dist(s, u) ≤ d[u]

onde a ultima desigualdade vem da proposic~ao 13(a). Mas, d[u] ≤ d[y] pois ambos est~ao em S e u

foi escolhido, assim d[u] = dist(s, u) e temos uma contradic~ao.

A correc~ao do algoritmo de Dijkstra segue facilmente do teorema acima; cada iterac~ao remove

um vertice de S, logo apos |V | iterac~oes S = ∅, ou seja S = V(G), e a armac~ao do teorema e que

d[v] esta correto para todo v ∈ V(G). A prova de que Dijkstra, com uma pequena modicac~ao,

encontra um caminho mnimo e deixada para o exerccio 96.

Agora, vamos analisar a complexidade do algoritmo de Dijkstra, a qual Inicie(G, s) tem comple-

xidade O(|V |) e Relaxac~ao(u, t), O(1).

A complexidade do algoritmo de Dijkstra depende de como e determinado o mnimo na 3. O

laco da linha 2 sera excutado uma vez para cada u ∈ V(G); a contribuic~ao do laco da linha 2 para

a complexidade do algoritmo e ∑u∈V

T3(u) + T4(u) + T5,6(u)

Page 39: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos com pesos nas arestas 39

onde Ti(u) e o tempo gasto no linha i para u dado na linha 3. Se o mnimo e determinado fazendo

comparac~oes ent~ao em cada rodada o custo e |S|− 1, portanto,

∑u∈V

T3(u) =

|V |−1∑i=1

(i− 1) = O(|V |2).

Ademais∑u∈V T4(u) = O(|V |) e∑

u∈V

T5,6(u) =∑u∈V

∑v∈N(u)

O(1) = O(|E|).

Logo∑u∈V T3(u) + T4(u) + T5,6(u) = O(|V |2 + |E|), mesmo levando em conta a complexidade da

inicializac~ao.

Outra possibilidade e usar la de prioridades para determinar o mnimo: No caso de la

de prioridades implementada por heap binaria,

Q[ ]: la de prioridades com elementos de S e chave d[ ], o elemento de maior prioridade

corresponde ao de menor chave. O procedimento extrai mınimo de Q remove e devolve

o elemento de maior prioridade de Q.

Nesse caso, O(|V |) e o tempo para construir uma la de prioridade, portanto Inicie(G, s) tem

complexidade O(|V |). A remoc~ao da linha 3 tem o custo O(log(|S|)) de refazer a heap [7], logo

T3(u) = O(log |V |) para todo u ∈ V. Inserc~ao em S pode ser feita em tempo constante, ou seja,

T4(u) = O(1). Agora, T5,6(u) pode ser escrita como

T5,6(u) =∑

t∈N(u)

T6(u).

Cada vez que a linha 6 de Dijkstra e executada pode ser necessaria uma atualizac~ao da heap, da

seguinte forma

Q[t]← minQ[t], d[u] + ρ(u, t);

refaz heap.

Essa operac~ao toma tempo O(log |V |). Logo

∑u∈V

T3(u)+ T4(u)+ T5,6(u) =∑u∈V

O(log |V |) +O(1) + ∑t∈N(u)

O(log |V |)

= O ((|V |+ |E|) log |V |) .

Teorema 16. O algoritmo de Dijkstra sobre G = (V, E) tem complexidade = O ((|V |+ |E|) log |V |) .

Exercıcios

Exerccio 91. Construa um grafo com pesos que podem ser negativos e no qual algoritmo de

Dijkstra devolve resposta errada.

Exerccio 92. Suponha que o teste na linha 7 do algoritmos de Dijkstra seja mudado para |Q| > 1,

o que faria o laco ser executado |V |− 1 vezes ao inves de |V |. O funcionamento do algoritmo estaria

correto?

Exerccio 93. Na estimativa de T3(u) dissemos que T3(u) = O(log(|S|)) e depois superestimamos

tomando T3(u) = O(log |V |) para todo u. Usando a primeira estimativa, obteramos

∑u∈V

T3(u) =

|V |∑i=1

O(log i).

Prove que, assintoticamente, a alternativa usada n~ao e superestimada, isto e, prove que

n∑i=1

O(log i) = Θ(n logn).

Page 40: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

40 Caminhos, circuitos e caminhos mnimos

Exerccio 94. Dado um grafo D com pesos ρ : E(D) → [0, 1] que representam a probabilidade de

uma aresta n~ao falhar. Escreva um algoritmo para descobrir o caminho mais seguro entre dois

vertices.

Exerccio 95. Seja D = (V, E, ρ) um grafo com peso ρ : E → 0, 1, . . . ,m nas arestas, m ∈ N xo.

Modique a la de prioridades do Dijkstra para computar distancia em tempo O(m|V |+ |E|).

Exerccio 96. Considere a seguinte variante do algoritmo de Dijkstra

Algoritmo 10: Dijkstra'(G, s).

Dado : um grafo G com pesos ρ nas arestas e um vertice s ∈ V(G).Devolve: distG(s, v) para todo v ∈ V(G).

Inicie(G, s);1

para cada v ∈ V(G) faca p[v]← nil;2

enquanto S n~ao-vazio faca3

seja u tal que d[u] = mind[v] : v ∈ S ;4

para cada t ∈ N(u) faca5

se d[t] > d[u] + ρ(u, t) entao6

d[t]← d[u] + ρ(u, t);7

p[t]← u.8

O seguinte algoritmo recebe um grafo com pesos nas arestas e um par de vertices w, v desse grafo

e devolve uma sequencia de vertices v1, v2, . . . , vk, com v1 = w e vk = v.

Algoritmo 11: Imprime caminho mnimo(G,w, v).

Dado : um grafo G vertices w, v ∈ V(G).Devolve: caminho mnimo com extremos w e v, quando existe.

Dijkstra'(G,w);1

enquanto p[v] 6= nil faca2

empilhe v em L;3

v← p[v];4

imprima w;5

enquanto L 6= ∅ faca imprima (desempilhe(L)).6

Prove que a resposta de Imprime caminho mnimo(G,w, v) e um caminho mnimo com extremos

w e v. (Dica: prove que a sequencia e um passeio, que o passeio tem comprimento mnimo e conclua

que o passeio e um caminho.)

2.2.2 Algoritmo de Floyd–Warshall para caminhos mınimos

Seja G = (V, E, ρ) um grafo com pesos nas arestas. Nesta sec~ao vamos apresentar um algoritmo

para resolver o seguinte problema: dado G = (V, E, ρ) computar distG(i, j) para todos i, j ∈ V.Notemos que isso pode ser feito atraves de Dijkstra(G, v) para todo v ∈ V.

Suponha que G seja representado pela matriz

ai,j =

0 se i = j

ρ(i, j) se i, j ∈ E∞ caso contrario.

(2.17)

Antes de apresentarmos o algoritmo precisamos de algumas denic~oes. 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 e um [k]-caminho se o seus vertices internos v0, . . . , vt pertencem a [k]. Com isso

podemos denir uma variante da distancia que chamaremos de [k]-distancia entre i e j como o

comprimento do menor [k]-caminho com extremos i e j e e denotada por distk(i, j), com dist0(i, j) =

ai,j.

Page 41: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos com pesos nas arestas 41

4

5

23

2

12

2 10 1

Figura 2.6: Exemplo dos conceitos denidos acima.

Exemplo 19. O seguinte diagrama representa um grafo com pesos nas arestas. O unico [0]-caminho

com extremos 3 e 4 e 3, 4; os [1]-caminhos com extremos 3 e 4 s~ao 3, 4 e 3, 1, 4; os [2]-caminhos com

extremos 3 e 4 s~ao 3, 4 e 3, 1, 4 e 3, 2, 4 e 3, 1, 2, 4 e 3, 2, 1, 4; esses s~ao tambem todos os [3]-caminhos

e [4]-caminhos com extremos 3 e 4.

No grafo representado acima temos d0(3, 4) = 5, d1(3, 4) = 4 e d2(3, 4) = d3(3, 4) = d4(3, 4) = 3.

Tambem, d0(1, 2) = d1(1, 2) = d2(1, 2) = 10, d3(1, 2) = 4 e d4(1, 2) = 3.

Notemos que d0(i, j) e dado por ai,j denido em (2.17).

Suponha que conhecemos os valores de distk(i, j) para algum k > 0 e para todos os pares

(i, j) ∈ V×V. Podemos obter distk+1 a partir de distk da seguinte maneira. Por denic~ao, a [k+1]-

distancia e o comprimento do menor [k + 1]-caminho e a [k]-distancia e o comprimento do menor

[k]-caminho; a diferenca entre esses caminhos e que no primeiro, os [k+ 1]-caminhos, e possvel que

o vertice k+ 1 seja vertice interno e no segundo n~ao, pois [k+ 1] = [k] ∪ k+ 1. Dessa forma,

distk+1(i, j) = mindistk(i, j),distk(i, k+ 1) + distk(k+ 1, j)

. (2.18)

Resumindo, da matriz de adjacencias temos a [0]-distancia e, para todo k ∈ [|V |−1], a partir da [k]-

distancia sabemos determinar a [K+1]-distancia. Repetindo esse procedimento podemos determinar

as [|V |]-distancias, que nada mais e do que a distancia usual.

Escrevendo de outra forma ca:

Algoritmo 12: FloydWarshall(G)

Dado : um grafo G com peso ρ nas arestas.

Devolve: distG(i, j) para todos i, j ∈ V(G).

para cada (i, j) ∈ V2 faca1

dist0(i, j)← ai,j, onde ai,j e como em (2.17);2

para cada k de 1 ate |V | faca3

para cada (i, j) ∈ V2 faca4

distk(i, j)← mindistk−1(i, j),distk−1(i, k) + distk−1(k, j).5

Analise e correcao do algoritmo de Floyd–Warshall. A correc~ao segue de (2.18).

Teorema 17. A complexidade do algoritmo de FloydWarshall com entrada G = (V, E) e

O(|V |3).

Exercıcios

Exerccio 97. Determine disti(j, k) para toda terna (i, j, k) ∈ V3 no grafo da gura 2.6.

Page 42: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

42 Caminhos, circuitos e caminhos mnimos

Exerccio 98. A seguinte vers~ao do algoritmo de FloydWarshall funciona corretamente? Justique.

Algoritmo 13: FloydWarshall(G)

Dado : um grafo G com peso ρ nas arestas.

Devolve: distG(i, j) para todos i, j ∈ V(G).

para cada (i, j) ∈ V2 faca1

dist(i, j)← ai,j;2

para cada k de 1 ate |V | faca3

para cada (i, j) ∈ V2 faca4

dist(i, j)← mindist(i, j),dist(i, k) + dist(k, j).5

Exerccio 99. Escreva um algoritmo O(|V |3) que determina a cintura de um grafo G = (V, E).

Page 43: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 3

CONEXIDADE

Neste captulo, apresentamos a classe dos grafos conexos, grafos com quaisquer dois vertices

ligados por um caminho. Tambem, apresentamos uma medida de conexidade de grafos, abordamos

problemas algortmicos quando for pertinente e por m mostramos um exemplo de como cons-

truir grafos de alta conexidade, ou seja, que tolera um grande numero de remoc~oes sem tornar-se

desconexo e com o numero mnimo de arestas possvel.

3.1 Grafos conexos

Um grafo G e conexo se e n~ao-vazio e quaisquer dois vertices de G s~ao extremos de um caminho

em G.

Dizemos que H e um subgrafo conexo maximal de G se n~ao existe um subgrafo conexo F ⊆ G tal

que H ⊂ F. Os subgrafos conexo maximais de um grafo qualquer s~ao os componentes conexos do

grafo. Por exemplo, no grafo do exemplo 1 temos quatro componentes conexos, a saber, induzidas

pelos conjuntos de vertices 1, 2, 5, 3, 4, 6, 7 e 8.

Uma denic~ao equivalente de componente conexo e a seguinte. A relac~ao binaria sobre V(G)

denida por u ∼G v se, e somente se, existe um caminho com extremos u e v em G e uma relac~ao de

equivalencia. As classes de equivalencia dessa relac~ao s~ao os vertices dos componentes componentes

conexos de G.E facil de ver que se G n~ao-vazio e desconexo ent~ao ha pelo menos dois subconjuntos de vertices

U e W disjuntos tais que E(U,W) = ∅. A recproca dessa armac~ao n~ao vale no caso geral

(justique), mas e valida quando W = U.

Proposicao 18. Um grafo e conexo se e somente se E(U,U) 6= ∅ para todo subconjunto proprio

e n~ao-vazio de vertices U.

Demonstrac~ao. Se G e conexo e U um subconjunto proprio e n~ao-vazio de V(G), para qualquer

u ∈ U e qualquer w ∈ U existe em G um caminho com extremos u e w e pelo menos uma aresta

desse caminho deve estar em E(U,U).

Por outro lado, suponha que E(U,U) 6= ∅ para todo subconjunto proprio e n~ao-vazio U ⊂ V(G).Denimos U(v) como o conjunto de todos os vertices w ∈ V(G) para os quais existe um caminho

com extremos v e w em G e vamos mostrar que U(v) = V(G) o que, claramente, signica que G e

conexo.

Suponha U(v) 6= V(G). De v ∈ U(v) temos que U(v) e n~ao-vazio. Como E(U(v), U(v)

)6= ∅,

existe x ∈ U(v) e x, y ∈ E(U(v), U(v)

)e nesse caso y ∈ U(v) por denic~ao de U(v), contradizendo

x, y ∈ E(U(v), U(v)

). Portanto, U(v) = V(G).

Se G e um grafo e e uma aresta de G, ent~ao denimos o grafo obtido pela remoc~ao de e por

G − e =(V, E \ e

). (3.1)

Proposicao 19. Se G = (V, E) e conexo ent~ao G− e e conexo para toda aresta e que pertence

a algum circuito de G.

Demonstrac~ao. Seja G um grafo conexo, e = v1, v2 uma aresta de G e C = v1, v2, . . . , vk, v1 um

circuito de G ao qual pertence a aresta e. Vamos mostrar que G− e e conexo. Vamos denotar por

C− e o caminho v2, . . . , vk, v1 em G− e.

Sejam u e v dois vertices quaisquer de G e vamos denotar u = u1 e v = um.

Seja P = u1, u2, . . . , um um caminho em G com extremos u e v. Se e 6∈ E(P) ent~ao P ⊆ G − e,

caso contrario e = uj, uj+1, para algum j, e u1, . . . , uj−1, C − e, uj+2, . . . , um e um passeio em

G− e com extremos u e v (veja exerccio 76). Logo G− e e conexo.

Page 44: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

44 Conexidade

Se G e um grafo e v um vertice de G, ent~ao denimos o grafo obtido pela remoc~ao de v por

G − v =(V \ v, E \ E(v)

). (3.2)

Um vertice v ∈ V num grafo conexo G = (V, E) e chamado de articulacao (ou vertice de corte)

se a remoc~ao do vertice v e das arestas de E(v) em G resulta num grafo desconexo, isto e, o grafo

G− v e desconexo.

Um grafo sem articulac~oes e chamado de biconexo. Os subgrafos biconexos maximais de um

grafo G qualquer s~ao chamados de componentes biconexos de G.

Exemplo 20. No grafo do diagrama na gura 3.1 s~ao articulac~oes os vertices 1, 3, 7, 9. Os com-

3

5 2

46

7

8

9 10

11 12

13

1

Figura 3.1: 1, 3, 7, 9 s~ao articulac~oes.

ponentes biconexos s~ao os subgrafos induzidos pelos conjuntos de vertices: 1, 13, 1, 2, 3, 4, 5, 6,

3, 7, 7, 8, 9, 10 e 3, 9, 11, 12.

3

7 7

8

9 10

3

9

11 12

13

1

3

5 2

46

1

Figura 3.2: Os seis componentes biconexos do grafo exibido na gura acima.

3.1.1 Articulacoes

Na discuss~ao que segue tratamos do problema computacional: dado G conexo, determinar as

articulac~oes de G. Consideramos um grafo conexo G com pelo menos 3 vertices e usaremos a vers~ao

rotulada da busca em profundidade, o algoritmo 5, para determinar as articulac~oes de um grafo.

Notemos que numa execuc~ao de BP(G,w), como o grafo e conexo, todos os vertices ser~ao visitados.

Baseados em (1.20) estabelecemos a seguinte nomeclatura. Se existe algum inteiro t ∈ N tal

que pai(t)[v] = u ent~ao dizemos que u e ancestral de v ou que v e descendente de u. No caso

particular de pai[u] = v dizemos que u e filho de v. Vamos chamar de patriarca o vertice inicial

de um percurso em profundidade, isso e, o unico vertice v ∈ V que tem pai[v] = nil.

Observac~ao 10. Do exerccio 72 podemos estabelecer as seguintes equivalencias

(a)[chega[v], sai[v]

]∩[chega[u], sai[u]

]= ∅ v n~ao e descendente de u,

nem u e descendente de v

(b)[chega[v], sai[v]

]⊂[chega[u], sai[u]

]v e descendente de u

(c)[chega[v], sai[v]

]⊃[chega[u]sai[u]

]u e descendente de v

e sabemos (proposic~ao 10) que para quaisquer dois vertices distintos u, v ∈ V(G) exatamente uma

das possibilidades acima vale apos a execuc~ao do algoritmo.

Page 45: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Grafos conexos 45

Para facilitar a referencia, reproduzimos abaixo o algoritmo de busca rotulada apresentado na

sec~ao 1.7.2

Algoritmo 14: BP(G,w).

Dado : um grafo G e um vertice w.

Devolve: busca em profundidade em G a partir de w com rotulos chega, sai e pai em cada

vertice.

cont← cont+ 1;1

chega[w]← cont;2

para cada u ∈ N(w) faca3

se chega[u] = 0 entao4

pai[u]← w;5

BP(G,u);6

cont← cont+ 1;7

sai[w]← cont.8

Nas linhas 3 e 4 do algoritmo 14 testamos para cada u ∈ N(w) se chega[u] = 0, ou seja se u n~ao

foi visitado. Se a condic~ao e falsa, ent~ao dizemos que a aresta w,u e uma aresta de retorno.

Em outras palavras, aresta de retorno e toda aresta que n~ao e da forma v, pai[v] apos uma busca

em profundidade como no algoritmo 14.

Exemplo 21. A gura 3.3 a seguir ilustra as denic~oes que acabamos de ver com uma busca em

profundidade no grafo do exemplo 20 dado pela listas de adjacencias ordenadas em ordem crescente

e a ordem em que os vertices s~ao visitados e representada de cima para baixo e da esquerda para a

direita.

1

2

3

4

5

7

6 12

8 10

13

9

11

Figura 3.3: Vis~ao esquematica de uma busca em profundidade no grafo do exemplo 20. O vertice

1 e o patriarca da busca, as arestas tracejadas s~ao arestas de retorno, 2 e ancestral de 11 pois

2 = pai(3)[11] = pai[pai[pai[11]

]]e, reciprocamente, 11 e descendente de 2.

O nosso objetivo e caracterizar, usando uma busca em profundidade, os vertices de um grafo

conexo que s~ao articulac~oes. Antes, vamos provar dois resultados simples. Lembramos que estamos

assumindo G conexo e com pelo menos tres vertices.

Consideremos a execuc~ao de uma busca em profundidade rotulada BP(G,w).

Proposicao 20. Se x, y ∈ E(G) ent~ao ou x e descendente de y ou y e descendente de x.

Demonstrac~ao. Podemos supor x, y aresta de retorno, o outro caso e imediato.

Se chega[x] < chega[y] ent~ao na primeira vez que a aresta x, y e visitada e a partir de y

(corresponde a u = x ew = y na linha 3 do algoritmo 14) e nesse momento x ainda esta na pilha, pois

a aresta x, y ainda n~ao foi visitada a partir de x. Portanto chega[x] < chega[y] < sai[y] < sai[x]

e pela observac~ao 10 y e descendente de x.

Se chega[y] < chega[x] ent~ao deduzimos de maneira analoga que x e descendente de y.

Page 46: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

46 Conexidade

Proposicao 21. Se v1 e v2 s~ao lhos de u ent~ao n~ao ha descendente de v1 adjacente a

descendente de v2, para qualquer u ∈ V(G).

Demonstrac~ao. Se v1 e v2 s~ao lhos de u ent~ao v1 n~ao e descendente de v2 nem v2 e de v1, ou

seja,[chega[v1], sai[v1]

]∩[chega[v2], sai[v2]

]= ∅.

Se u e um descendente de v1 ent~ao chega[v1] ≤ chega[u] < sai[u] ≤ sai[v1]. Se w e

um descendente de v2 ent~ao chega[v2] ≤ chega[w] < sai[w] ≤ sai[v2]; logo conclumos que[chega[u], sai[u]

]∩[chega[w], sai[w]

]= ∅ e pelo resultado anterior u,w 6∈ E(G).

O seguinte resultado caracteriza as articulac~oes com relac~ao a uma busca em profundidade. A

partir desta caracterizac~ao escreveremos um algoritmo que determina as articulac~oes de um grafo

conexo.

Teorema 22. Seja G um grafo n~ao-trivial. O vertice u ∈ V(G) e uma articulac~ao se e somente

se numa busca em profundidade

(1) u e patriarca e tem mais de um lho; ou

(2) u n~ao e patriarca mas tem um lho v tal que nenhuma arestas de retorno dos descen-

dentes de v tem como outro extremo um ancestral proprio de u.

Demonstrac~ao. Vamos provar que se vale a armac~ao (1) ou (2) do enunciado para o vertice

u ∈ V(G) ent~ao u e uma articulac~ao.

Suponha que u e patriarca com mais de dois lhos e sejam v1 e v2 dois desses lhos. Como n~ao

ha descendente de v1 adjacente a descendente de v2 todo caminho com extremos v1 e v2 passa por

u, ou seja, o grafo G − u e desconexo pois nele n~ao ha caminho com extremos v1 e v2; assim u e

articulac~ao.

Suponha agora que u n~ao e patriarca e seja w o pai[u]. Seja v0 um lho de u com descendentes

v1, v2, . . . , vk. Pela proposic~ao 21 qualquer caminho com extremos vi (i ∈ 0, 1, . . . , k) e w ou tem

u como vertice interno ou tem uma aresta de retorno vj, x, para algum j ∈ 0, 1, . . . , k e x ancestral

proprio de u. Se tais arestas n~ao existem ent~ao todo caminho com extremos w e um descendente

de v0 passa por u assim em G− u e desconexo.

Agora, vamos supor que u e uma articulac~ao de um grafo G n~ao-trivial e consideremos uma

execuc~ao de BP(G,w). Sejam x e y dois vertices de G que n~ao s~ao extremos de caminho em G−u.

Todo caminho em G com extremos x e y s~ao da forma x, z1, z2, . . . , zk, u, zk+1, . . . , zt, y.

Sabemos que ou (i) x e descendente de y, ou (ii) y e descendente de x ou (iii) nem x e descendente

de y, nem y de x. No caso (i) temos, pelo fato de u ser articulac~ao e pela proposic~ao 21, que u

e ancestral de x e e descendente de y, logo ha um caminho x, z1, z2, . . . , zk, u, zk+1, . . . , zt, y com

nenhuma aresta sendo de retorno. Se houver uma arestas de retorno entre um descendente de zk e

um ancestral de zk+1 ent~ao em G − u havera cominho com extremos x e y. O caso (ii) e analogo,

portanto, n~ao ha tais arestas de retorno.

Resta o caso em que nem x e descendente de y, nem y de x. Notemos que u e um ancestral

comum de x e y. Nesse caso, tome z o ancestral comum de x e y com maior valor de chega[ ]. Se

z = w ent~ao u = w e, portanto, u e patriarca e tem pelo menos 2 lhos. Se u n~ao e patriarca,

consideremos um caminho x, z1, z2, . . . , zk, u, zk+1, . . . , zt, y com todas as arestas com extremos pai-

e-lho. Como todo caminho entre x e y contem u e G−u e desconexo ent~ao zk n~ao tem descendente

adjacente a um ancestral de u ou zk+1 n~ao tem descendente adjacente a um ancestral de u.

Exemplo 22. Considere a representac~ao graca da gura 3.3. O vertice 1 e uma articulac~ao pelo

caso (1) do lema. O vertice 3 cai no caso (2) com v = 7 e 9 cai no caso (2) com v = 10 (note que

v = 11 n~ao serve para classicar 9 no caso (2)).

Pelo teorema 22, para determinar se u ∈ V(G) e uma articulac~ao basta executar um busca em

profundidade a partir de qualquer vertice, testar se o patriarca tem mais de um lho e se todo

vertice tem todo lho com um descendente adjacente a um ancestral. A seguinte func~ao e uma

Page 47: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Grafos conexos 47

busca em profundidade modicada para identicar articulac~oes baseada no teorema 22. O valor

devolvido por esta func~ao com argumento w ∈ V(G) e

m = minchega[x] : x e ancestral de u adjacente a um descendente de u, para todo u lho de w.

(3.3)

Notemos que se u e lho de w e m ≥ chega[w], ent~ao w e articulac~ao pelo teorema 22.

Funcao BP-Art(G,w).

cont← cont+ 1;1

chega[w]← cont;2

min← cont;3

para cada u ∈ N[k] faca4

se chega[u] = 0 entao5

m← BP(u);6

se m < min entao min← m;7

se m ≥ chega[w] entao art[w]← art[w] + 1;8

senao se chega[u] < min entao min← chega[u];9

devolva(min).10

Analise e correcao do algoritmo BP-Art. O algoritmo e, essencialmente, uma busca em

profundidade.

Teorema 23. A complexidade para determinar as articulac~oes de G = (V, E) e O(|V |+ |E|).

Para provar que o algoritmo funciona corretamente, vamos provar que art[w] = 0 se e somente

se w n~ao e uma articulac~ao.

Note que art[w] so e incrementado se vale a condic~aom ≥ chega[w], ondem e o valor retornado

por BP(G,u) quando u e um lho de w, isso signica que para toda aresta x, y, onde y e um

descendente de u e x um ancestral de w vale que chega[x] ≥ chega[w]; pelo teorema 22 isso signica

que w e uma articulac~ao.

Exercıcios

Exerccio 100. Prove que se todos os vertices de G conexo tem grau par ent~ao G n~ao tem aresta

de corte, ou seja, uma aresta cuja remoc~ao resulta num grafo desconexo.

Exerccio 101. Mostre que se ∆(G) ≤ 2 ent~ao os componentes conexos de G ou s~ao caminhos ou

s~ao circuitos.

Exerccio 102. Seja H um subgrafo gerador de G. Mostre que se H e conexo ent~ao G e conexo.

Exerccio 103. Seja G um grafo com n vertices. Considere os graus dos vertices em ordem crescente,

δ(G) = d1 ≤ d2 ≤ · · · ≤ dn = ∆(G). Mostre que se dk ≥ k vale para todo k com 0 < k < n−∆(G),

ent~ao G e conexo.

Exerccio 104. Seja G o grafo denido sobre o conjunto de vertices 0, 1, . . . , n−1 com u, v ∈ E(G)se, e somente se, u− v ≡ ±k mod n.

1. De um condic~ao necessaria e suciente sobre n e k para que G seja conexo.

2. Determine o numero de componentes conexos em func~ao de n e k.

Exerccio 105. Escreva um algoritmo com complexidade O(|V |+ |E|) que determine os componentes

biconexos de um grafo.

Exerccio 106 (Teorema de Brooks, 1941). Prove que se G e conexo, n~ao e completo e n~ao e um

circuito mpar ent~ao

χ(G) ≤ ∆(G).(Dica: induc~ao na ordem do grafo.)

Page 48: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

48 Conexidade

3.2 Conexidade de grafos

Dado um subconjunto U ⊂ V(G) denotamos por G−U o subgrafo induzido por V(G) \U. Para

todo k ∈ N, dizemos que um grafo G e k-conexo se

|V(G)| > k e

para todo U ⊂ V(G), se |U| < k ent~ao G−U e conexo.

Claramente, todo grafo n~ao-vazio e 0-conexo. Ainda, todo grafo n~ao-trivial conexo e 1-conexo e

todo grafo biconexo com pelo menos tres vertices e 2-conexo. Alem disso, segue imediatamente da

denic~ao que todo grafo k-conexo tambem e `-conexo para todo natural ` < k.

Exemplo 23. O grafo do diagrama abaixo e 0-conexo, 1-conexo e 2-conexo mas n~ao e 3-conexo

porque a remoc~ao do conjunto de vertices e, d resulta num grafo desconexo.

c

eb

d

a1

2

3 4

5

A conexidade de G e o maior inteiro k para o qual G e k-conexo

κ(G) = maxk ∈ N : G e k-conexo

. (3.4)

No exemplo 23 temos κ(G) = 2. Para o grafo completo com n vertices temos κ(Kn) = n − 1

para todo n > 1.

Analogamente, podemos denir a aresta conexidade de um grafo. Denotamos por G− F o grafo

(V, E \ F). Dizemos que G e k-aresta-conexo se

|V(G)| > 1 e

para todo F ⊂ E(G), se |F| < k ent~ao G− F e conexo.

O grafo do exemplo 23 e 0-aresta-conexo, 1-aresta-conexo, 2-aresta-conexo e 3-aresta-conexo,

mas n~ao e 4-aresta-conexo.

Segue da denic~ao que todo grafo n~ao-trivial e 0-aresta-conexo, todo grafo n~ao-trivial e conexo

e 1-aresta-conexo. Ainda, todo grafo k-aresta-conexo e `-aresta-conexo para todo natural ` < k.

A aresta-conexidade de G e o maior inteiro k para o qual G e k-aresta-conexo.

λ(G) = maxk ∈ N : G e λ(G) = max

k ∈ N : G e k-aresta-conexo

. (3.5)

No exemplo 23 temos λ(G) = 3.

Notemos que o grafo completo com n > 1 vertices n~ao e n-aresta-conexo pois a remoc~ao de

todas as arestas de E(v), para qualquer v, torna esse vertice isolado. De uma maneira mais geral,

temos que λ(G) ≤ δ(G). No exemplo 23 vale que λ(G) < δ(G).

Usando o fato descrito no paragrafo acima no teorema 1, pagina 8, podemos deduzir que o

numero de arestas num grafo e

|E(G)| ≥ 12|V(G)|λ(G), (3.6)

logo, o numero mnimo de arestas num grafo k-aresta-conexo e

|E(G)| ≥ k2|V(G)|. (3.7)

Qual e o menor numero de arestas que um grafo k-conexo pode ter? Veremos que esse numero e

k|V(G)|/2. Antes demonstraremos o seguinte resultado.

Page 49: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Conexidade de grafos 49

Teorema 24. Para todo G com pelo menos 2 vertices

λ(G) ≥ κ(G). (3.8)

Demonstrac~ao. Vamos provar por induc~ao que para todo k ∈ N a seguinte sentenca e verdadeira

para qualquer grafo G com pelo menos 2 vertices:

se λ(G) = k ent~ao κ(G) ≤ k. (3.9)

Primeiro provamos a base da induc~ao. A sentenca vale para k = 0 pois se λ(G) = 0 ent~ao G e

desconexo e, portanto, κ(G) = 0.

Para um k ≥ 1 xo assumimos, por hipotese, que se λ(G) = k − 1 ent~ao κ(G) ≤ k − 1 para

qualquer grafo G com pelo menos 2 vertices.

Fixamos G um grafo qualquer com pelo menos 2 vertices e λ(G) = k. Vamos mostrar que

κ(G) ≤ k.Pela denic~ao de aresta-conexidade sabemos que existe F ⊆ E(G) com |F| = k e G− F desconexo.

Escolha uma aresta qualquer e ∈ F e consideremos o grafo G− e.

Pela escolha de e, no grafo G − e existe F ′ ⊂ E(G − e) tal que |F ′| = k − 1 e (G − e) − F ′ e

desconexo. Ainda, λ(G − e) = k − 1 pois o grafo G − e n~ao pode ter um subconjunto de arestas

de cardinalidade k − 2 cuja remoc~ao desconecta G − e; caso contrario G teria um subconjunto de

arestas de cardinalidade < k cuja remoc~ao o tornaria desconexo.

Pela denic~ao de conexidade ou |V(G− e)| = κ(G− e) + 1 ou existe U ⊂ V(G− e) com κ(G− e)

vertices e (G− e) −U desconexo. Pela hipotese indutiva temos que κ(G− e) ≤ k− 1.No primeiro caso temos |V(G)| = |V(G − e)| ≤ k, portanto κ(G) < k, ou seja, a sentenca (3.9)

acima vale.

No segundo caso vale que, ou G−U e desconexo e temos κ(G) ≤ |U| ≤ k− 1, ou G−U e conexo

e a remoc~ao de e torna G − U desconexo e temos que se e = xy ent~ao G − U − x e desconexo,

portanto κ(G) ≤ |U| + 1 ≤ k. Notemos que G − U − x = K1 n~ao ocorre pois, nesse caso, teramos

|V(G)| = |U|+ 2 = |V(G− e)|+ 1, uma contradic~ao.

Pelo Princpio do Induc~ao Finita a sentenca (3.9) vale para todo k ∈ N e isso prova o teorema.

Da equac~ao 3.6 e do teorema que acabamos de provar tiramos que para todo G com pelo menos

dois vertices

|E(G)| ≥ 12|V(G)|κ(G). (3.10)

Portanto, o numero mnimo de arestas num grafo k-conexo e

|E(G)| ≥ k2|V(G)|.

Observac~ao 11. Algoritmos ecientes para determinar a conexidade s~ao baseados no teorema de

Menger (veja exerccio 118) e tecnicas de uxo em redes (sec~ao 6.4).

Exercıcios

Exerccio 107. Determine κ(G) e λ(G) nos casos Pk, Ck, Kk, k-cubo (denido no exerccio 86), e

Km,n.

Exerccio 108. De uma cota inferior para o grau medio de um grafo k-conexo com n vertices.

Exerccio 109. E verdade que se G e k-aresta-conexo ent~ao |E(U,U)| ≥ k para todo U ⊂ V(G)

n~ao-vazio?

Exerccio 110. Prove que se G e 3-regular ent~ao κ(G) = λ(G).

Exerccio 111. Prove que todo grafo k-conexo (k ≥ 2) com pelo menos 2k vertices contem um

circuito de comprimento maior ou igual a 2k.

Exerccio 112. Prove que todo grafo 2-conexo minimal contem um vertice de grau 2.

Page 50: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

50 Conexidade

Exerccio 113. Prove que se δ(G) ≥ |V(G)|− 2 ent~ao κ(G) = δ(G).

Exerccio 114. Prove que se δ(G) ≥ |V(G)|/2 ent~ao λ(G) = δ(G).

Exerccio 115. Prove ou de um contra-exemplo: dado k ≥ 1, se G e k-conexo ent~ao para todo

U ⊆ V(G) com |U| > k o subgrafo G[U] e k-conexo.

Exerccio 116. Dado um grafo G qualquer, n~ao necessariamente conexo, os blocos do grafo G s~ao:

1. os subgrafos 2-conexo maximais de G,

2. as arestas de corte e

3. os vertices de grau zero.

A partir de G construmos o grafo de blocos de G, denotado por BG da seguinte forma: BG tem

um vertice para cada bloco de G e um vertice para cada articulac~ao dos componentes conexos de

G. As arestas s~ao dadas pelos pares vb, onde v corresponde a um vertice de corte de G e b um

bloco de G, de forma que \v ∈ b", isto e, o vertice de corte (articulac~ao) em G correspondente a v

pertence ao bloco de G que corresponde a b. A gura abaixo mostra um grafo e o grafo de blocos

correspondente.

x

y y

x

(a) (b)

Figura 3.4: (a) Um grafo com articulac~oes x e y e (b) seu grafo de blocos.

Prove que

(a) cada aresta de G pertence a um unico bloco,

(b) G e a uni~ao de seus blocos,

(c) dois blocos distintos de G tem no maximo um vertice em comum,

(d) se x ∈ V(G) e um vertice que pertence a dois blocos de G ent~ao x e um vertice de corte.

Exerccio 117. Descreva um algoritmo que determina os blocos de um grafo. Qual a complexidade

do algoritmo?

Exerccio 118 (Teorema de Menger, 1927). Prove que G e k-conexo (k ≥ 1) se e somente se para

quaisquer u, v ∈ V(G) existem k caminhos disjuntos nas arestas que ligam u a v.

Exerccio 119. Vale a vers~ao do Teorema de Menger para k-aresta-conexidade?

3.2.1 Construcao de grafos k-conexos minimais

Nessa sec~ao vamos mostrar como construir grafos de uma dada conexidade e com o menor

numero possvel de arestas. Dados k ≥ 2 e n > k vamos construir o grafo Hn,k = (V, E) sobre

V =0, 1, . . . , n− 1

com ⌈

k|V(G)|

2

⌉arestas. O conjunto de arestas de Hn,k depende da paridade de k:

1. Se k e par, digamos k = 2r, ent~ao

E =i, j : − r ≤ j− i ≤ r com as operac~oes modulo n

.

Page 51: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Conexidade de grafos 51

2. Se k e mpar, digamos k = 2r+ 1, ent~ao

(2.1) Se n e par,

E = E(Hn,k−1) ∪i, i+ (n/2) : 1 ≤ i ≤ n/2

.

(2.2) Se n e mpar,

E = E(Hn,k−1) ∪0, (n− 1)/2, 0, (n+ 1)/2

∪i, i+ (n+ 1)/2 : 1 ≤ i < (n− 1)/2

.

Para determinar |E(Hn,k)|, no caso (1) as arestas s~ao dadas pelo equac~ao (1), onde k = 2r. O grau

do vertice i e o numero de inteiros modulo n no intervalo [i− r, i+ r], que corresponde ao proprio

i, ou seja, 2r. Assim, 2|E(Hn,k)| = nk pelo Teorema 1. No outro caso, deixamos a vericac~ao para

o leitor.

Lema 25. O grafo Hn,k e k-conexo.

Demonstrac~ao. Nesta demonstrac~ao as operac~oes aritmeticas nas quais os operandos s~ao vertices

s~ao feitas modulo n.

Para mostrar que esse grafo e k-conexo, k = 2r, suponhamos que exista U ⊂ V(Hn,k) com

|U| < 2r e Hn,k − U desconexo. Tome dois vertices i e j em componentes distintas de Hn,k − U e

considere as sequencias de vertices S = (i, i + 1, i + 2, . . . , j − 1, j) e T = (j, j + 1, j + 2, . . . , i − 1, i),

onde as adic~oes s~ao modulo n. Desde que |U| < 2r temos que |U ∩ S| < r ou |U ∩ T | < r. Vamos

assumir que |U ∩ S| < r, o outro caso e analogo. Com isso, podemos deduzir que existe em S \ U

uma subsequencia P = i0, . . . , it de vertices distintos tais que i0 = i, it = j e |i` − i`+1| ≤ r (mod

n), logo i` e i`+1 s~ao adjacentes para todo 0 ≤ ` < t. De fato, considere a sequencia de vertices

i, i + r, i + 2r, . . . , i + tr em S, onde t e o menor natural tal que i + (t − 1)r < j ≤ i + tr. Como

|U| < r podemos escolher i` tal que i+ (`− 1)r < i` ≤ i+ `r.Tal sequencia P e um caminho com extremos i e j, o que contradiz o fato deles estarem em

componentes distintas.

Agora, suponha k = 2r + 1 com n par e que exista U ⊂ V(Hn,k) com |U| ≤ 2r e Hn,k − U

desconexo. Tome dois vertices i e j em componentes distintas de Hn,k−U e considere as sequencias

de vertices S e T como acima. Se |U ∩ S| < r ou |U ∩ T | < r ent~ao temos um caminho de i ate j por

deduc~ao analoga ao caso anterior. Vamos assumir que |U ∩ S| = r e que |U ∩ T | = r.Pra n~ao haver uma sequencia como a P denida acima, e preciso que os r vertices de U em S

sejam vertices consecutivos i+ s+ 1, i+ s+ 2, . . . , i+ s+ r. Analogamente, os r vertices de U em T

devem ser consecutivos, digamos j+t+1, j+t+2, . . . , j+t+r. Nesse caso, i e um vertice do caminho

Q = j+t+r+1, j+t+r+2, . . . , i+s e j e um vertice do caminho R = i+s+r+1, i+s+r+2, . . . , j+t.

Resta notar que deve haver uma aresta da forma v, v + (n/2) com v em R e v + (n/2) em Q,

contradizendo o fato de i e j pertencerem a componentes conexos distintos.

Finalmente, o caso n mpar e k mpar e deixado como exerccio para o leitor.

Exemplo 24. Abaixo temos, respectivamente, os diagramas dos grafos H8,4, H8,5 e H9,5.

0

1

45

6

7

8

2

3

0

1

2

3

4

7

6

5

0

1

2

3

4

7

6

5

Page 52: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

52 Conexidade

3.3 Grafos eulerianos e grafos hamiltonianos

Em 1796 Euler resolveu o problema conhecido como as sete pontes de Konigsberg no que

e considerando o primeiro resultado em Teoria dos Grafos. O problema e decidir se e possvel

atravessar cada uma das pontes uma unica vez e retornar ao ponto de partida (veja a gura na

pagina 5). Em outras palavras, dado um grafo queremos saber se existe um passeio fechado onde

toda aresta ocorre exatamente uma vez. Grafos que admitem tal passeio s~ao ditos eulerianos.

Analogamente, podemos considerar o caso de decidir se um grafo com pelo menos tres vertices

contem um circuito gerador. Grafos que admitem uma resposta positiva s~ao ditos hamiltonianos.

Neste captulo apresentamos essas famlias de grafos e veremos que os eulerianos s~ao facilmente ca-

racterizados por uma propriedade que pode ser testada ecientemente, enquanto que n~ao e conhecida

uma boa caracterizac~ao de grafos hamiltonianos.

3.3.1 Grafos eulerianos

E possvel desenhar a gura abaixo sem tirar o lapis do papel e sem repetir nenhum traco?

Vamos reformular essa pergunta na terminologia de Teoria dos Grafos. Dizemos que num grafo

G = (V, E) uma sequencia alternada verticearestavertice que n~ao repete arestas

v0e1v1 . . . vk−1ekvk, (3.11)

com ei = vi−1, vi ∈ E, para todo i ∈ 1, 2, . . . , k, e ei 6= ej para todo i 6= j, e chamada de trilha.

Se em (3.11) temos v0 = vk, ent~ao dizemos que a trilha e uma trilha fechada. Uma trilha que

passa por todas as arestas do grafo e chamada de trilha euleriana e uma trilha fechada que passa

por todas as arestas do grafo e chamada de trilha euleriana fechada. Um grafo que contenha

uma trilha euleriana fechada e dito grafo euleriano.

Observac~ao 12. Num grafo a sequencia dada em (3.11) pode ser representado por

v0v1 . . . vk−1vk,

com vi−1, vi ∈ E. No entanto, tudo o que e dito nesta sec~ao vale tambem para multigrafos e, nesse

sentido, vieivi+1 e dirente de vifivi+1 para ei e fi arestas distintas com extremos vi e vi+1.

Exemplo 25. O seguinte diagrama representa o grafo que modela o problema dado no comeco da

sec~ao

1

2

3 4

5 6

a

b

ef

g

h

i

dc

Figura 3.5: Exemplo: 1a2b3c4d2 e 4d2b3c4e5f3 s~ao trilhas no grafo.

Page 53: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Grafos eulerianos e grafos hamiltonianos 53

Teorema 26 (Teorema de Euler, 1735). Um grafo conexo e euleriano se, e somente se, todo

vertice tem grau par.

Demonstrac~ao. Se um grafo conexo e euleriano, ent~ao todo vertice ocorre numa trilha euleriana

fechada T ; um vertice que ocorre k vezes na trilha T tem grau 2k.

Por outro lado, suponha que um grafo conexo tem todos os seus vertice de grau par. Seja

T = v0e1v1 . . . v`−1e`v` uma trilha com o maior numero possvel de arestas, com isso a trilha

contem todas as arestas cujos extremos s~ao os vertices v0 e v`. Como todos os vertices tem grau

par v0 = v`.

Agora, suponha que e e uma aresta que n~ao aparece na trilha. Note que podemos assumir e = uvipara algum vi ∈ T , pois o grafo e conexo. Mas, isso implica que ueviei+1 . . . e`v`e1v1 . . . ei−1vi e

uma trilha com mais arestas que T . Portanto, T passa por todas as arestas do grafo.

Exercıcios

Exerccio 120. Mostre que se G tem no maximo dois vertices de grau mpar ent~ao G contem uma

trilha euleriana.

Exerccio 121. Mostre que se G e euleriano ent~ao LG (veja exerccio 17) e euleriano.

Exerccio 122. Um grafo euleriano pode ter uma aresta de corte?

Exerccio 123. Prove que um grafo conexo e euleriano se pode ser particionado em circuitos aresta-

disjuntos.

Exerccio 124. O algoritmo de Fleury, de 1883, descobre uma trilha euleriana fechada se o grafo

dado for euleriano.

Algoritmo 16: Fleury(G)

Dado : um grafo euleriano G.

Devolve: um trilha euleriana fechada.

S← ∅;1

escolha u ∈ V(G);2

enquanto E(G) 6= ∅ faca3

insira u no nal de S;4

escolha e = u,w ∈ E(G) e, se for possvel, de forma que G− e tenha o mesmo numero de5

componentes conexos que G;

u← w;6

G← G− e.7

devolva S.8

Prove que se G e euleriano ent~ao a trilha denida pela sequencia vertices adjacentes S =

(u1, u2, . . . , u`) construda pelo algoritmo e euleriana. Determine a complexidade do algoritmo.

3.3.2 Grafos hamiltonianos

Um circuito C ⊆ G e um circuito hamiltoniano em G se V(C) = V(G). Um grafo que contem

circuito hamiltoniano e chamado grafo hamiltoniano.

Exemplo 26. Um grafo que pode ser representado pelo seguinte diagrama e chamado de dodecaedro.

O dodecaedro e um grafo hamiltoniano, em particular, foi o grafo que deu origem ao termo.

Uma condic~ao necessaria para um grafo ser hamiltoniano e que a remoc~ao de um subconjunto

de vertices resulta num numero limitado de componentes conexos.

Proposicao 27. Se G e hamiltoniano, ent~ao o numero de componentes conexos de G − S e

no maximo |S| para todo S ⊂ V(G) n~ao-vazio.

Page 54: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

54 Conexidade

Demonstrac~ao. Basta notar que o numero de componentes de G − S e no maximo o numero de

componentes de C− S que e no maximo |S| para todo circuito hamiltoniano C ⊆ G.

Vejamos um contra-exemplo para a recproca do resultado acima. O grafo de Petersen, mostrado

na gura abaixo, n~ao e hamiltoniano. Pode-se vericar caso-a-caso que a remoc~ao de qualquer

subconjunto proprio e n~ao-vazio de vertices S, o numero de componentes do grafo obtido e sempre

menor ou igual a |S|.

3

1

4

89

10 7

6

25

Figura 3.6: Grafo de Petersen.

Uma condic~ao suciente para um grafo ser hamiltoniano e o seguinte resultado.

Teorema 28 (Teorema de Dirac, 1952). Para todo grafo G = (V, E) com n ≥ 3 vertices, se

δ(G) ≥ n/2 ent~ao G e hamiltoniano.

Demonstrac~ao. Seja P = v0, . . . , vm o maior caminho em G e dena os conjuntos

A =vi ∈ V(P) : v0, vi+1 ∈ E

e B =

vj ∈ V(P) : v0, vj ∈ E

. (3.12)

Observamos que A e B s~ao subconjuntos de v0, v1, . . . vm−1 com pelo menos n/2 > (m− 1)/2

vertices e pelo Princpio da Casa dos Pombos A∩B 6= ∅. Escolha vk ∈ A∩B e considere o circuito

v0 v1 v2 vk vk+1 vmvm−1

C = v0, vk+1, . . . , vm, vk, . . . , v0.

Se C n~ao e hamiltoniano ent~ao existem u ∈ V(G)−V(C) e vj ∈ V(C) tais que u, vj ∈ E(G). Re-escrevendo o circuito C acima como u0 = vj, u1, . . . , um, u0 ent~ao temos o caminho u, u0, u1, . . . , umcom uma aresta a mais que P, absurdo. Logo C e hamiltoniano.

Claramente, nem todo grafo hamiltoniano tem grau mnimo alto, como contra-exemplo para a

recproca do resultado anterior basta considerar qualquer circuito com pelo menos 5 vertices, que e

hamiltoniano e 2-regular.

Grafos hamiltonianos n~ao s~ao, ate o momento, caracterizados por uma propriedade n~ao-trivial

que possa ser vericada ecientemente; decidir se um grafo e hamiltoniano e um problema NP-

completo.

Page 55: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Grafos eulerianos e grafos hamiltonianos 55

Exercıcios

Exerccio 125. Mostre que se G n~ao e 2-conexo ent~ao G n~ao e hamiltoniano.

Exerccio 126. Prove que se G e bipartido com bipartic~ao V(G) = A ∪ B onde |A| 6= |B|, ent~ao G

n~ao e hamiltoniano.

Exerccio 127. Mostre que o n-cubo e hamiltoniano para todo n ≥ 2.Exerccio 128. Um caminho hamiltoniano em G e um caminho que passa por todos os vertices

de G. Mostre que se G contem um caminho hamiltoniano ent~ao o numero de componentes conexos

de G− S e no maximo |S|+ 1, para todo subconjunto proprio de vertices S.

Exerccio 129. Prove que se G e tal que todo par de vertices u, v n~ao-adjacentes vale d(u)+d(v) ≥|V(G)|− 1, ent~ao G contem um caminho hamiltoniano.

Exerccio 130. Prove: d(u) + d(v) ≥ |V(G)| para todo par u, v de vertices n~ao adjacentes, ent~ao G

hamiltoniano se e somente se G+ uv hamiltoniano.

Exerccio 131. Mostre que se G e um grafo euleriano ent~ao LG e hamiltoniano. De um exemplo

onde a recproca n~ao vale.

Exerccio 132. De um exemplo de grafo com n vertices, grau mnimo bn/2c e n~ao-hamiltoniano,

para todo n ≥ 3.

Page 56: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

56 Conexidade

Page 57: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 4

ARVORES E FLORESTAS

Este captulo apresenta a classe dos grafos que s~ao conexos e, em certo sentido, minimais. Da

equac~ao (3.10), na pagina 47, podemos deduzir que um grafo de conexidade 1 sobre o conjunto de

vertices V tem pelo menos d|V |/2e arestas. N~ao e uma tarefa difcil nos convencermos de que grafos

com conexidade 1 e esse numero mnimo de arestas n~ao existem para |V |.3. Grafos conexos e com

o menor numero possvel de arestas s~ao estudados nesse captulo.

Apresentamos tambem o problema da arvore geradora de custo mnimo: dado um grafo conexo

com pesos nas arestas, determinar um um subgrafo gerador conexo minimal e, ainda mais, de custo

total mnimo. Este problema e bastante conhecido e estudado ha bastante tempo; apresentaremos

dois algoritmos para o problema: o algoritmo de Kruskal, proposto em 1956 por Joseph Kruskal, e

o algoritmo de Prim, de 1957 e devido a Robert Prim (o mesmo algoritmo foi inventado um tempo

antes, em 1930, pelo matematico Tcheco Vojtech Jarnk). O primeiro algoritmo para esse problema

de que se tem notcia e o algoritmo de Otakar Bor _uvka de 1926.

4.1 Arvores, definicao e caracterizacao

Uma floresta e um grafo sem circuitos. Os componentes conexos de uma oresta s~ao arvores,

ou seja, uma arvore e um grafo conexo e sem circuitos.

Notemos que o grau mnimo de toda arvore com pelo menos tres vertices e 1; isso porque se o

grau mnimo fosse pelo menos 2 ent~ao a proposic~ao 11 garante que o grafo teria circuito. Chamamos

de folha todo vertice de grau 1 numa arvore.

Antes de enunciar e provar uma caracterizac~ao vamos vamos denir mais uma operac~ao em grafo.

Sejam G um grafo e x, y ∈ V(G). Denotamos por G + xy o grafo

G+ xy =(V(G), E(G) ∪

x, y

).

Teorema 29. As seguintes armac~oes s~ao equivalentes para todo grafo G = (V, E):

(1) G e arvore;

(2) para quaisquer x, y ∈ V existe um unico caminho em G com extremos x e y;

(3) G e conexo minimal: G e conexo e G− e e desconexo, para qualquer e ∈ E;

(4) G e acclico maximal: G e acclico e G + xy contem circuito, para quaisquer x, y ∈ Vn~ao adjacentes em G.

Demonstrac~ao. Para G trivial o teorema vale trivialmente. Se G tem ordem 2 ent~ao G = K2 e a

vericac~ao e facil, deixa-mo-la para o leitor. Vamos supor que G tem pelo menos 3 vertices e vamos

mostrar (1)⇒(2)⇒(3)⇒(4)⇒(1).

Que (1)⇒ (2): Seja G uma arvore. Como G e conexo, existe um caminho P = x, x1, x2, . . . , xn, y.

Suponha que exista outro caminho Q = x, y1, y2, . . . , ym, y, Q 6= P. Dena x0 = y0 = x, xn+1 =

ym+1 = y e os ndices

p = mini : i ≥ 0 e xi+1 6= yi+1, eq = minj : j > p e xj = y` para algum ` > p.

Essesndices est~ao bem denidos, como os caminhos s~ao distintos 0 ≤ p < minm,n e p < q ≤ n+1.Agora, xp, xp+1, . . . , xq, y`−1, y`−2, . . . , yp e um circuito em G, uma contradic~ao. Assim, o caminho

com extremos x e y e unico.

Que (2)⇒ (3): Seja G tal que (2) vale. Por hipotese G e conexo. Para toda aresta e = x, y ∈ Etemos que P = x, y e o unico caminho com extremos x e y, portanto, G− e e desconexo.

Page 58: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

58 Arvores e Florestas

Que (3) ⇒ (4): Seja G conexo minimal. Se G contem circuito, ent~ao para qualquer e ∈ E(G)que pertenca a um circuito temos que G−e e conexo (proposic~ao 19), uma contradic~ao. Agora, seja

x, y ∈ V n~ao adjacentes em G; como G e conexo existe um caminho, digamos P = x, v1, . . . , vk, y,

com extremos x e y. Em G+ xy temos o circuito x, v1, . . . , vk, y, x.

Que (4) ⇒ (1): Seja G um grafo acclico maximal. Como G e acclico so precisamos mostrar

que e conexo. Observamos que se n~ao existe caminho com extremos x e y, ent~ao x, y 6∈ E(G) logoG+ xy n~ao contem circuito, uma contradic~ao.

Dessa forma, ca estabelecida a equivalencia das proposic~oes.

Como consequencia do teorema 29 temos o seguinte corolario.

Corolario 30. Uma arvore com n vertices e um grafo conexo com o menor numero possvel

de arestas dentre todos os grafos conexos com n vertices.

O numero de arestas de caracteriza arvores. Por um lado temos o seguinte resultado.

Lema 31. Toda arvore com n vertices tem n− 1 arestas.

Demonstrac~ao. Vamos provar por induc~ao em n ≥ 1 que a seguinte armac~ao vale: se um grafo

com n vertices e uma arvore ent~ao o numero de arestas e n − 1. Se o grafo e trivial, isto e

n = 1, ent~ao o numero de arestas e 0. Dado n ≥ 2, vamos assumir que toda arvore com n − 1

vertices tem n− 2 arestas e seja G uma arvore com n vertices. Tome v ∈ V(G) uma folha de G. O

grafo G− v e uma arvore (justique) com n− 1 vertices e pela hipotese indutiva |E(G− v)| = n− 2.

Como |E(v)| = 1 e |E(G− v)| = |E(G) \ E(v)|, temos que |E(G)| = n− 1. Portanto, pelo Princpio de

Induc~ao Finita, a armac~ao vale para todo n ≥ 1.

Antes de provar a recproca desse resultado, introduziremos alguns conceitos.

Se o subgrafo gerador T ⊆ G e uma arvore ent~ao chamamos T de arvore geradora de G.

Todo grafo conexo tem uma arvore geradora: Seja G um grafo conexo e seja T ⊆ G um subgrafo

gerador de G, conexo e com o menor numero de arestas possvel. Se T contem circuito ent~ao para

qualquer aresta e de um circuito T − e e conexo e tem menos arestas que T , uma contradic~ao.

Desse fato, podemos concluir que a recproca do lema 31: suponha que G e conexo, com n

vertices e n− 1 arestas. Seja T ⊆ G uma arvore geradora de G. Como acabamos de mostrar T tem

n− 1 arestas, logo T = G. Decorre dessa igualdade que G e uma arvore.

Teorema 32. Um grafo com n vertices e uma arvore se, e somente se, e conexo e o numero

de arestas e n− 1.

Um algoritmo que recebe um grafo conexo e determina uma arvore geradora do grafo conexo

e facil e rapido e ja sabemos como fazer: e o subgrafo induzido pelo conjunto de arestas M =v, pai[v] : v ∈ V(G) e pai[v] 6= nil

, onde o vetor pai[ ] e determinado pela execuc~ao do algoritmo

5(veja os exerccios 69 e 84).

Exemplo 27. Um grafo conexo e uma arvore geradora determinada por uma busca em profundidade

BP(G, 1), algoritmo 5 s~ao mostrados na gura 4.1 abaixo.

G:

13

3

5 1 2

46

7 9 10

11 12

8

T :

1

13

2

3

4

5

9

11

12

7

108

6

Figura 4.1: T e a arvore geradora de G denida pelo vetor pai de uma busca em profundidade,

algoritmo 5.

Page 59: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Arvores geradoras de custo mnimo em grafos com pesos nas arestas 59

Exercıcios

Exerccio 133. Determine o numero de arestas de uma oresta com n vertices e com k componentes

conexos, em func~ao de n e k.

Exerccio 134. Desenhe todas as arvores n~ao-isomorfas com 5 vertices e todas as arvores n~ao-

isomorfas com 7 vertices e com grau maximo pelo menos 4.

Exerccio 135. Mostre que toda arvore T tem pelo menos ∆(T) folhas.

Exerccio 136. Prove que o conjunto de arestas pai[v], v denido por uma busca em profundidade

rotulada induz uma arvore.

Exerccio 137. Seja G um grafo. Mostre que as seguintes armac~oes s~ao equivalentes:

(a) G e conexo e |E(G)| = |V(G)|− 1;

(b) |E(G)| = |V(G)|− 1 e G n~ao contem circuito.

(c) G e uma arvore;

Exerccio 138. Considere uma oresta F com n vertices e m arestas.

(a) Qual e o numero maximo de vertices num componente conexo de F?

(b) Mostre que ha pelo menos maxn− 2m, 0 vertices de grau zero.

(c) Mostre que se m < n/2 ent~ao resta pelo menos um vertice de grau zero.

Exerccio 139. Seja T uma arvore, u e v dois vertices n~ao adjacentes em T e e ∈ E(T) uma aresta

do circuito em T + uv. Mostre que

T + uv − e =(V(T), E(T) ∪

u, v

\ e

)e uma arvore.

Dizemos que essa arvore foi obtida por uma operacao elementar a partir da arvore T .

Exerccio 140. Sejam T1, T2 ⊂ G arvores geradoras distintas de um grafo conexo G. Mostre que T2pode ser obtida a partir de T1 atraves de uma sequencia de operac~oes elementares.

Exerccio 141. Prove que se uma aresta e de corte (veja exerccio 100) num grafo G ent~ao ela

pertence a todas as arvores geradoras de G.

Exerccio 142. Seja T uma arvore de ordem t. Mostre que qualquer grafo com grau mnimo pelo

menos t− 1 contem um subgrafo isomorfo a T .

Exerccio 143. Mostre que se G e um grafo conexo ent~ao o grafo de blocos BG (exerccio 116) e

uma arvore.

Exerccio 144. Seja G um grafo conexo com n vertices e m arestas, m ≥ n. Se T ⊂ G e uma arvore

geradora de G ent~ao o numero de arestas de G que n~ao est~ao em T e m− n+ 1. Denotaremos por

e1, e2, . . . , em−n+1 tais arestas em E(G) \ E(T). Em T + ei temos um circuito que denotamos por

Ci, para todo 1 ≤ i ≤ m−n+ 1. Chamaremos C1, C2, . . . , Cm−n+1 de circuitos fundamentais de

G com respeito a T . Denimos 0 · Ci = ∅ e 1 · Ci = E(Ci). Mostre que para todo circuito C ⊂ Gexiste uma sequencia (b1, b2, . . . , bm−n+1) ∈ 0, 1m−n+1 tal que E(C) e dado por

b1 · C1 ⊕ b2 · C2 ⊕ · · · ⊕ bm−n+1 · Cm−n+1,

ou seja, todo circuito e combinac~ao linear de circuitos fundamentais. Dena um espaco vetorial a

partir das informac~oes acima.

4.2 Arvores geradoras de custo mınimo em grafos com pesosnas arestas

Dado um grafo conexo com pesos nas arestas G = (V, E, ρ), onde ρ : E → R, denimos o custo

de um subgrafo H ⊂ G como

c(H) =∑

e∈E(H)

ρ(e).

Page 60: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

60 Arvores e Florestas

O problema no qual estamos interessados a partir de agora e: qual e o custo do subgrafo gerador

conexo de G \mais barato"? Em outras palavras, queremos determinar S ⊆ E(G) que induz uma

arvore geradora de G e tal que

c(G[S]) = minc(T) : T e arvore geradora de G

.

Uma arvore geradora de G de custo mnimo tambem e chamada de arvore geradora mınima

do grafo G.

A seguir apresentamos os algoritmos de JarnkPrim e Kruskal para o problema de determinar

uma arvore geradora mnima. Os algoritmos de JarnkPrim e Kruskal s~ao algoritmos gulosos, que

e uma tecnica de projeto de algoritmos para resolver problemas de otimizac~ao, esses algoritmos

baseam-se na escolha que parece ser a melhor no momento (otimo local) e terminam com a soluc~ao

otima (otimo global).

4.2.1 Algoritmo de Jarnık–Prim para arvore geradora mınima

O algoritmo de JarnkPrim recebe um grafo conexo G = (V, E, ρ) e devolve S ⊆ E tal que G[S]

e uma arvore geradora mnima de G. O algoritmo parte de um conjunto unitario, digamos U = v

para algum v ∈ V, e a cada rodada o algoritmo acrescenta a U o vertice de U que e extremo da

aresta de menor custo em E(U,U), ate que U = V. No nal, as arestas escolhidas induzem uma

arvore geradora mnima.

Algoritmo 17: JarnkPrim(G)

Dado : um grafo conexo G com pesos nas arestas.

Devolve: arvore geradora de custo mnimo.

escolha v ∈ V(G);1

U← v;2

S← ∅;3

enquanto U 6= V(G) faca4

escolha u,w ∈ E(U,U) de peso mnimo no corte;5

insira u,w em S;6

v← u,w ∩U;7

insira v em U;8

devolva (V, S).9

Notemos que esse algoritmo e uma ligeira modicac~ao do algoritmo 3 (pela proposic~ao 18 os

lacos desses dois algoritmos tem a mesma condic~ao) e, como sabemos, S induz uma arvore geradora

de G. Entretanto, n~ao sabemos se tal arvore e mnima.

Analise e correcao do algoritmo de Jarnık–Prim. Como no correc~ao do algoritmo de Dijks-

tra, usaremos a tecnica do invariante do laco.

Teorema 33. Para k ∈ N, apos k iterac~oes do enquanto na linha 4 vale que (U, S) e uma

subarvore de uma arvore geradora mnima de G.

Demonstrac~ao. Pela construc~ao do algoritmo, o par (U, S) e um grafo. Denote por Sk e Uk os

conjuntos S e U mantidos pelo algoritmo apos a k-esima iterac~ao do laco na linha 4. A prova e por

induc~ao em k.

Para k = 0 a armac~ao no enunciado vale pois S0 = ∅ e U0 = v e (U0, S0) e subarvore de toda

arvore geradora mnima de G.

Suponha que (Uk−1, Sk−1) e uma subarvore da arvore geradora mnima Tmin. Sejam w ∈ V(G)e u,w ∈ E(G) tais que Uk = Uk−1 ∪ w e Sk = Sk−1 ∪

u,w

. Vamos mostrar que (Uk, Sk) e

uma subarvore de alguma arvore geradora mnima de G.

Que (Uk, Sk) e uma arvore deixamos para a vericac~ao do leitor. Se u,w ∈ E(Tmin) ent~ao Tmin

contem (Uk, Sk), logo podemos supor que u,w 6∈ E(Tmin).

Page 61: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Arvores geradoras de custo mnimo em grafos com pesos nas arestas 61

Pelo teorema 29 o grafo Tmin + uw contem um circuito. Esse circuito tem uma aresta e ∈ETmin(Uk−1, Uk−1) pois u ∈ Uk−1 e w ∈ Uk−1, logo o unico caminho em Tmin com extremos u e w

deve conter uma aresta desse corte, portanto Tmin+uw− e e arvore geradora de G. Pela escolha do

algoritmo na linha 5 ρ(u,w) ≤ ρ(e) e como Tmin tem custo mnimo Tmin + uw − e e uma arvore

geradora de custo mnimo que contem Tk. O teorema segue do Princpio da Induc~ao Finita.

Como a cada rodada do laco um vertice e inserido em U, que comeca com um vertice, o laco

sera executado |V | − 1 vezes, apos o que U = V, portanto (U, S) e arvore geradora mnima de G.

Com isso terminamos a prova de correc~ao do algoritmo de JarnkPrim e passamos a estudar a

complexidade desse algoritmo.

A complexidade de tempo do algoritmo de JarnkPrim depende da implementac~ao do passo

5 do algoritmo. Se ordenamos as arestas o custo e O(|E| log |E|) (veja [7]) e cada busca na linha 5

gasta O(|E|). Assim o custo total e O(|E| log |E|) +O(|V ||E|) = O(|V ||E|). Tomando um pouco mais

de cuidado podemos melhorar o tempo do algoritmo signicativamente. Agora, vamos mostrar uma

implementac~ao do algoritmo de JarnkPrim de complexidade O(|E| log |V |). Vejamos como ca

usando uma la de prioridades implementada por uma heap binaria. O algoritmo usa dois vetores

indexados por V e uma la de prioridades:

chave[ ] em cada instante da execuc~ao do algoritmo chave[v] armazena o peso da aresta de menor

peso em E(U,U) ∩ E(v);

pai[ ] as arestas v, pai[v] s~ao as arestas escolhidas pelo algoritmo;

Q la de prioridades indexada por U e com chave chave[ ] | quanto menor o valor de chave maior

a prioridade.

O algoritmo ca assim:

escolha v ∈ V(G);para cada u ∈ V(G) facachave[u]←∞;

pai[u]← nil;chave[v]← 0;

U← ∅;construa uma la de prioridades Q indexada por V(G) e com prioridades chave[ ];

enquanto U 6= ∅ faca

u← extrai mnimo de U;

para cada t ∈ N(u) faca

se t ∈ U e ρ(u, t) < chave[t] entaochave[t]← ρ(u, t);

pai[t]← u.

As 7 primeiras linhas s~ao executadas em tempo O(|V |), incluindo-se a o tempo para construir a

la de prioridades. A analise agora segue como exatamente como no caso do algoritmo de Dijkstra,

resultando em O ((|V |+ |E|) log |V |) = O(|E| log |V |), pois o grafo e conexo.

Teorema 34. A complexidade do algoritmo JarnkPrim(G) e O(|E(G)| log |V(G)|).

4.2.2 Algoritmo de Kruskal para arvore geradora mınima

A ideia do algoritmo de Kruskal tambem e bastante simples, a cada passo escolhemos a aresta

mais barata dentre as que ainda n~ao foram escolhidas, desde que ela n~ao forme circuito com as

Page 62: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

62 Arvores e Florestas

arestas ja escolhidas:

Algoritmo 18: Kruskal(G)

Dado : um grafo conexo G com pesos nas arestas.

Devolve: arvore geradora de custo mnimo.

S← ∅;1

F← la das arestas em ordem n~ao-decrescente de peso;2

para cada e ∈ F faca3

se S ∪ e n~ao induz circuito em G entao4

insira e em S;5

devolva (V, S).6

Analise e correcao do algoritmo de Kruskal. Vamos provar que o algoritmo de Kruskal

determina uma arvore geradora de custo mnimo de um grafo conexo e com pesos nas arestas.

Teorema 35. O grafo (V, S) devolvido por Kruskal(G) e uma arvore geradora mnima de G.

Demonstrac~ao. Dado G conexo e com pesos nas arestas, sejam S o conjunto construdo pelo algo-

ritmo e T uma arvore geradora mnima de G com o maior numero possvel de arestas em comum

com S. Vamos mostrar que E(T) = S.

Suponha S \ E(T) 6= ∅ e dena m = minj : ej ∈ S \ E(T), onde o mnimo e com relac~ao a

sequencia (e1, e2, . . . , em) em que as arestas foram inseridas no conjunto S pelo algoritmo.

Pelo teorema 29 T + em contem um circuito pois em /∈ E(T) e nesse circuito deve existir uma

aresta f que n~ao esta em S porque G[S] e acclico. O conjunto de arestas F = e1, . . . , em−1 ∪ f

esta em T , portanto, F n~ao induz circuito, mas como f n~ao foi escolhida pelo algoritmo de Kruskal

tem-se ρ(f) ≥ ρ(em).

Logo c(T − f+ em) ≤ c(T) e como T e de custo mnimo tambem T − f+ em e de custo mnimo e,

ainda, com mais arestas em comum com S que T , contrariando a escolha de T , portanto S\E(T) = ∅,ou seja S ⊆ E(T). Para concluir, E(T) \ S = ∅ pois, dado que S ⊆ E(T), qualquer e ∈ E(T) satisfaza condic~ao da linha 4 do algoritmo.

Notemos que enquanto o conjunto S evolui de ∅ ate denir uma arvore geradora ele sempre dene

uma sub oresta de G, ou seja, uma colec~ao de subconjuntos disjuntos de vertices (os componentes

conexos) e o teste na linha 4 acima verica se a aresta e = x, y n~ao liga vertices do mesmo conjunto

(caso contrario, teremos um circuito) e nesse caso, na linha 5, une o conjunto onde esta o vertice

x com o conjunto do vertice y. Assim, precisamos de estruturas de dados que, dinamicamente,

representem e manipulem conjuntos disjuntos de modo eciente. Estruturas como essa s~ao conhe-

cidas na literatura como estruturas para uni~ao-e-busca (union-nd) ou estruturas de dados para

conjuntos disjuntos (veja apendice A.2.2). Essas estruturas mantem dinamicamente uma famlia

de subconjuntos disjuntos com um elemento de cada subconjunto eleito como o representante do

subconjunto e temos as operac~oes

faz(x) cria o conjunto unitario x, com representante x;

busca(x) devolve o representante do conjunto ao qual x pertence;

uni~ao(x, y) substitui os conjuntos que contem x e y pela uni~ao desses conjuntos (e determina um

representante para essa uni~ao).

Dentre as estruturas de dados mais ecientes para implementar conjuntos disjuntos, chamamos

a atenc~ao para uma delas: a representac~ao por oresta com as heursticas uni~ao por rank e busca

com compress~ao de caminhos (veja A.2.3, pagina 95). Essa representac~ao com as heursticas

mencionadas tem um excelente desempenho assintotico.

Page 63: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Arvores geradoras de custo mnimo em grafos com pesos nas arestas 63

Denotamos por lg∗(n) o numero de vezes que temos que iterar a func~ao lg ate que o valor obtido

seja menor ou igual a 1, por exemplo, lg∗ 216 = 4. Estimativas apontam que o numero de atomos

no universo observavel e 1080 e lg∗ 1080 = 4.

O seguinte resultado e demonstrado no apendice, teorema 66 na sec~ao A.2.3.

Teorema 36. A complexidade de m operac~oes faz/busca/uni~ao, das quais as n primeiras

s~ao faz, onde n e o numero de elementos do conjunto universo, e O((m+ n) lg∗(n)).

Reescrevendo o algoritmo de Kruskal com as considerac~oes feitas acima sobre estruturas de dados

para conjuntos disjuntos

S← ∅;F← la das arestas em ordem n~ao-decrescente de peso;

para cada v ∈ V(G) faca faz(v);

para cada u, v ∈ F faca

se busca(u) 6= busca(v) entaoinsira u, v em S;

uni~ao(u, v);devolva (V, S).

Nesse caso, o numero de operac~oes faz, busca e uni~ao no algoritmos de Kruskal e menor

que 2(|E| + |V |). A complexidade de tempo do algoritmo de Kruskal e O((|E| + |V |) lg∗ |V |) para as

operac~oes (teorema 36) mais O(|E| log |E|) para a ordenac~ao das arestas; resultando

Corolario 37. A complexidade de Kruskal(G) e O(|E| log |E|).

Exercıcios

Exerccio 145. Seja G um grafo conexo com pesos na arestas. Prove que se e e uma aresta de peso

mnimo em G ent~ao e pertence a alguma arvore geradora mnima de G.

Exerccio 146. Seja G um grafo conexo com pesos na arestas. Prove que se e e uma aresta de

peso maximo em G e pertence a um circuito de G ent~ao existe uma arvore geradora mnima de

(V(G), E(G) \ e) que tambem e uma arvore geradora mnima de G. Mostre que o mesmo vale para

toda aresta de peso maximo de todo circuito de G.

Exerccio 147. Seja G um grafo conexo com pesos na arestas. Prove que para qualquer U ( V(G)n~ao-vazio, a aresta de menor custo em E(U,U) tem que pertencer a toda arvore geradora de G.

Exerccio 148. Seja T ⊂ G uma arvore geradora de um grafo G com pesos nas arestas. Mostre que

T e uma arvore geradora mnima se e somente se para toda e ∈ E(G) \ E(T), o unico circuito C de

T + e e tal que todas as arestas de C custam n~ao mais que ρ(e).

Exerccio 149. Mostre que se para todo corte em G existe uma unica aresta de custo mnimo no

corte, ent~ao a arvore geradora de custo mnimo de G e unica. A recproca dessa armac~ao vale?

Justique.

Exerccio 150. Seja G um grafo conexo com pesos positivos nas arestas. Para toda arvore geradora

mnima T e todo caminho P ⊂ T , P e um caminho mnimo em G?

Exerccio 151. Mostre que para toda arvore geradora mnima T ⊂ G existe uma ordenac~ao nas

arestas de G tal que T e a arvore devolvida pelo algoritmo de Kruskal.

Exerccio 152. Suponha que todos os pesos das arestas de G s~ao positivos. Mostre que qualquer

subconjunto de arestas que induz um subgrafo conexo e tem peso total mnimo e uma arvore. De

um exemplo com pesos n~ao-positivos onde a conclus~ao n~ao vale.

Exerccio 153. Considere a seguinte estrategia generica para computar uma arvore geradora de

custo mnimo. Seja G = (V, E, ρ) um grafo conexo com pesos nas arestas. Dado S ⊂ E(G), dizemos

Page 64: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

64 Arvores e Florestas

que uma aresta de u, v ∈ E(G) e boa para S se S ∪u, v

⊂ E(T) para alguma arvore geradora

mnima T de G.

Algoritmo 19: AGM(G)

Dado : um grafo conexo G com pesos nas arestas.

Devolve: arvore geradora de custo mnimo.

S← ∅;1

enquanto G[S] n~ao e arvore geradora faca2

escolha uma aresta f boa para S em E(G) \ S;3

insira f em S;4

devolva (V, S).5

(a) Primeiro, suponha que sempre existe pelo menos uma aresta boa pra ser escolhida em

cada iterac~ao do enquanto e que um oraculo entrega essa aresta para algoritmo sempre

que a linha 3 e executada. Prove que AGM(G) constroi uma arvore geradora mnima

de G. (Dica: determine e prove um invariante para o laco.)

(b) Agora, vamos provar que sempre ha uma aresta boa pra ser escolhida pelo oraculo.

Prove que se T e uma arvore geradora mnima de G e S ⊂ E(T) ent~ao para todo

U ⊂ V(G) tal que o corte E(U,U) n~ao contem arestas de S, uma aresta u, v de custo

mnimo no corte E(U,U) e 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 6∈ E(T).)(c) Por m, use o resultado do exerccio acima para dar uma prova da correc~ao dos algoritmos

de JarnkPrim e Kruskal, isto e prove que esses algoritmos sempre escolhem arestas boas.

Page 65: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 5

EMPARELHAMENTOS

Emparelhamento em um grafo nada mais e do que um conjunto independente de arestas; e

um dos topicos mais estudados da Teoria dos Grafos devido a ampla variedade de aplicac~oes (uma

referencia que aborda profundamente esse tema e [21]). Os primeiros estudos conhecidos s~ao de

G. Monge de 1784 e o caso de grafos bipartidos teve seus fundamentos estabelecidoso por Frobenius

e por Konig, por volta de 1915. Neste captulo o conceito de emparelhamento e apresentado na

primeira sec~ao e na segunda sec~ao a enfase e dada ao caso especial de emparelhamentos em grafos

bipartidos. Por m, tratamos de aspectos algortmicos em grafos bipatidos.

5.1 Emparelhamento

Num grafo G = (V, E), dizemos que M ⊆ E e um emparelhamento se as arestas de M s~ao

duas-a-duas n~ao-adjacentes, ou seja, e ∩ f = ∅ para quaisquer e, f ∈ M. De modo equivalente,

chamamos M de emparelhamento se G[M] e um subgrafo 1-regular.

Exemplo 28. Considere o grafo dado pelo diagrama da gura 5.1 abaixo. O conjunto M =2, 4, 5, 6

e um emparelhamento; note que n~ao ha arestas do emparelhamento com extremo

nos vertices 1 e 3.

1

2

3 4

5 6

Figura 5.1: M =2, 4, 5, 6

e um emparelhamento no grafo representado acima.

Seja G um grafo eM um emparelhamento em G. Quando um vertice v ∈ V(G) pertence a alguma

aresta e ∈ M, dizemos que v e coberto por M. Dessa forma, pela denic~ao de emparelhamento,

quando v e coberto por M existe uma unica aresta e ∈ E(v) ∩M. Se todo elemento de V(G) e

coberto por alguma aresta de M, ent~ao M e chamado de emparelhamento perfeito em G.

Ha grafos que n~ao admitem emparelhamento perfeito como, por exemplo, os circuitos de compri-

mento mpar; de fato, qualquer emparelhamento em C` tem no maximo b`/2c arestas, logo circuitosde comprimento par admitem emparelhamento perfeito, mas os de comprimento mpar n~ao. No

exemplo da gura 5.1 o emparelhamento1, 2, 4, 5, 3, 6

e perfeito, assim como o emparelha-

mento1, 2, 3, 5, 4, 6

.

Um emparelhamento em G com o maior numero possvel de arestas e chamado de emparelha-

mento maximo, isto e, um emparelhamento com

µ(G) = max|M| : M e emparelhamento em G

(5.1)

arestas.

Exemplo 29. No caso dos circuitos C` e facil ver que µ(C`) = b`/2c. O mesmo vale para grafos

completos µ(Kn) = bn/2c. No caso de caminhos, µ(P`) = b`/2c para todo ` > 0.

Page 66: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

66 Emparelhamentos

No estudo de emparelhamentos em grafos 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 e, xi, xi+1 6∈M se i e mpar e

xi, xi+1 ∈M se i e par,

para todo i ∈ 1, 2, . . . , k− 1, e chamado de M-alternante.

Se os extremos de um caminho M-alternante n~ao s~ao cobertos por M ent~ao chamamos esse

caminho de M-aumentante. Como o nome sugere, a existencia de um caminho M-aumentante P

em G signica que podemos obter um emparelhamento em G com mais arestas que M.

Exemplo 30. Na gura 5.1 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 diferenca simetrica desses conjuntos e(

2, 4, 5, 6∪1, 2, 2, 4, 4, 5, 5, 6, 6, 3

)\(

2, 4, 5, 6∩1, 2, 2, 4, 4, 5, 5, 6, 6, 3

)=1, 2, 4, 5, 6, 3

que e um emparelhamento com uma aresta a mais que M.

Proposicao 38. Sejam G um grafo, M um emparelhamento em G e P um caminho M-

aumentante. A diferenca simetrica M4E(P) = (M∪ E(P)) \ (M∩ E(P)) e um emparelhamento

em G com uma aresta a mais que M.

Demonstrac~ao. Sejam G, M e P como no enunciado. De P e M-aumentante

|M4E(P)| = |(M ∪ E(P)) \ (M ∩ E(P))|=

∣∣(M \ (M ∩ E(P)))∪(E(P) \ (M ∩ E(P))

)∣∣= |M|− |M ∩ E(P)|+ |E(P)|− |M ∩ E(P)|= |M|− |M ∩ E(P)|+ |M ∩ E(P)|+ 1= |M|+ 1.

Resta provar que M4E(P) e emparelhamento. Suponha que n~ao, ent~ao existem duas arestas de

M4E(P) adjacentes, digamos que e, f ∈M4E(P) com e∩f = x. Dessa forma, x deve ser um vertice

interno em P, portanto, deve estar coberto por uma aresta g ∈ M, logo x ∈ e ∩ g e ambas arestas

est~ao em M, absurdo.

O seguinte teorema e uma caracterizac~ao de emparelhamento maximo em func~ao dos caminhos

aumentantes. Esse resultado e fundamental no projeto de um algoritmo eciente que determina

emparelhamentos maximos; mais adiante veremos esse algoritmo para grafos bipartidos.

Teorema 39 (Teorema de Berge, 1957). Um emparelhamento M em G e maximo se, e somente

se, G n~ao contem caminho M-aumentante.

Demonstrac~ao. Vamos mostrar que se um emparelhamento n~ao e maximo ent~ao ha um caminho

aumentante. A recproca dessa armac~ao e a proposic~ao acima.

Seja M um emparelhamento que n~ao e maximo e M∗ um emparelhamento maximo. Considere

o subgrafo induzido pelas arestas dos dois emparelhamentos H = G[M ∪M∗]. Como ∆(H) ≤ 2 oscomponentes conexos de H s~ao circuitos e caminhos (exerccio 101).

Os circuitos tem que ser de comprimento par, por denic~ao de emparelhamento. Se todos

os caminhos tiverem comprimento par ent~ao teremos |M| = |M∗|, logo existe um caminho P de

comprimento mpar e com mais arestas de M∗ o que implica que os extremos do caminho n~ao s~ao

cobertos por M. Esse caminho e M-aumentante em G.

Page 67: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Emparelhamentos e coberturas em grafos bipartidos 67

Exercıcios

Exerccio 154. Prove que uma arvore qualquer tem no maximo um emparelhamento perfeito.

Exerccio 155. Considere um grafo G de n vertices. Mostre que um emparelhamento em G tem no

maximo n/2 arestas.

Exerccio 156. Mostre que o k-cubo admite emparelhamento perfeito, para todo k ≥ 2.Exerccio 157. Duas pessoas jogam um jogo sobre um grafo G alternadamente selecionando vertices

distintos v0, v1, v2, . . . tais que, para i > 0, vi e adjacente a vi−1. O ultimo jogador que conseguir

selecionar um vertice vence o jogo.

Mostre que o primeiro jogador tem uma estrategia para vencer o jogo se e somente se o grafo G

n~ao tem um emparelhamento perfeito.

Exerccio 158. Mostre que µ(G) = α(LG) (veja a denic~ao de LG no exerccio 17).

Exerccio 159. Prove que seM e emparelhamento em G ent~ao existe um emparelhamento maximo

que cobre todos os vertices cobertos por M.

Exerccio 160 (Teorema de Tutte, 1947). Denotemos ci(G) o numero de componentes conexos do

grafo G com um numero mpar de vertices. Mostre que se G tem um emparelhamento perfeito se,

e somente se, ci(G− S) ≤ |S| para todo conjunto S de vertices.

5.2 Emparelhamentos e coberturas em grafos bipartidos

Por toda esta sec~ao adotaremos as seguintes convenc~oes: as partes de vertices independentes de

um grafo bipartido G s~ao denotadas por A e B e escrevemos G = (A∪B, E), tambem, convencionamos

que caminhos M-alternante tem um extremo descoberto em A.

Uma cobertura por vertices em um grafoG (n~ao necessariamente bipartido) e um subconjunto

U ⊆ V(G) tal que e ∩U 6= ∅ para toda aresta e ∈ E, ou seja, toda aresta de G encontra U.

Exemplo 31. No exemplo da gura abaixo temos o diagrama de um grafo bipartido, as arestas

em destaque denem um emparelhamento M. O subconjunto de vertices a1, a2, b3, b4 e uma

cobertura pois todas as arestas do grafo tem pelo menos um desses vertices como extremo.

a5a4a3a2a1

b4b3b2b1

Uma cobertura mınima e uma cobertura com o menor numero possvel de vertices que e

denotado por ν(G),

ν(G) = min|U| : U e cobertura por vertices em G

. (5.2)

Teorema 40 (Teorema de Konig, 1931). Num grafo bipartido G = (A ∪ B, E) o tamanho de um

emparelhamento maximo e igual ao tamanho de uma cobertura mnima, ou seja

µ(G) = ν(G). (5.3)

Demonstrac~ao. Para qualquer cobertura U e qualquer emparelhamentoM vale que toda aresta de

M tem que ter pelo menos um extremo em U, portanto |M| ≤ |U|. Em particular,

µ(G) ≤ ν(G). (5.4)

Page 68: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

68 Emparelhamentos

Agora, considere M um emparelhamento maximo 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 e extremo de algum caminho M-alternante, caso contrario, escolhemos a. Note que dessa

forma temos |C| = |M| = µ(G).

Vamos mostrar que C e uma cobertura. Considere uma aresta qualquer a, b ∈ E(G), ondea ∈ A e b ∈ B, e vamos mostrar que essa aresta encontra C. Se a, b ∈M ent~ao a aresta encontra

C. Vamos supor que a, b n~ao e aresta deM. ComoM e maximo, ou a ou b ou ambos s~ao cobertos

por M, caso contrario teramos um caminho M-aumentante.

Se M n~ao cobre a ent~ao b pertence ao um caminho M-alternante P = a, b e como b e coberto

por M, nesse caso, b ∈ C.Vamos supor que M cobre a e a, b ′ ∈ M para algum b ′ ∈ B, b ′ 6= b. Se a ∈ C ent~ao n~ao ha

o que provar. Agora, se a 6∈ C ent~ao b ′ ∈ C, mas isso signica que b ′ esta no extremo de algum

caminho M-alternante que denotamos por P. Se b esta em P ent~ao b e extremo de um caminho

M-alternante e com isso b ∈ C. Caso contrario, tambem havera um caminho M-alternante com

extremo b: ou P, a, b no caso a 6∈ V(P), ou P ′, b caso a ∈ V(P), onde P ′ denota um subcaminho

alternante de P com um extremo em a. Em ambos os casos teremos b ∈ C pois, comoM e maximo,

n~ao pode haver caminho M-aumentante em G. Em todos os casos a aresta a, b encontra C,

portanto, C e cobertura. Logo |C| ≥ ν(G) e

µ(G) ≥ ν(G). (5.5)

Das equac~oes (5.4) e (5.5) conclumos que ν(G) = µ(G).

Observac~ao 13 (Cobertura em grafos n~ao-bipartidos). O teorema de Konig n~ao vale para grafo

n~ao-bipartido, como mostra o K3, por exemplo, nele µ(K3) = 1 enquanto que ν(K3) = 2. Computar

a cobertura mnima em grafos n~ao-bipartidos e um problema NP-difcil (exerccio 175) enquanto

que µ pode ser computado em tempo polinomial (veja [13]).

O seguinte resultado da uma condic~ao necessaria e suciente para que exista um emparelhamento

que cobre umas das partes de um grafo bipartido.

Teorema 41 (Teorema de Hall, 1935). Em todo grafo bipartido G = (A ∪ B, E) existe um

emparelhamento que cobre A se, e somente se,

|N(S)| ≥ |S| para todo S ⊆ A. (5.6)

Demonstrac~ao. 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 vertice de B tal que x, vx ∈M. Certamente, vx ∈ N(S).

Ainda, se x ∈ S e y ∈ S com x 6= y ent~ao vx 6= vy, logo |N(S)| ≥ |S|.

Agora, suponha que |N(S)| ≥ |S| para todo S ⊆ A e seja U uma cobertura mnima em G.

Denimos A ′ = A ∩U, B ′ = B ∩U, A ′′ = A \A ′ e B ′′ = B \ B ′.

Se n~ao existe um emparelhamento que cobre A ent~ao do teorema 40 deduzimos |U| < |A|. Como

|U| = |A ′|+ |B ′| e |A| = |A ′|+ |A ′′|, se |U| < |A| ent~ao |B ′| < |A ′′|.

Ainda, n~ao ha arestas de A ′′ para B ′′, pois elas n~ao estariam cobertas por U, ou sejaN(A ′′) ⊆ B ′.Portanto

|N(A ′′)| ≤ |B ′| < |A ′′|, (5.7)

contrariando a hipotese.

Essa demonstrac~ao e bastante simples pois todo o trabalho ja foi feito no Teorema de Konig.

Vejamos uma demonstrac~ao que n~ao depende de outros resultados.

Demonstrac~ao alternativa do teorema de Hall. Vamos provar por induc~ao em |A| que se |N(S)| ≥|S| para todo S ⊆ A ent~ao existe um emparelhamento que cobre A.

Se |A| = 1 ent~ao |N(A)| ≥ 1, portanto, existe um emparelhamento que cobre A. Seja G =

(A ∪ B, E) um grafo bipartido que satisfaz (5.6) e suponha que todo grafo bipartido (A ′ ∪ B ′, E)

Page 69: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Emparelhamentos e coberturas em grafos bipartidos 69

com |A ′| < |A| que satisfaz a condic~ao de Hall (5.6) tem um emparelhamento que cobre A ′. A

demonstrac~ao segue em dois casos.

Caso 1: |NG(S)| > |S| para todo S ⊂ A n~ao-vazio. Escolha uma aresta a, b ∈ E e considere o

grafo bipartido G ′ = G− a− b sobre os vertices A ′ = A \ a e B ′ = B \ b. Nesse caso, para cada

S ⊆ A ′ ⊂ A vale que |NG ′(S)| ≥ |S| (justique) e pela hipotese indutiva conclumos que existe M

que cobre A ′. Portanto M ∪a, b

cobre A.

Caso 2: |N(S)| = |S| para algum S ⊂ A n~ao-vazio. O grafo bipartido induzido H = G[S ∪N(S)]

satisfaz a condic~ao de Hall (os vizinhos de S em H s~ao os mesmo vizinhos em G) e pela hipotese

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

|NG(S ∪ X)| = |NH(S) ∪NJ(X)| = |NH(S)|+ |NJ(X)| < |S|+ |X|

contrariando a hipotese de G satisfazer a condic~ao de Hall. Assim |NJ(X)| ≥ |X| para todo X ⊆S e, pela hipotese indutiva, existe um emparelhamento M ′ em J que cobre S. Para concluir a

demonstrac~ao e suciente observar que M ∪M ′ e um emparelhamento em G que cobre A.

Corolario 42 (Forma defectiva do teorema de Hall). Em todo grafo bipartido G = (A ∪ B, E)existe um emparelhamento que cobre A a menos de d vertices se, e somente se,

|N(S)| ≥ |S|− d para todo S ⊆ A. (5.8)

Exercıcios

Exerccio 161. Prove que se G e bipartido ent~ao existe um emparelhamento que cobre todos os

vertices de grau ∆(G).

Exerccio 162. Prove que se G e bipartido e regular ent~ao G tem emparelhamento perfeito.

Exerccio 163. Seja G = (A ∪ B, E) um grafo bipartido com |A| = |B| = n. Mostre que se n~ao

existe um emparelhamento perfeito em G ent~ao existe um subconjunto S com |S| ≤ dn/2e tal que|N(S)| = |S|− 1 e ou S ⊂ A ou S ⊂ B.(Dica: considere um conjunto T minimal violando a condic~ao

de Hall, dada pela equac~ao (5.6).)

Exerccio 164. Prove o corolario 42. (Dica: Adicione d vertices novos a B e faca-os adjacentes a

todos os vertices de A.)

Exerccio 165. Seja G = (A ∪ B, E) um grafo bipartido e A1, A2 uma partic~ao de A e B1, B2

uma partic~ao de B. Mostre que se N(A1) ⊆ B1 ent~ao N(B2) ⊆ A2 e B1 ∪A2 e uma cobertura.

Exerccio 166. Seja G = (A ∪ B, E) um grafo bipartido e M um emparelhamento em G. Seja

U ⊂ V(G) o conjunto dos vertices cobertos porM eW o conjunto dos vertices de todos os caminhos

M-alternantes que tem um dos extremos em A \U. Prove que (B ∩W) ∪ (A \W) e uma cobertura

em G.

Exerccio 167. Prove que todo emparelhamento maximo em G = (A ∪ B, E) tem cardinalidade

minU⊆A

|A|− |U|+ |N(U)|.

Exerccio 168. O permanente de uma matriz quadrada M = M(u, v), onde (u, v) ∈ A × B, e onumero

perm(M) =∑π

∏u

M(u, π(u)),

onde a soma se estende a todas as bijec~oes π : A→ B.

Seja G = (A ∪ B, E) um grafo bipartido tal que |A| = |B|. Seja M a matriz indexada por A× Be denida por M(u, v) = 1 se u, v e uma aresta de G e M(u, v) = 0 caso contrario. Mostre que o

permanente de M e igual ao numero de emparelhamentos perfeitos em G.

Page 70: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

70 Emparelhamentos

Exerccio 169. Na primeira prova que apresentamos do teorema de Hall deduzimos o resultado

do teorema de Konig. Esses teoremas s~ao, de fato, equivalentes. Demonstre o teorema de Konig

(µ > ν) a partir do teorema de Hall.

Exerccio 170. Prove que o teorema de Hall e equivalente ao teorema de Menger (exerccio 118,

pagina 48).

5.3 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 existencia e garantida pelo teorema de

Hall.

A ideia do algoritmo e construir caminhos alternantes a partir de um vertice n~ao-coberto em

A. Por exemplo, no grafo da gura abaixo, o algoritmo comeca pelo vertice a1 n~ao-coberto por

M. O proximo passo e escolher um vizinho de a1. Se existir algum vizinho n~ao coberto, ent~ao

achamos um caminho aumentante, caso contrario uma aresta de M tem extremo nesse vizinho e

temos um caminho alternante, no exemplo a1, b1, a3. O proximo passo e continuar a busca a partir

de um vizinho dos vertices da forma ai ja escolhidos. Notemos, entretanto, que basta buscar tais

vizinhos dentre os vertices ainda n~ao escolhidos, no nosso exemplo, apos o estagio representado pela

gura (e) abaixo n~ao ha necessidade de considerar a aresta a3, b5 pois o novo caminho alternante

denido por essa aresta seria redundante para nossos propositos. No estagio dado pela gura (f)

chegamos a um caminho aumentante.

a5a4a3a2a1

b2b1 b3 b4

a6

b5 b6

G :

a1a1

b4b3b1

a3 a4 a2

b6b5

a6a6

b5

a3 a4 a2

b4b3b1

a1

b4b3b1

a3 a4 a2

(e) (f)(d)

a1

b3

a4a3

b1

a1

(a)

a1

b1

a3

(b) (c)

Quando o algoritmo descobre um caminho aumentante, usa-o para obter um emparelhamento

com mais arestas e recomeca o processo. Caso contrario, teremos construdo caminhos alternantes

que comecam num vertice descoberto e todos terminam num vertice coberto. Os vertices desses

caminhos denem um conjunto que viola a condic~ao de Hall. Por exemplo, na gura abaixo o

algoritmo comeca pelo vertice n~ao-coberto a4. Esse vertice tem os vizinhos b2 e b3 que est~ao

cobertos pelas arestas a1b2 e a3b3 respectivamente. O vertice a1 ja tem todos os seus vizinhos

escolhidos, assim como a3, e n~ao se pode mais estender os caminhos. Nesse caso N(a1, a3, a4) =

b1, b2 e a1, a3, a4 e um obstaculo para um emparelhamento cobrir A.

Essa ideia esta formalizada na seguinte prova do teorema de Hall.

Terceira demonstrac~ao do Teorema de Hall. Sejam G = (A ∪ B, E) um grafo bipartido tal que

|N(S)| ≥ |S| para todo S ⊆ A e M um emparelhamento maximo em G. Suponha que M n~ao cobre

Page 71: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Algoritmo de Edmonds 71

a4

(a)

b3

a4

b2

a1 a3

(c)

a5a4a3a2a1

b2b1 b3 b4 b5

G :

a4

b2

a1

(b)

A e seja u ∈ A n~ao coberto por M.

Denote por C o subconjunto de A ∪ B formado por todos os vertices alcancaveis a partir de u

por caminho M-alternante. Tome S = C ∩A e T = C ∩ B.Certamente, T ⊆ N(S). Agora, se existe x ∈ S com um vizinho fora de T , digamos b ∈ B \ T .

Como b 6∈ T , o vertice b n~ao e coberto porM logo u e b s~ao extremos de um caminhoM-aumentante,

contrariando o fato de M ser maximo, portanto, T = N(S). Como T e S − u s~ao cobertos por M

(justique), temos |T | = |S| − 1, logo |N(S)| = |S| − 1 < |S| o que contraria a hipotese sobre G, logo

M cobre A.

N~ao e difcil extrair um algoritmo dessa demonstrac~ao, esse algoritmo pode ser escrito da seguinte

maneira.

Algoritmo 20: Edmonds(A,B, E)

Dado : um grafo bipartido G = (A ∪ B, E).Devolve: emparelhamento que cobre A ou um obstaculo de Hall S ⊆ A.

comece com M vazio;1

se existe u ∈ A n~ao coberto por M entao2

(S, T)← (u,∅

);3

senao devolva(M);4

se N(S) = T entao devolva(S);5

senao escolha b ∈ N(S) \ T ;6

se existe a ∈ V \ S tal que a, b ∈M entao7

insira a em S;8

insira b em T ;9

volte para 5;10

senao11

seja P o caminho M-aumentante de u ate b;12

atribua a M o emparelhamento M4E(P);13

volte para 2.14

Analise e correcao do algoritmo de Edmonds. A correc~ao do algoritmo segue facilmente da

terceira prova do teorema de Hall. O tempo para a busca de um caminhoM-aumentante eO(|V |+|E|)

(uma busca) no pior caso. Fazendo uma busca pra cada vertice resulta em O(|V |(|V |+ |E|)).

Exercıcios

Exerccio 171. Refaca os exerccios 2 e 23.

Exerccio 172. Uma escola secundaria abriu vagas para contratac~ao de 6 docentes para as seguintes

areas: Matematica, Qumica, Fsica, Biologia, Psicologia e Ecologia. Para que um(a) candidato(a)

se inscreva ele(a) deve informar a area em que se graduou e as areas correlatas em que se sente a

vontade para lecionar. A escola recebeu seis inscric~oes para estas posic~oes, da seguinte maneira:

Page 72: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

72 Emparelhamentos

Candidato Areas

Matem. Qumica Fsica Biol. Psicol. Ecol.

Antonio × ×Bernardo × × × ×Cassia × × ×Debora × × × ×Evandro × ×Fernanda × ×

Modique o algoritmo acima para que determine o maior numero de professores que a escola

pode contratar.

Exerccio 173. Modique o algoritmo Edmonds(A,B, E) para que ele devolva um emparelhamento

maximo.

Exerccio 174. Faca uma analise detalhada da complexidade do algoritmo de Edmonds.

Exerccio 175. Como foi dito na observac~ao 2, pagina 12, determinar α(G) e um problema NP-

difcil. Suponha que exista um algoritmo que computa ν(G) em tempo polinomial para qualquer

grafo G. Mostre como computar α(G) em tempo polinomial.

Exerccio 176. Escreva um algoritmo polinomial para computar α(G) quando G e bipartido.

Exerccio 177. Escreva um algoritmo que, dado G, determine um emparelhamento maximal em

G, isto e, emparelhamentoM tal que n~ao exista um emparelhamentoM ′ tal queM 6⊂M ′. Use essealgoritmo para determinar uma cobertura S tal que |S| ≤ 2ν(G).Exerccio 178. Seja G = (V, E, ρ) um grafo com pesos n~ao negativos nas arestas. O peso de um

emparelhamento M em G e

p(M) =∑e∈M

ρ(e).

Dena

νρ(G) = maxp(M) : M e emparelhamento em G

o peso de um emparelhamento de peso maximo em G. Usando a ideia do Kruskal, escrevemos o

seguinte algoritmo

Algoritmo 21: Emparelhamento quase maximo(G)

Dado : um grafo G com pesos n~ao-negativos nas arestas.

Devolve: um emparelhamento em G.

M← ∅;1

F← la das arestas em ordem n~ao-crescente de peso;2

para cada e ∈ F faca3

se M ∪ e e um emparelhamento em G entao insira e em M;4

devolva M.5

Prove que a resposta do algoritmo satisfaz p(M) ≥ νρ(G)/2.

Page 73: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO 6

GRAFOS DIRIGIDOS

Neste captulo trabalharemos com grafos dirigidos. Em alguns situac~oes, como calcular distancia,

o caso dirigido e uma simples generalizac~ao do caso n~ao-dirigido, em outras situac~oes, como conexi-

dade, o problema e outro. Formalmente, um grafo dirigido e um par (V, E) onde V e um conjunto

nito (vertices) e E ⊂ V × V com a restric~ao de (v, v) 6∈ E para todo v ∈ V.Dizemos que a aresta (v, u) ∈ E sai de v e chega em u. Tambem, denimos os seguintes

conjuntos para cada v ∈ V

E−(v) = (v, u) ∈ V × V : (v, u) ∈ E e N−(v) = u ∈ V : (v, u) ∈ E; (6.1)

E+(v) = (u, v) ∈ V × V : (u, v) ∈ E e N+(v) = u ∈ V : (u, v) ∈ E. (6.2)

Denimos o grau de saıda de v ∈ V e o grau de entrada de v ∈ V, respectivamente, por

d−(v) = |N−(v)| e d+(v) = |N+(v)|. (6.3)

O grafo subjacente ao grafo dirigido G e o grafo

SG =(V(G),

⋃u, v : (u, v) ∈ E

)Neste captulo expomos alguns topicos em grafos dirigidos, para mais sobre o assunto veja [1].

6.1 Representacao computacional e Percurso

Como zemos antes, no caso n~ao dirigido (sec~ao 1.5.1), assumiremos que nos problemas com-

putacionais os vertices de G s~ao 1, 2, . . . , |V(G)| (caso contrario construmos um isomorsmo) e

uma lista de adjacencias dirigida e um vetor N[ ] de listas ligadas, a lista N[i] contem os vizinhos

N−(i) do vertice i e cada no dessa lista e composto por uma variavel que armazena um vertice e

um ponteiro que aponta para o proximo no da lista. No caso de matriz, a matriz de adjacencias e

dada por ai,j = 1 se e so se (i, j) e aresta.

6

1

4

5

2

3

G:

N:

5 5

1 2 3 4 5 6

2 3 5 2 3

3

4

3

1

Figura 6.1: Diagrama de um grafo dirigido e uma representac~ao por lista de adjacencias.

Uma busca em profundidade rotulada, algoritmo 5 na pagina 27, num grafo dirigido resulta numa

classicac~ao das arestas em quatro tipos, ao inves dos dois tipos que ocorrem no caso n~ao-dirigido.

Usaremos a terminologia da sec~ao 3.1.1, se existe algum inteiro t ∈ N tal que pai(t)[v] = u ent~ao

dizemos que u e ancestral de v ou que v e descendente de u. No caso particular de pai[u] = v

dizemos que u e filho de v.

Apos uma busca em profundidade rotulada as arestas s~ao classicadas em

Page 74: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

74 Grafos Dirigidos

1. aresta pailho s~ao as arestas da forma (v, pai[v]);

2. aresta de retorno ascendente s~ao as arestas (u, v) tais que v e um ancestral de u (veja a

sec~ao 3.1.1), nesse caso [chega[u], sai[u]] ⊂ [chega[v], sai[v]];

3. aresta de retorno descendente s~ao as arestas (u, v) tais que v e um descendente de u com

pai[v] 6= u, nesse caso [chega[v], sai[v]] ⊂ [chega[u], sai[u]]; e

4. aresta transversal s~ao as outras arestas, da forma (u, v) tais que chega[v] < sai[v] <

chega[u] < sai[u].

Exemplo 32. A gura abaixo esquematiza uma busca em profundidade rotulada no grafo dirigido

do exemplo 6.1,

Legenda nas arestas:

pailho

retorno ascendente

retorno descendente

transveral

1

5

3

2 4

6

Figura 6.2: Busca em profundidade rotulada.

Um caminho orientado e uma sequencia de vertices distintos P = x1, x2, . . . , xk tal que

(xi, xi+1) ∈ E(P) para todo i ∈ 1, 2, . . . , k − 1. Nesse caso, dizemos que P e um caminho ori-

entado de x1 para xk e usamos a notac~ao (x1 → xk)-caminho. Um circuito orientado e uma

x1 x2 x3

Figura 6.3: Representac~ao de um caminho orientado com 3 vertices.

sequencia de vertices distintos, a menos do primeiro e do ultimo, C = x1, x2, . . . , xk, x1 tal que

(xi, xi+1) ∈ E(C) para todo i ∈ 1, 2, . . . , k− 1, e (xk, x1) ∈ E(C)

x1 x2 x3 x4 x5

Figura 6.4: Diagrama de um circuito orientado com 5 vertices.

Exercıcios

Exerccio 179 (Fecho transitivo). Se D = (V, E) e um grafo dirigido ent~ao o fecho transitivo de

D e o grafo D∗ = (V, E∗) onde

E∗ = (i, j) ∈ V × V : existe um (i→ j)-caminho em D.

Escreva um algoritmo de tempo O(|V |3) para determinar o fecho transitivo de um grafo dirigido.

Exerccio 180 (Ordenacao topologica). Dado um grafo orientado G que n~ao contem circuito

orientado, determinar uma ordenac~ao v1 ≺ v2 ≺ · · · ≺ vn de V(G), onde u ≺ v se (u, v) ∈ E(G).Essa ordenac~ao e chamada de ordenac~ao topologica dos vertices de G.

Page 75: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos dirigidos com pesos nas arestas 75

1 4 3 7 8 5 2 6

1 2

3 4 5

7 8

6

Figura 6.5: Um grafo orientado e uma ordenac~ao topologica de seus vertices: 1 ≺ 4 ≺ 3 ≺ 7 ≺ 8 ≺5 ≺ 2 ≺ 6.

(a) Prove que G admite uma ordenac~ao topologica se e somente se G n~ao contem circuito

orientado.

(b)Prove que G n~ao tem circuito orientado se e somente se em qualquer busca em profun-

didade n~ao ocorre aresta de retorno ascendente.

(c) Escreva um algoritmo de tempo O(|V |+ |E|) para determinar uma ordenac~ao topologica

de um grafo orientado sem circuito orientado.

(d) Prove que o algoritmo esta correto.

6.2 Caminhos mınimos em grafos dirigidos com pesos nasarestas

Alem da orientac~ao nas arestas, os grafos desta sec~ao tem peso nas arestas, ou seja, esses grafos

s~ao denidos por uma tripla (V, E, ρ) com ρ : E → R. O comprimento de um caminho orientado

P = x1, x2, . . . , xk e denido, naturalmente, como a soma dos pesos (comprimentos) das arestas

nesse caminho

c(P) =

k−1∑i=1

ρ(xi, xi+1),

e a distancia entre dois vertices e o comprimento do menor caminho orientado que os liga,

dist(u, v) = minc(P) : P e um (u→ v)-caminho

quando existe algum caminho, caso contrario convencionamos que dist(u, v) = ∞. Um (u →v)-caminho de comprimento dist(u, v) e chamado de caminho mınimo.

Exemplo 33. O seguinte diagrama representa um grafo dirigido com pesos nas arestas

4

3

1

4

3

2

10

3

1

a

b

c

d

e

f

Figura 6.6: Diagrama de um grafo dirigido com peso nas arestas. Note que dist(c, e) 6= dist(e, c),

dist(a, f) = 10.

Observac~ao 14. Num grafo dirigido G podemos ter

dist(u, v) 6= dist(v, u)

Page 76: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

76 Grafos Dirigidos

e vale a seguinte forma da desigualdade triangular, para todo (v, u) ∈ E(G)

dist(s, u) ≤ dist(s, v) + ρ(v, u) (6.4)

onde, como anteriormente, x ≤∞ e x+∞ =∞ para qualquer x ∈ R ∪ ∞.

N~ao e difcil provar que o algoritmo de Dijkstra, pagina 35, resolve o seguinte problema computa-

cional: dado G dirigido e com pesos positivos nas arestas representado por uma lista de adjacencias

como foi denida na sec~ao 6.1 acima e dado s ∈ V(G), determinar dist(s, v) para todo v ∈ V(G).No que segue veremos um algoritmo que funciona no caso em que podem haver arestas com peso

negativo (veja exerccio 91), desde que o grafo n~ao contenha um circuito orientado onde a soma dos

pesos nas arestas seja negativa.

6.2.1 Algoritmo de Bellman–Ford

Seja G um grafo dirigido com pesos nas arestas que podem ser negativos. Um circuito cir-

cuito negativo C em G e um circuito orientado onde a soma dos pesos das arestas e negativo.

Notemos que num circuito negativo podemos car dando voltas e a cada volta os comprimentos

diminuem, assim uma tentativa ingenua de projetar um algoritmo para computar distancias em G

poderia facilmente entrar em um laco para sempre.

O algoritmo de BellmanFord recebe um grafo dirigido com pesos G = (V, E, ρ), onde ρ pode

assumir valores negativos e um vertice s, devolve um valor booleano indicando a n~ao-existencia em

G de um circuito negativo e um (s→ v)-caminho para algum v ∈ V(C). No caso do valor devolvidoser verdadeiro, o algoritmo computou corretamente as distancias dist(s, v) para todo v ∈ V.

A ideia do algoritmo e a seguinte. Seja v um vertice de G e

P = s, v1, . . . , vk−1, v

um (s → v)-caminho mnimo com k arestas. Claramente, temos k ≤ |V | − 1. A ideia principal e

repetir |V |− 1 vezes a vers~ao dirigida do algoritmo Relaxac~ao(u,w), pagina 35, para cada aresta

para cada (u,w) ∈ E(G) faca Relaxac~ao(u,w).

onde

Algoritmo 22: Relaxac~ao(u,w)

se d[w] > d[u] + ρ(u,w) entao d[w]← d[u] + ρ(u,w).1

assim, na primeira rodada de relaxac~oes em E(G) temos que distG(s, v1) esta determinado; na

segunda, distG(s, v2) esta determinado (veja o lema 14, que tambem vale no caso dirigido). Na

k-esima rodada distG(s, v) esta determinado (veja exerccio 183 a seguir). Como qualquer caminho

tem no maximo |V |− 1 arestas, no nal das repetic~oes as distancias estar~ao determinadas.

Para detectar um circuito negativo basta testar se ha alguma aresta (u,w) ∈ E(G) tal que

d[w] > d[u] + ρ(u,w) depois das |V |− 1 repetic~oes do trecho de algoritmo dado acima.

Algoritmo 23: BellmanFord(G, s)

Dado : um grafo G com pesos ρ nas arestas e um vertice s ∈ V(G).Devolve: verdadeiro no caso em que distG(s, v), para todo v ∈ V(G), foi corretamente

calculado, e falso caso G tenha um circuito negativo alcancavel a partir de s.

para cada v ∈ V faca d[v]←∞;1

d[s]← 0;2

cont← 1;3

enquanto cont ≤ |V |− 1 faca4

para cada (u,w) ∈ E(G) faca Relaxac~ao(u,w);5

cont← cont+ 1;6

para cada (u,w) ∈ E(G) faca7

se d[w] > d[u] + ρ(u,w) entao devolva(falso);8

devolva(verdadeiro).9

Page 77: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Caminhos mnimos em grafos dirigidos com pesos nas arestas 77

Analise e correcao do algoritmo de Bellman–Ford. O resultado a seguir prova que o al-

goritmo devolve corretamente o valor booleano prometido: verdadeiro se n~ao ha circuito negativo

alcancavel por s e falso caso contrario, indicando que os valores d[v] calculados n~ao valem. A prova

de que o algoritmo computa corretamente as distancias e deixada para o leitor no exerccio 183.

Lema 43. BellmanFord(G) devolve verdadeiro se G n~ao contem circuito negativo e devolve

falso caso contrario.

Demonstrac~ao. Seja C = v0, v1, . . . , vk, v0 um circuito de peso negativo, isto e,

ρ(vk, v0) +

k∑i=1

ρ(vi−1, vi) < 0,

e tal que existe (s → v0)-caminho dirigido em G. Suponha que o algoritmo devolve verdadeiro.

Ent~ao d[vi] ≤ d[vi−1] + ρ(vi−1, vi) para todo i ∈ 1, 2, . . . , k e somando para toda aresta de C

k∑i=1

d[vi] ≤k∑i=1

(d[vi−1] + ρ(vi−1, vi)

)=⇒

k∑i=1

d[vi] −

k∑i=1

d[vi−1] ≤k∑i=1

ρ(vi−1, vi) =⇒k∑i=1

ρ(vi−1, vi) ≥ d[vk] − d[v0] ≥ 0

contradizendo o fato de C ter peso negativo.

Quando n~ao ha circuito negativo, apos o termino, para cada (u,w) ∈ E temos

d[w] = distG(s,w) ≤ distG(s, u) + ρ(u,w) = d[u] + ρ(u,w),

portanto o algoritmo devolve verdadeiro.

Para a complexidade, notemos que o tempo dos lacos aninhados nas linhas 4 e 5 predomina e

resulta em O(|V ||E|).

Exercıcios

Exerccio 181. Suponha que v1, v2, . . . , vk e um caminho orientado de comprimento mnimo de v1para vk num grafo dirigido G com pesos nas arestas. Prove que vi, . . . , vj e um caminho mnimo de

vi para vj em G para quaisquer i, j com 1 ≤ i < j ≤ k.Exerccio 182. Prove a desigualdade (6.4).

Exerccio 183 (Correc~ao do algoritmo de BellmanFord). Seja G um grafo dirigido com pesos nas

arestas. Suponha as inicializac~oes das tres primeiras linhas do algoritmo de BellmanFord. Prove

que independente do numero de vezes que a Relaxac~ao foi executado, sempre valem:

(b) d[v] ≥ distG(s, v) para todo v ∈ V(G), e uma vez que vale a igualdade o valor de d[v]

n~ao muda apos qualquer execuc~ao de Relaxac~ao;

(c) se distG(s, v) =∞ ent~ao d[v] =∞;

(d) se s, . . . , u,w e um (s→ w)-caminho mnimo e d[u] = distG(s, u) ent~ao Relaxac~ao(u,w)

resulta em d[w] = distG(s,w);

(e) seja s = v0, v1, v2, . . . , vk−1, vk = w um caminho mnimo. Se ocorrem as relaxac~oes

em (v0, v1), (v1, v2),. . . , (vk−1, vk), nessa ordem e com possveis outras relaxac~oes inter-

mediarias, ent~ao teremos no nal da sequencia d[w] = distG(s,w).

Page 78: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

78 Grafos Dirigidos

Exerccio 184. Modique o algoritmo de BellmanFord para que resulte d[v] = −∞ para todo

vertice v tal que o (s→ v)-caminho mnimo encontra um circuito negativo.

Exerccio 185. Suponha que existe um algoritmo A(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 A(G,u, v) para todo (v, u) ∈ E(G).)Observamos que o problema de determinar se um grafo e hamiltoniano e NP-completo, portanto

a existencia de uma algoritmo A como acima estabelece que P=NP.

6.3 Componentes fortemente conexos

Um componente fortemente conexo W num grafo dirigido G e um subconjunto de vertices

maximal com respeito a seguinte propriedade: para quaisquer u, v ∈ W existem um (u → v)-

caminho orientado e um (v→ u)-caminho orientado, ambos contidos em G[W].

Exemplo 34. O diagrama abaixo mostra um grafo dirigido, cada um dos quatro crculos identica

um componente fortemente conexo do grafo.

1

3

5

12

14

13

7

10

9

8 6

2

4

11

Dado um grafo dirigido G, queremos computar os componentes fortemente conexos de G. Pra

isso, denimos os seguintes dois grafos construdos a partir do grafo dirigido G

grafo transposto: denotado por GT e o grafo dirigido obtido invertendo-se o sentido das arestas

em E(G): GT =(V(G), (u, v) ∈ V × V : (v, u) ∈ E(G)

).

grafo das componentes: denotado por G∗ e o grafo orientado com um vertice para cada com-

ponente fortemente conexo de G e (c1, c2) e uma aresta em G∗ se, e somente se, existe uma

aresta que sai de um vertice de c1 e chega num vertice de c2 (veja gura 6.7(a) abaixo).

Observac~ao 15. Os grafos G e GT tem os mesmos componentes fortemente conexos. De fato, se u

e v est~ao no mesmo componente W de G ent~ao o (u→ v)-caminho em G com todos os vertices em

W e um (v→ u)-caminho em GT com todos os vertices em W e, analogamente, o (v→ u)-caminho

em G e um (v→ u)-caminho em GT, portanto, u e v est~ao no componente W de GT.

Observac~ao 16. O grafo G∗ dos componentes fortemente conexos de G n~ao contem circuito orien-

tado. De fato, dados v, v ′ ∈ ci e u, u ′ ∈ cj, para i 6= j, se existe (u → v)-caminho em G ent~ao n~ao

pode existir (v ′ → u ′)-caminho em G, caso contrario esses vertices estariam no mesmo componente

fortemente conexo. Com isso, temos que G∗ admite ordenac~ao topologica.

Exemplo 35. Na gura abaixo mostramos (a) o grafo dos componentes fortemente conexos do grafo

dirigido mostrado no exemplo 34 e tambem (b) uma ordenac~ao topologica dos vertices do grafo das

componentes.

Page 79: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Componentes fortemente conexos 79

(a) (b)

4

11

1

741117

Figura 6.7: (a) Grafo dos componentes fortemente conexos do grafo do exemplo 34, 1 = 1, 2, 3, 4 =

4, 5, 6, 7 = 7, 8, 9, 10 e 11 = 11, 12, 13, 14. (b) Ordenac~ao topologica do grafo das componentes.

Agora, vamos descrever um algoritmo que, dado um grafo dirigido G, determina os componentes

fortemente conexos de G. Em linhas gerais, a estrategia para computar os componentes fortemente

conexos de um grafo dirigido G e

Algoritmo 24: CFC(G)

BP(G): busca em profundidade rotulada em G para determinar sai[v] para todo v ∈ V(G);1

Compute GT;2

BP(GT): busca em profundidade em GT com o laco principal modicado para escolher os3

vertices em ordem decrescente dos valores de sai[ ] computado no passo 1;

Devolva cada arvore da segunda busca como um componente fortemente conexo de G.4

No que segue sempre que nos referirmos aos valores de chega[ ] e sai[ ] trata-se do conteudo

desses vetores apos a primeira busca em profundidade. Os seguintes resultados ajudam a entender

o funcionamento do algoritmo. As demonstrac~oes ser~ao deixadas como exerccio.

Lema 44. Sejam W e W ′ dois componentes fortemente conexos de G. Suponha que existe

uma aresta (u, v) ∈ E(G) tal que u ∈W e v ∈W ′. Ent~ao

maxu∈W

sai[u] > maxv∈W ′

sai[v].

Ideia da demonstrac~ao. Se a busca em profundidade rotulada chega no componente W antes de

chegar no componente W ′, ent~ao todos os vertices de W ′ s~ao descendentes do primeiro vertice

visitado em W, o valor de sai[ ] desse vertice e maior que o valor de sai[ ] de todo vertice de W ′.

Se a busca em profundidade chega primeiro num vertice deW ′, ent~ao todos os vertices deW ′ ser~ao

visitados antes de qualquer visita a um vertice de W, portanto os valores de sai[ ] dos vertices em

W s~ao maiores que os valores de sai[ ] dos vertices de W ′.

Corolario 45. Sejam W e W ′ dois componentes fortemente conexos de G. Suponha que existe

uma aresta (u, v) ∈ E(GT) tal que u ∈W e v ∈W ′. Ent~ao

maxu∈W

sai[u] < maxv∈W ′

sai[v].

Demonstrac~ao. Imediato da denic~ao de GT e do resultado acima pois G e GT tem os mesmos

componentes conexos.

A busca em profundidade do passo 3 comeca no componente fortemente conexo W que tem o

vertice k ∈ V(G) com maxv sai[v]. Essa busca visita todos os vertices de W. Pelo corolario 45

somente esses vertices ser~ao visitados, pois n~ao ha arestas de W para W ′ com maxv∈W ′ sai[v] <

maxv∈W sai[v], para qualquer outro componente fortemente conexo W ′ em G. Na segunda rodada

do laco interno da busca em profundidade, o vertice u e tal que sai[u] = maxsai[v] : v ∈ V(G)−W

e, novamente pelo corolario 45, os vertices das componentes W ′′ tais que maxv∈W ′′ sai[v] < sai[u]

n~ao s~ao visitados; os unicos vertices fora do componente fortemente conexo de u que poderiam ser

visitados s~ao os da componente W, mas que ja est~ao visitados ; e assim por diante.

Page 80: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

80 Grafos Dirigidos

Analise e correcao do algoritmo CFC. Para facilitar a prova de que o algoritmo funciona

corretamente vamos, primeiro, dar uma vers~ao mais detalhada do algoritmo.

O algoritmo CFC(G) descrito a seguir faz uma busca em profundidade em G e depois uma busca

em profundidade em GT onde os vertices s~ao visitados respeitando a ordenac~ao descrita acima.

Em seguida mostramos que o algoritmo CFC( ) funciona corretamente. Lembramos que sai[ ]

refere-se aos valores computados na primeira chamada da busca em profundidade.

O seguinte algoritmo usa o vetor cfc[ ] para identicar, no nal da execuc~ao, os componentes

fortemente conexos de G.

A busca em profundidade utilizada ca da seguinte forma

Algoritmo 25: BP(G, v, cc)

Dado : um grafo dirigido G.

Devolve: busca em profundidade rotulada modicada.

cfc[v]← cc;1

chega[v]← cont;2

cont← cont+ 1;3

para cada u ∈ N−(v) faca4

se chega[u] = 0 entao BP(G,u, cc);5

sai[v]← cont;6

cont← cont+ 1.7

onde o parametro cc rotula os vertices de acordo com o componente fortemente conexo ao qual ele

pertence, e o algoritmo CFC ca

Algoritmo 26: CFC(G)

Dado : um grafo dirigido G.

Devolve: componentes fortemente conexos.

/* Busca em profundidade rotulada em G para computar sai[ ] */

para cada k ∈ V(G) faca1

sai[k]← 0;2

chega[k]← 0;3

para cada k ∈ V(G) faca4

se chega[k] = 0 entao BP(G, k, 0);5

/* Ordene os vertices por ordem decrescente de sai[ ] */

L← lista ordenada de V(G) por ordem decrescente de sai[ ];6

/* Determine o grafo transposto */

compute GT;7

/* Busca em profundidade em GT para determinar os componentes */

/* Os vertices n~ao-visitados s~ao escolhidos de acordo com a ordem em L */

cont← 0;8

c← 0;9

para cada k ∈ V(G) faca10

sai[k]← 0;11

chega[k]← 0;12

para cada k ∈ L faca13

se chega[k] = 0 entao14

c← c+ 1;15

BP(GT, k, c);16

Agora, damos uma prova de que o algoritmo CFC esta correto.

Teorema 46. O algoritmo CFC(G) computa corretamente os componentes fortemente conexos

do grafo dirigido G.

Demonstrac~ao. Vamos provar que, para todo n ∈ N, apos a n-esima rodada do laco na linha 13

Page 81: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Componentes fortemente conexos 81

que: Se C = m ent~ao Wi = v : cfc[v] = i para i ∈ 1, 2, . . . ,m s~ao m componentes conexos de

G.

Para n = 0, antes da primeira rodada, a armac~ao acima vale pois cfc[v] = 0 para todo v ∈ V(G).Suponha que apos a n-esima rodada do laco na linha 13 temos c = m e Wi = v : cfc[v] = i para

i ∈ 1, 2, . . . ,m s~ao m componentes fortemente conexos de G. Consideremos a rodada n + 1. Se

o teste na linha 14 e falso ent~ao c = m e apos a rodada n + 1 temos os mesmos m componentes

fortemente conexos de G. Vamos supor que o teste foi positivo, dessa forma c = m+ 1 e temos que

provar que Wi = v : cfc[v] = i, 1 ≤ i ≤ m+ 1, s~ao m+ 1 componentes fortemente conexos de G.

Apos a atribuic~ao c = m + 1 na linha 15, temos uma chamada da busca em profundidade

BP(GT, k,m+ 1), que faz cfc[k] = m+ 1 e os vertices n~ao-visitados, alcancaveis a partir de k, ser~ao

descendentes de k no nal da busca e ter~ao cfc[ ] = m+ 1 na medida em que forem visitados. Seja

Wm+1 o componente fortemente conexo que contem k; como k ∈ L vale que

sai[k] = maxv∈Wm+1

sai[v] > maxu∈V\

⋃m+1i=1

Wi

sai[u], (6.5)

portanto, pelo corolario 45, n~ao ha aresta (u, v) ∈Wm+1×(V \⋃m+1i=1 Wi

)em GT. Como os vertices

de⋃mi=1Wi ja foram visitados (o teste da linha 14 falha) os valores de cfc[ ] desses vertices n~ao

s~ao alterados por BP(GT, k,m+ 1). Assim, nenhum vertice fora de Wm+1 sera descendente de k no

nal de BP(GT, k,m+ 1).

Observemos que se G e dado pela sua matriz de adjacencias A, ent~ao a matriz transposta AT

representa o grafo transposto GT, dessa forma obtemos uma representac~ao implcita de GT em tempo

constante no sentido de que AT(i, j) = A(j, i). Se G e dado por uma lista de adjacencias ent~ao a

lista de adjacencias de GT pode ser computada em tempo O(|V |+ |E|) (verique).

A linha 2 tem custo O(|V |), o laco na linha 4 tem custo total O(|V | + |E|), a ordenac~ao custa

O(|V | log |V |), o grafo GT pode ser computado em tempo O(|V | + |E|), a linha 8 tem custo O(1), a

10 O(|V |) e o laco na linha 13 tem custo O(|V |+ |E|).

Teorema 47. CFC(G) tem complexidade O(|V | log |V |+ |E|).

Exercıcios

Exerccio 186. Demonstre o lema 44.

Exerccio 187. Mostre que o algoritmo 24 pode ser implementado com complexidade O(|V |+ |E|).

Exerccio 188. Se ao inves de usarmos uma busca em profundidade em GT por ordem decrescente de

sai[ ] no algoritmo 26 usarmos uma busca em profundidade em G por ordem crescente de chega[ ]

o algoritmo determinaria os componentes fortemente conexos do grafo?

Exerccio 189. Se ao inves de usarmos uma busca em profundidade em GT por ordem decrescente

de sai[ ] no algoritmo 26 usarmos uma busca em profundidade em G por ordem crescente de sai[ ]

o algoritmo determinaria os componentes fortemente conexos do grafo?

Exerccio 190. Seja G um grafo dirigido e u e w vertices de G.

(a) Escrevemos u w se existe (u → w)-caminho em G. Prove que e uma relac~ao

simetrica e transitiva em V(G).

(b) Escrevemos u! w se existem (u → w)- e (w → u)-caminhos em G. Prove que! e

uma relac~ao de equivalencia em V(G). Nesse caso, quem s~ao as classes de equivalencia?

Exerccio 191. Escreva um algoritmo para determinar se um grafo dirigido G e semiconexo: para

u, v ∈ V(G) ou u v ou v u. Determine a complexidade do algoritmo.

Exerccio 192. Escreva um algoritmo de complexidade O(|V | + |E|) para computar o grafo G∗ dos

componentes fortemente conexos de G.

Exerccio 193. Escreva um algoritmo de complexidade O(|V |+ |E|) para determinar o grafo trans-

posto de um grafo dado por uma lista de adjacencias.

Page 82: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

82 Grafos Dirigidos

6.4 Fluxo em redes

Vamos chamar de rede uma quadrupla N = (G, c, s, t) onde G = (V, E) e um grafo dirigido, c e

uma func~ao c : E→ R+ que atribui uma capacidade c(e), para cada aresta e s e t s~ao vertice de G

tais que d+(s) = d−(t) = 0. Um s-t fluxo, ou simplesmente uxo, em N e uma func~ao f : E → Rtal que

1. para cada e ∈ E vale 0 ≤ f(e) ≤ c(e);

2. para cada v ∈ V \ s, t temos∑e∈E−(v) f(e) =

∑e∈E+(v) f(e).

A primeira restric~ao diz que o uxo por uma aresta n~ao pode exceder a capacidade dessa aresta,

a segunda diz que em qualquer vertice diferente de s e de t o uxo que \sai" e igual a uxo que

\entra" no vertice. Com isso, e facil intuir que o uxo que \sai" de s e igual ao que \entra" em t.

Proposicao 48. Se N e uma rede e f um uxo, ent~ao∑e∈E−(s)

f(e) =∑

e∈E+(t)

f(e). (6.6)

Demonstrac~ao. Notemos que∑e∈E(G)

f(e) =∑

e∈E−(s)

f(e) +∑v 6=s,t

∑e∈E−(v)

f(e)

e que ∑e∈E(G)

f(e) =∑

e∈E+(t)

f(e) +∑v 6=s,t

∑e∈E+(v)

f(e),

portanto ∑e∈E−(s)

f(e) =∑

e∈E+(t)

f(e).

A quantidade na equac~ao (6.6) e o valor do fluxo e e denotada por val(f)

val(f) =∑

e∈E−(s)

f(e). (6.7)

O problema que estamos interessados aqui e formulado da seguinte maneira: Dado uma rede

N = (G, c, s, t), determinar um s-t uxo f de valor maximo, isto e, tal que val(f) ≥ val(g) para todo

uxo g na rede N.

Como seria esperado, uxo e corte em redes s~ao conceitos estreitamente relacionados; em um

grafo dirigido G um corte separa os vertices s e t, ou simplesmente s-t corte, e um conjunto

de arestas

E(S, S) =(u, v) ∈ E(G) : u ∈ S e v ∈ S

tal que s ∈ S e t ∈ S

e a capacidade do corte e

c(S) = C(S, S) =∑

e∈E(S,S)

c(e); (6.8)

e o fluxo no corte e

f(S) = f(S, S) =∑

e∈E(S,S)

f(e) −∑

e∈E(S,S)

f(e). (6.9)

Segue imediatamente da denic~ao de uxo que f(S) ≤ c(S) para todo s-t corte S e, mais que isso,

vale a desigualdade val(f) ≤ c(S). De fato,

val(f) =∑v∈S

∑e∈E−(v)

f(e) −∑

e∈E+(v)

f(e)

Page 83: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Fluxo em redes 83

mas cada aresta e = (x, y) ∈ S× S contribui duas vezes na soma, quando v = x contribui com f(e)

e quando v = y contribui com −f(e), logo essas contribuic~oes se cancelam e camos com

val(f) =∑v∈S

∑e∈E−(v)∩S×S

f(e) −∑

e∈E+(v)∩S×S

f(e)

= f(S). (6.10)

Proposicao 49. Para todo s-t uxo f e todo s-t corte S vale val(f) ≤ c(S), em particular

maxval(f) : f e um s-t uxo

≤ min

c(S) : S e um s-t corte

. (6.11)

Demonstrac~ao. Para todo s-t corte S, temos por (6.10) val(f) = f(S) e pela denic~ao de uxo (item

1) o uxo em cada aresta e limitado pela capacidade da aresta, logo f(S) ≤ c(S), donde segue a

desigualdade.

Um s-t corte mınimo e um s-t corte S de capacidade c(S) ≤ c(S ′) para todo s-t corte S ′ (ladodireito de (6.11)).

Corolario 50. Para todo s-t uxo f e todo s-t corte S, se val(f) = c(S) ent~ao f e um uxo

maximo e S um corte mnimo.

Demonstrac~ao. Sejam f∗ um s-t uxo maximo e S∗ um s-t corte mnimo. Ent~ao

val(f) ≤ val(f∗) ≤ c(S∗) ≤ c(S).

De val(f) = c(S) vale a igualdade nas equac~oes acima.

O principal resultado desta sec~ao e que a capacidade de um corte mnimo e um limitante inferior

para o uxo maximo.

Sejam N = (G, c, s, t) uma rede, P ⊂ SG um caminho com extremos s e t no grafo subjacente

ao grafo dirigido G e f um s-t uxo na rede N. Digamos que P = x0, x1, . . . , xm−1, xm com x0 = s

e xm = t. Dizemos que P e f-aumentante se para cada xi, xi+1 ∈ E(P) temos

1. e = (xi, xi+1) ∈ E(G) e f(e) < c(e), nesse caso dizemos que e e uma aresta direta de P, ou

2. e = (xi+1, xi) ∈ E(G) e f(e) > 0, nesse caso dizemos que e e uma aresta reversa de P.

Se P e f-aumentante e denimos

ε1 = minc(e) − f(e) : e e uma aresta direta de P (6.12)

ε2 = minf(e) : e e uma aresta reversa de P (6.13)

δ = minε1, ε2. (6.14)

e denimos g : E→ R por

g(e) =

f(e) + δ se e e direta

f(e) − δ se e e reversa

f(e) caso contrario,

(6.15)

ent~ao g e um uxo (verique) com val(g) = val(f)+δ, δ > 0, portanto f n~ao e maximo. A recproca

desse resultado, ou seja, se n~ao existe caminho f-aumentante ent~ao f e maximo, tambem vale. Antes

de demonstrarmos esse resultado, vejamos um exemplo para ilustrar o papel das arestas reversas

num caminho aumentante; nos caminhos com somente arestas diretas a ideia e clara pois podemos

aumentar o uxo em cada uma das arestas no caminho do mesmo montante que ainda temos um

uxo.

Exemplo 36. Consideremos a rede representada no diagrama da gura 6.8 abaixo onde os numeros

denem as capacidades das arestas.

O unico caminho aumentante nessa rede e o caminho s, b, c, a, t e (c, a) e uma aresta reversa.

A aresta (a, c) pode transferir duas unidades de uxo para (b, c) e podemos aumentar o valor do

uxo. O uxo obtido atraves desse caminho esta representado na gura 6.9 abaixo.

Page 84: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

84 Grafos Dirigidos

a

t

cb

s4/2

4/4

1/1 3/34/4

5/2

3/1

Figura 6.8: Uma rede. Os numeros representam as capacidades e os uxos nas arestas na foma c/f.

a

t

cb

s

4/4

1/14/44/4

3/3

3/1

5/4

Figura 6.9: Uma rede. O uxo agora tem maior valor com respeito ao uxo anterior.

Teorema 51 (Ford e Fulkerson, 1956). Um s-t uxo f numa rede N = (G, c, s, t) e maximo se

e somente se n~ao ha caminho f-aumentante em N.

Demonstrac~ao. Ja vericamos acima que se existe caminho f-aumentante ent~ao f n~ao e maximo.

Agora, suponhamos que n~ao exista caminho f-aumentante com extremos s e t.

Denimos S como o conjunto dos vertices v (incluindo s) para os quais ha um caminho de

f-aumentante com extremos s e v.

Cada aresta e do s-t corte E(S, S) deve estar saturada, isto e, f(e) = c(e), caso contrario teramos

um caminho aumentante ate o extremo de e em S, e para cada aresta d ∈ E(S, S) vale f(d) = 0 (pelomesmo motivo da saturac~ao), logo f(S) = c(S) e como val(f) = f(S) (equac~ao (6.10)) pelo corolario

50 f deve ser maximo.

Teorema 52 (Ford e Fulkerson, 1956). Se N = (G, c, s, t) e uma rede onde c(e) ∈ Z para todo

e ∈ E(G), ent~ao existe um uxo maximo f tal que f(e) ∈ Z para todo e ∈ E(G). Ademais

val(f) = c(S) para algum S ⊂ V(G).

Demonstrac~ao. Seja N uma rede e tome f0(e) = 0 para toda aresta e. Se f0 n~ao e maximo ent~ao

existe um caminho f0-aumentante tal que δ em (6.14) e um inteiro maior que 0. Tome f1 = g,

par g denida em (6.15) com f = f0. Claramente, f1 assume valores inteiros. Continuando dessa

maneira teremos uma sequencia de uxos inteiros f0, f1, f2, . . . com valores inteiros e estritamente

crescente. Como o valor e limitado pela capacidade de qualquer corte, essa sequencia e nita,

digamos f0, f1, f2, . . . fn.

Seja S o conjunto dos vertices v (incluindo s) para os quais ha um caminho de fn−1-aumentante

com extremos s e v, como descrito na demonstrac~ao do teorema 51. Dessa forma val(fn) = c(S) e

pelo corolario 50 val(fn) e maximo e c(S) e mnimo.

Se as capacidade s~ao racionais ent~ao podemos recair no teorema acima multiplicando as capaci-

dades pelo seu denominador comum. No caso geral, n~ao demostraremos mas vale o seguinte.

Teorema 53 (Ford e Fulkerson, 1956). O valor maximo de um uxo numa rede N e igual a

capacidade mnima de um corte em N.

Page 85: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Fluxo em redes 85

Esses resultados d~ao origem ao seguinte algoritmo.

Algoritmo 27: FordFulkerson(G, c, s, t)

Dado : uma rede (G, c, s, t).

Devolve: Um uxo de valor maximo.

para cada (u, v) ∈ E(G) faca f(u, v)← 0;1

enquanto existe caminho f-aumentante faca2

escolha um caminho f-aumentante;3

determine δ como em (6.14);4

dena g como em (6.15);5

f← g;6

devolva(f).7

Se as capacidades das arestas s~ao inteiras ent~ao esse algoritmo termina em tempo O(val(f∗)|E|),

onde f∗ denota o uxo maximo e seu valor e um limitante para o numero de iterac~oes do laco. Se

as capacidades n~ao s~ao racionais o algoritmo pode n~ao terminar (veja pagina 21 de [12]) ou ainda

n~ao convergir para a soluc~ao. Note que o algoritmo n~ao e polinomial no tamanho da entrada (veja

a observac~ao 7).

Exemplo 37. Esse e, talvez, o exemplo mais simples da situac~ao em que o algoritmo de Ford

Fulkerson falha, foi descoberto em 1993 por Uri Zwick [29]. Considere a rede representada na gura

abaixo. O uxo maximo nessa rede e 2x+ 1, onde x e um inteiro sucientemente grande. Se o algo-

ts

a

b

c

d

x

x

x

x

x

1

1

ϕx

Figura 6.10: Exemplo de uma rede onde o algoritmo n~ao converge, ϕ =√5−12

.

ritmo escolhe o caminho aumentante s, c, b, t, as capacidades residuais das arestas (a, b), (c, b), (cd)s~ao,

respectivamente, ϕ, 0, 1. Apos 4n + 1 aumentos as capacidades residuais s~ao, respectivamente,

ϕ2n−1, 0, ϕ2n−2 e quando o numero de aumentos cresce o valor do uxo converge para 1+2∑i≥1ϕ

i =

4+√5.

Em 1972, Edmonds e Karp analisaram a seguinte vers~ao para o algoritmo de Ford e Fulkerson.

Seja f um uxo em N = (G, c, s, t) e dena o grafo residual como o grafo dirigido

Rf =(V(G), e ∈ E(G) : cf(e) > 0

),

onde cf(e) = c(e) − f(e). Considere o algoritmo de FordFulkerson com a linha 3 implementada de

modo que o caminho escolhido e o s→ t caminho em Gf com o menor numero de arestas, ou seja

com distSRf(s, t) arestas; isso pode ser feito por uma busca em largura.

Agora, vamos determinar uma cota superior para o numero de aumentos feitos com essa es-

trategia.

Seja (fi)i≥0 ma sequencia de uxos em N = (G, c, s, t) com fi+1 denido a partir de fi atraves

de um caminho fi-aumentante de acordo com (6.15), para todo i ≥ 0.

Page 86: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

86 Grafos Dirigidos

Proposicao 54. Para todo vertice v 6= s, t,

distSGfi+1(s, v) ≥ distSGfi

(s, v)

Demonstrac~ao. Suponha que a armac~ao e falsa e seja k o menor natural para o qual existe um

vertice v tal que distSGfk+1(s, v) < distSGfk

(s, v). Seja P = s, u1, . . . , u`, v o caminho mnimo em

SGfk+1, de modo que

distSGfk+1(s, v) = distSGfk+1

(s, u`) + 1. (6.16)

Pela escolha de v

distSGfk+1(s, u`) ≥ distSGfk

(s, u`), (6.17)

portanto, distSGfk+1(s, v) ≥ distSGfk

(s, u`) + 1.

A demonstrac~ao agora segue em dois casos, dependendo se a aresta u`, v ∈ E(P) e uma aresta

direta ou uma aresta reversa. Vamos supor que e uma aresta direta, o outro caso segue de deduc~ao

analoga.

Primeiro, notemos que se (u`, v) ∈ E(Gfk) ent~ao distSGfk(s, v) ≤ distSGfk

(s, u`) + 1 pela desi-

gualdade triangular; por (6.17) e (6.16) deduzimos que distSGfk(s, v) ≤ distSGfk+1

(s, v), contrari-

ando a hipotese assumida sobre v.

Agora, se (u`, v) ∈ E(Gfk+1) e (u`, v) 6∈ E(Gfk) ent~ao a aresta u`, v ∈ E(P) e uma aresta reversa

no caminho aumentante de Gfk ; como esse caminho e mnimo, distSGfk(s, u`) = distSGfk

(s, v) + 1

e como distSGfk+1(s, v) ≥ distSGfk

(s, u`) + 1, segue que distSGfk+1(s, v) ≥ distSGfk

(s, u`) + 2, uma

contradic~ao.

Teorema 55 (Edmonds e Karp, 1972). Com a estrategia acima, FordFulkerson realiza O(|V ||E|)

aumentos.

Demonstrac~ao. Cada vez que um aumento e feito, pelo menos uma aresta no caminho aumentante

utilizado e crtica, no sentido de que essa aresta limita o aumento no uxo, ou seja, e determinante

de δ em (6.14). Seja (i, j) uma aresta crtica no caminho fk-aumentante. Suponha que a proxima

vez que (i, j) apareca com uma aresta crtica seja no caminho f`-aumentante, para ` > k. Nessa

segunda ocorrencia sera com o sentido oposto ao da primeira ocorrencia.

Suponha que (i, j) e uma aresta direta no caminho fk-aumentante e uma aresta reversa no

caminho f`-aumentante. Assim, distSGfk(s, j) = distSGfk

(s, i)+1 e distSGf`(s, i) = distSGf`

(s, j)+1.

Como distSGfk(s, j) ≤ distSGf`

(s, j) temos que distSGf`(s, i) = distSGf`

(s, j)+1 ≥ distSGfk(s, j)+

1 = distSGfk(s, i) + 2, ou seja, na segunda ocorrencia da aresta como uma aresta crtica o caminho

mnimo e duas arestas mais longo, pelo menos, que na primeira ocorrencia.

Nenhum caminho de aumento tem mais que |V | − 1 arestas, logo nenhuma aresta pode ser

crtica mais que |V |/2 vezes; como s~ao no maximo |E| arestas nos grafos residuais, temos no maximo

O(|V ||E|) aumentos.

Corolario 56. O algoritmo FordFulkerson com a estrategia de escolher o caminho aumentante

com o menor numero de arestas em cada rodada, determina a uxo maximo numa rede em

tempo O(|V ||E|2), onde |V | e o numero de vertices e |E| o numero de arestas na rede.

Demonstrac~ao. O passo 3 feito por uma busca em largura tem complexidade O(|E|), com os

O(|V ||E|) aumentos do teorema acima, resulta O(|V ||E|2).

Exercıcios

Exerccio 194. Prove que para quaisquer S, T ⊂ V(G) vale que f(S) = f(T). Derive desse fato que

se val(f) = c(S) ent~ao f e maximo e S e mnimo.

Exerccio 195. Seja f um uxo que n~ao e maximo numa rede. Seja g a func~ao dada em (6.15).

prove que g e um uxo na mesma rede.

Page 87: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Fluxo em redes 87

Exerccio 196. Use o teorema do uxo maximocorte mnimo para derivar o teorema de Menger:

Seja N = (G, c, s, t) com c constante igual a 1. Ent~ao

o valor de um uxo maximo em N e igual ao numero maximo de (s → t)-caminhos arestas

disjuntos em G.

a capacidade de um corte mnimo e igual ao numero mnimo de arestas cujas remoc~ao destroi

todos os (s→ t)-caminhos de G.

Page 88: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

88 Grafos Dirigidos

Page 89: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

CAPıTULO A

ALGORITMOS E ESTRUTURAS DE DADOS

A.1 Algoritmos

A.1.1 Correcao de algoritmos

Um algoritmo esta correto se a sada esta correta para toda entrada. A prova da correc~ao do

algoritmo tem duas partes: provar que a resposta esta correta se o algoritmo terminar, provar que

o algoritmo termina.

A seguir, p e q denotam proposic~oes logicas. Um algoritmo, ou trecho de algoritmo, S esta

parcialmente correto com respeito a pre-condicao p e a pos-condicao q se sempre que p for

verdadeiro para os valores de entrada de S e S terminar, ent~ao q e verdadeiro para os valores de

sada de S.

Usamos a notac~ao pSq para dizer que S esta parcialmente correto com respeito a pre-

condic~ao p e a pos-condic~ao q.

Exemplo Por exemplo, se p e a proposic~ao x = 1 e q e a proposic~ao z = 3 e S e o trecho

ent~ao, pSq. De fato, suponha p. Apos a execuc~ao de S, y = 2 e z = 1+ 2 pois de p temos x = 1.

y← 2;

z← x+ y;

Portanto, z = 3.

Argumentos validos para correcao parcial de algoritmos.

1. Composic~ao

pS1q e qS2r⇒ pS1;S2r

2. Condicional

(a) No caso fse condic~ao entao Sg o argumento e((p e condic~ao)Sq e (p e n~ao(condic~ao))⇒ q

)=⇒

pse condic~ao entao Sq

(b) No caso fse condic~ao entao S1 senao S2g o argumento e((p e condic~ao)S1q e (p e n~ao(condic~ao))S2q

)=⇒

pse condic~ao entao S1 senao S2q

3. Lacos No caso fenquanto condic~ao faca Sg o argumento e

(p e condic~ao)Sp

=⇒penquanto condic~ao faca S(n~ao(condic~ao) e p)

A proposic~ao (p e condic~ao)Sp e o invariante do laco. Provar que uma proposic~ao e

invariante de laco precisa de induc~ao nita.

Page 90: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

90 Algoritmos e Estruturas de dados

Algoritmo 28: multiplica(m,n : inteiros)

Dado : m e n inteiros

Devolve: m · n/* p : m e n inteiros */

se n < 0 entao a← −n; senao a← n;

/* q : p e a = |n| */

k← 0;

x← 0;

/* r : q e k = 0 e x = 0 */

enquanto k < a faca

/* (invariante do laco) x = mk e k ≤ a */

x← x+m;

k← k+ 1;/* s : x = ma e a = |n| */

se n < 0 entao produto← −x; senao produto← x;

/* t : produto = mn */

Exemplo. Seja S o algoritmo 28.

Sejam p e q as proposic~oes (logicas) descritas no algoritmo e R o trecho de algoritmo

R : se n < 0 entao a← −n; senao a← n.

Vamos provar

pRq. (A.1)

Assuma m ∈ Z e n ∈ Z. Se m ∈ Z e n ∈ Z e n < 0 ent~ao apos R terminar temos a = −n. Se n < 0

ent~ao |n| = −n portanto a = |n|, portanto

(m ∈ Z e n ∈ Z e n < 0)R(a = |n|). (A.2)

Agora, se m ∈ Z e n ∈ Z e n~ao(n < 0) ent~ao apos R terminar temos a = n. Se vale n~ao(n < 0)

ent~ao |n| = n portanto a = |n|. Portanto,

(m ∈ Z e n ∈ Z e n~ao(n < 0))R(a = |n|). (A.3)

De (A.2), (A.3) e do argumento 2(b) temos (A.1), e, portanto, pRq.

Agora, considere o trecho

T : k← 0; x← 0

e vamos provar

qT r

para q e r descritos no algoritmo. Apos k← 0; x← 0 vale k = 0 e x = 0, portanto

qk← 0; x← 0(q e k = 0 e x = 0) (A.4)

para qualquer proposic~ao verdadeira q, em particular quando

q : m ∈ Z e n ∈ Z e a = |n|

e verdadeira, logo qT r.

Assumamos r, isto e, que vele q e k = 0 e x = 0. Se k < a (a condic~ao do laco) ent~ao o invariante

x = mk e k ≤ a

Page 91: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Algoritmos 91

e verdadeiro antes da primeira rodada do laco pois 0 = m0 e 0 ≤ |n|. Assuma

x = mk e k ≤ a e k < a

antes de uma execuc~ao do trecho

U : x← x+m; k← k+ 1;

Considere uma execuc~ao de U e denote por x ′ e k ′ os valores das variaveis x e k antes dessa

execuc~ao. Ent~ao, por hipotese

x ′ = mk ′ e k ′ ≤ a

e (condic~ao do laco) k ′ < a; apos a execuc~ao de U teremos x = x ′ +m e k = k ′ + 1. Agora,

Se x = x ′ +m e x ′ = mk ′, ent~ao x = (mk ′) +m = m(k ′ + 1).

Se k = k ′ + 1 x = m(k ′ + 1) ent~ao x = mk.

Se k ′ < a ent~ao k ′ + 1 ≤ a.

Portanto, apos a execuc~ao de U o invariante e verdadeiro, ou seja,

(x = mk e k ≤ a e k < a)U(x = mk e k ≤ a)

e do argumento para lacos, temos

(x = mk e k ≤ a)enquanto k < a faca U(x = mk)

ainda, n~ao(k < a) e x = mk e k ≤ a equivale a x = mk e k = a. Portanto,

renquanto k < a faca U(x = ma)

logo renquanto k < a faca Us, onde s : x = ma e a = |n|.

Finalmente, assumamos a proposic~ao s, denotemos por Q o trecho de algoritmo

se n < 0 entao produto← −x; senao produto← x

e vamos provar t, isto e, que produto = mn. Porem,

Se s, ent~ao x = m|n|.

Se x = m|n| e n < 0 ent~ao apos Q, produto = −x.

Se produto = −x e x = m|n| e n < 0 ent~ao produto = −m|n| = −m(−n) = mn.

Portanto t. Agora,

se x = ma e a = |n|, ent~ao x = m|n|.

Se x = m|n| e n~ao(n < 0) ent~ao apos Q, produto = x.

Se produto = x e x = m|n| e n~ao(n < 0) ent~ao produto = m|n| = mn.

Portanto, pelo argumento 2.(b) para condicionais

(x = ma e a = |n|)Q(produto = mn).

Resumindo, provamos

1. pse n < 0 entao a← −n; senao a← nq;

2. qk← 0; x← 0r;

Page 92: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

92 Algoritmos e Estruturas de dados

3. renquanto k < a faca c← x+m; k← k+ 1; s;

4. sse n < 0 entao produto← −x; senao produto← xt;

De 1 e 2 temos

pse n < 0 entao a← −n; senao a← n;k← 0; x← 0r. (A.5)

pela regra da composic~ao. De 3 e 4 temos, por composic~ao novamente

r enquanto k < a faca c← x+m; k← k+ 1; ;

se n < 0 entao produto← −x;

senao produto← x t.

que junto com (A.5) e mais a regra da composic~ao resulta que

(m ∈ Z e n ∈ Z)S(produto = mn).

Mais Invariante de laco. Consideremos o seguinte algoritmo:

Algoritmo 29: fat(n)

Dado : n natural

Devolve: n!

i← 1;

f← 1;

enquanto i < n facaf← f ∗ (i+ 1);i← i+ 1;

devolva f.

Vamos provar que a seguinte proposic~ao e um invariante do laco na terceira linha do algoritmo

i ≥ 1 e i ≤ n e f = i! (A.6)

Antes, porem, notemos que o invariante e a negac~ao da condic~ao do laco resulta que quando o laco

termina temos i ≥ 1 e i ≤ n e f = i! e n~ao(i < n), ou seja, i = n e f = n!, provando a correc~ao

parcial do algoritmo.

Vamos provar que a proposic~ao (A.6) e verdadeira independente do numero de vezes que o laco

e executado. A prova e por induc~ao no numero de iterac~oes do enquanto.

Suponhamos que a condic~ao do laco vale, ou seja, i < n. Antes da primeira iterac~ao (A.6) e

verdadeiro pois i = f = 1! = 1.

Suponhamos que i < n e que i ≥ 1 e i ≤ n e f = i!. Apos a execuc~ao de f← f ∗ (i+ 1) e apos aexecuc~ao de i← i+ 1 temos que para o novo valor de i, i ≥ 1 e i ≤ n e f = i!.

Exercıcios

Exerccio 197. Prove que o seguinte programa esta parcialmente correto.

Exerccio 198. Escreva o argumento para outros comandos de laco como o para cada.

A.2 Estruturas de Dados

A.2.1 Heap

Uma arvore binaria T e ou a arvore vazia, denotada ∅ (por abuso de notac~ao) e que n~ao

possui vertices, ou e uma terna T = (r, E,D) em que r e um vertice chamado raiz de T , e E e D s~ao

Page 93: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Estruturas de Dados 93

Algoritmo 30: Divis~ao inteira(a, d)

Dado : a natural e d natural positivo

Devolve: inteiros q e r tais que a = dq+ r e 0 ≤ r < d

r← a;

q← 0;

enquanto r ≥ d facar← r− d;

q← q+ 1;devolva q, r.

arvores binarias disjuntas e que n~ao contem r, chamadas subarvore esquerda e subarvore direita,

respectivamente. A raiz de E, dado que E 6= ∅, e chamada lho esquerdo de r e a raiz de D, dado

que D 6= ∅, e chamada lho direito de r. Nos casos (f,∅,∅) chamamos f de folha, e os vertices

n~ao-folha s~ao ditos vertices internos.

Heap e uma estrutura de dados com representac~ao em um vetor V de uma arvore binaria quase-

completa, isto e, uma arvore binaria com altura d na qual todas as folhas est~ao no nvel d ou d− 1,

e se um no n na arvore tem algum descendente direito no nvel d, ent~ao todos os descendentes

esquerdos de n que forem folhas est~ao tambem no nvel d. Dado um heap V e um ndice i, os

altura

3

5

4

10

7

9

8

1 2 6

V:

1 2 3 4 5 6 7 8 9 10

10 9 5 8 7 4 3 1 2 6

Figura A.1: Exemplo de uma heap

ndices no vetor do pai, lho esquerdo e lho direito s~ao dados por:

pai(i) = bi/2c

esq(i) = 2i

dir(i) = 2i+ 1

Cada no tem associado um conteudo que satisfaz apenas um dos seguintes itens, chamado propri-

edade da heap:

max-heap: V [pai(i)] ≥ V[i];

min-heap: V [pai(i)] ≤ V[i].

Exerccio 199. Prove que a altura de uma arvore binaria quase-completa de n e blog2(n)c.

A seguir daremos alguns algoritmos para heap e neles usamos tamHeap(V) para o ndice do

maior elemento em V que esta preenchido com elementos do heap; tam(V) e o tamanho do vetor.

Exerccio 200. Mostre que para uma heap de tamanho n a complexidade de tempo de FazHeap e

O(logn).

Observemos que todos os elementos com ndice maior que btamHeap(V)c s~ao folhas, portanto,

a iterac~ao so precisa tratar os elementos armazenados nos ndices menores que esee.

Page 94: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

94 Algoritmos e Estruturas de dados

Algoritmo 31: FazHeap(V, i)

Dado : dados um vetor V e um ndice i de modo que as subarvores esquerda e direita do

elemento i ja satisfazem a propriedade (max) heap

Devolve: V com subarvore de raiz i satisfazendo a propriedade de heap

se (esq(i) ≤ tamHeap(V) e V [esq(i)] > V[i]) entaomaior← esq(i);

senaomaior← i;

se (dir(i) ≤ tamHeap(V) e V [dir(i)] > V[maior]) entaomaior← dir(i);

se maior 6= i entaotroca o conteudo de V [i] com V [maior];

FazHeap(V,maior).

Algoritmo 32: constroiheap(V)

Dado : vetor V

Devolve: V que satisfaz a propriedade de (max) heap

tamHeap(V) = tam(V);

para i de btamHeap(V)c ate 1 facaFazHeap(V, i).

Exerccio 201. Prove que a complexidade de tempo de constroiheap para n elementos e O(n).

Exerccio 202. Use o constroiheap para projetoar um algoritmo de ordenac~ao e analise a comple-

xidade desse algoritmo.

Uma das aplicac~os para o heap e a implementac~ao de uma la de prioridades: uma estrutura

para manter um conjunto de elementos S, cada um com um valor associado, chamado de chave.

Deve prover as seguintes operac~oes:

insere(S, x): insere o elemento x em S;

maximo(S): retorna o elemento de S de maior chave;

extraiMax(S): remove e retorna o elemento de S com maior chave.

Algoritmo 33: max(V)

devolva V [1].

A.2.2 Estruturas de dados para representar conjuntos disjuntos

Nessa sec~ao veremos estruturas para implementar as operac~oes faz, busca e uni~ao utilizadas

no algoritmo de Kruskal. Para efeito de comparac~ao entre diferentes estruturas de dados para

representar conjuntos disjuntos, as analises de desempenho dessas operac~oes s~ao realizadas em

termos do numero de operac~oes faz, busca e uni~ao; doravante denotamos por m a quantidade

de tais operac~oes, e com a hipotese de que as n primeiras operac~oes s~ao faz. Isso porque as

vezes o tempo de pior caso de uma operac~ao e uma super-estimativa para o custo da maioria das

operac~oes.

A.2.3 Estruturas de dados para representacao de conjuntos disjuntos

O problema e representar dinamicamente uma famlia S de conjuntos disjuntos C = C1, C2, . . . , Ck

sobre um universo U de modo que cada conjunto e identicado por um representante que e um

Page 95: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Estruturas de Dados 95

Algoritmo 34: extraiMax(V)

se tamHeap(V) ≥ 1 entaomax← V [1];

troca o conteudo de V[1] como o de V [tamHeap(V)];

tamHeap(V)← tamHeap(V) − 1;

FazHeap(V, 1);

devolva max.

Algoritmo 35: insere(A, k)

tamHeap(V)← tamHeap(V) + 1;

i← tamHeap(V);

V [i]← k;

enquanto i > 1 e V[pai(i)] < A[i] facatroca o conteudo de V[pai(i)] com o de V [i];

i← pai(i);

elemento do proprio conjunto e que n~ao tem nenhuma outra propriedade especial, o importante e

que, dado que o conjunto n~ao mudou, toda vez que se pergunta pelo representante a resposta deve

ser a mesma. Para as nossas aplicac~oes podemos assumir que U = 1, 2, . . . , n.

Essas estruturas devem comportar as operac~oes faz, busca e uni~ao sobre C:

faz(x) cria o conjunto unitario Ck+1 = x em C

busca(x) devolve o representante do conjunto ao qual x pertence;

uni~ao(x, y) substitui em C os conjuntos que contem x e y pela uni~ao desses dois conjuntos; se

x ∈ Cx e y ∈ Cy ent~ao uni~ao(x, y) remove os conjuntos Cx e Cy de C e acrescenta Cx ∪ Cya C, alem disso escolhe-se um representante para Cx ∪ Cy.

Representacao usando vetor Usamos um vetor C indexado por U e a ideia e que dois elementos

do conjunto universo x e y est~ao no mesmo conjunto se e somente se as posic~oes x e y do vetor

tem o mesmo conteudo, assim Ck = x ∈ U : C[x] = k. Escolhemos como representante do conjunto

o menor elemento. Dessa forma, os algoritmos para as operac~oes faz, busca e uni~ao cam da

seguinte forma

Algoritmo 36: faz(x)

C[x]← x.1

Teorema 57. O tempo gasto com m operac~oes num universo com n elementos e O(mn).

Observamos que o tempo de pior caso n~ao esta superestimado como mostra a seguinte sequencia

de operac~oes: faz(1), faz(2) . . . faz(n),

uni~ao(2, 1) 1 atualizac~ao no vetor C

uni~ao(3, 2) 2 atualizac~oes no vetor C

uni~ao(4, 3) 3 atualizac~oes no vetor C

uni~ao(5, 4) 4 atualizac~oes no vetor C

......

uni~ao(n,n− 1) n− 1 atualizac~oes no vetor C

cujo custo e Θ(nm).

Page 96: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

96 Algoritmos e Estruturas de dados

Algoritmo 37: busca(x))

devolva(C[x]).1

Algoritmo 38: uni~ao(x, y)

k← minbusca(x), busca(y);1

para cada i de 1 ate n faca2

se C[i] = C[x] ou C[i] = C[y] entao3

C[i]← k;4

Corolario 58. A da complexidade do algoritmo Kruskal(G) quando usamos vetor para repre-

sentar e manipular conjuntos disjuntos e O(|V(G)||E(G)|) para qualquer grafo conexo G com

pesos nas arestas.

Demonstrac~ao. Vimos que o tempo do Kruskal e O(|E| log |E|) mais o tempo gasto com as O(|E|)

operac~oes, pelo teorema acima tempo O(|V ||E|).

Representacao usando listas ligadas Cada conjunto e dado por uma lista ligada. A cada

elemento do universo esta associado um no com os atributos prox que aponta para o proximo

elemento da lista e rep que aponta para o representante do conjunto.

a b c d e f g h i

V:

Figura A.2: Representac~ao com listas ligadas dos subconjuntos c, d, e, a e b, f, g, h do universo

a, b, c, d, e, f, g, h, i .

As func~oes faz e busca operam ligeiramente diferente da que vimos:

faz(x) cria um novo no apontado por x;

busca(x) devolve um ponteiro para o representante do unico conjunto ao qual x pertence;

uni~ao(x, y) une os conjuntos que contem x e y concatenando-se as listas e atualizando-se os pon-

teiros rep de todos elementos de uma das listas.

Uma busca (busca(x)) e feita em tempo constante e o custo de uma uni~ao (uni~ao(x, y)) e

basicamente o custo das atualizac~oes. Dessa forma, a complexidade de tempo das operac~oes nessa

representac~ao e da mesma ordem de grandeza da representac~ao por vetor. Adotando a seguinte

heurstica, a complexidade melhora substancialmente:

(‡) Atualizar sempre a menor lista: pressupondo um atributo `[C] que armazena o numero

de elementos de C, numa uni~ao de duas listas adicionamos a menor lista no nal da maior

lista.

Para um elemento x do universo, a primeira vez que rep[x] e atualizado resulta numa lista de

tamanho 2. A segunda vez que rep[x] e atualizado resulta numa lista de tamanho 4 e assim por

diante. Logo, o numero de atualizac~oes que rep[ ] de um elemento qualquer e atualizado e lgn.

Proposicao 59. Supondo a heurstica (‡) se o representante de x muda k vezes, ent~ao o

tamanho da lista que contem x e pelo menos 2k.

Page 97: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Estruturas de Dados 97

Demonstrac~ao. A prova e por induc~ao em k ∈ N que vale: se o representante de x muda k vezes,

ent~ao o tamanho da lista que contem x e pelo menos 2k, para qualquer elemento x do universo.

Para k = 0, x e o unico elemento na lista dele e portanto temos a base da induc~ao. Para k ≥ 1assumimos que se k− 1 atualizac~oes foram feitas ent~ao a lista de x tem tamanho pelo menos 2k−1.

Na proxima atualizac~ao do representante de x ocorre numa uni~ao com uma lista que tem pelo

menos o mesmo numero de elementos da lista de x, resultando numa lista com pelo menos 2 ·2k−1 =2k elementos. O resultado segue do Princpio da Induc~ao Finita.

Corolario 60. O representante de um elemento qualquer do universo muda no maximo blgncvezes.

Teorema 61. O tempo para m operac~oes num universo com n elementos e O(m+ n logn).

Demonstrac~ao. As operac~oes faz e busca custam O(m) e cada um dos n elementos tem rep[ ]

atualizado O(logn) vezes.

Corolario 62. A complexidade do algoritmo de Kruskal sobre um grafo conexo G quando

usamos listas ligadas para representar e manipular conjuntos disjuntos e O(|E(G)| log |V(G)|).

Demonstrac~ao. S~ao O(|E|) operac~oes que custam O(|E| + |V | log |V |) instruc~oes mais o tempo de

ordenac~ao O(|E| lg |E|), que resulta na complexidade O((|V | + |E|) log |V |) = O(|E| log |V |), pois G e

conexo.

Representacao por floresta A ideia e que cada subconjunto seja representado por uma arvore

de modo que cada elemento do subconjunto seja representado por um no da arvore. Nessa arvore

cada no n~ao-raiz aponta para um pai e a raiz e o representante (gura A.3); o pai da raiz e ela

mesma. Dessa forma, faz cria em tempo constante uma nova arvore que contem somente a raiz,

uni~ao e feita em tempo constante mudando-se o pai de uma das razes (gura A.4) e busca, que

tem tempo dependente da profundidade do elemento na arvore, retorna um ponteiro para uma raiz.

d e

c

a f

b

g

h

Figura A.3: Uma representac~ao com arvores dos subconjuntos c, d, e, a e b, f, g, h.

f

b

g

hd e

c

Figura A.4: Resultado de uni~ao(e, f).

Claramente, essa estrutura pode ser muito ruim se a arvore formada for uma lista linear en-

tretanto, com algumas heursticas bastante simples o resultado nal melhora substancialmente.

Comecamos com a seguinte heurstica para uni~ao de dois subconjuntos, onde tamanho de uma

arvore e o numero de nos

Uniao por tamanho: arvore de menor tamanho e colocada como sub-arvore da arvore de

maior tamanho.

Page 98: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

98 Algoritmos e Estruturas de dados

Denimos a altura de uma arvore como a maior distancia de um no ate a raiz e temos a

seguinte relac~ao entre tamanho e altura resultantes de uma sequencia de uni~oes com a heurstica de

uni~ao por tamanho.

Proposicao 63. Usando uni~ao por tamanho, o numero de nos de cada arvore e pelo menos

2h, onde h e a altura da arvore.

Demonstrac~ao. Vamos denotar por t(x) o numero de nos na arvore que contem x e por h(x) a

altura da arvore que contem x. Vamos provar a proposic~ao por induc~ao no numero de uni~oes: para

todo k ∈ N, apos k uni~oes t(x) ≥ 2h(x) para todo x.

Com 0 uni~oes estamos na congurac~ao inicial, ou seja, t(x) = 1 e h(x) = 0 para todo x, ou

seja, a base da induc~ao e verdadeira. Para k ≥ 1, vamos assumir que apos k − 1 uni~oes temos

t(x) ≥ 2h(x), para todo x. Se a k-esima uni~ao e uni~ao(x, y) ent~ao t(z) ≥ 2h(z) para todo z com

busca(z) 6∈ busca(x), busca(y), ou seja, a relac~ao entre tamanho e altura n~ao muda para as

arvores que n~ao est~ao envolvidas na uni~ao. Vamos denotar por t ′ e h ′ o tamanho e a altura da

arvore resultante da uni~ao e t(x), t(y), h(x) e h(y) os tamanhos e as alturas antes da k-esima uni~ao.

Podemos assumir, sem perda de generalidade, que h(x) ≥ h(y) e dessa forma na uni~ao teremos que

o pai de y e x.

Com essa notac~ao h ′ = maxh(x), h(y)+1. A demonstrac~ao segue em dois casos: (i) se h ′ = h(x)

ent~ao t ′ = t(x) + t(y) ≥ t(x) e pela hipotese de induc~ao t(x) ≥ 2h(x), logo t ′ ≥ 2h′; (ii) se

h ′ = h(y) + 1 ent~ao t ′ = t(x) + t(y) ≥ 2t(y) e pela hipotese de induc~ao t(y) ≥ 2h(y), logo

t ′ ≥ 2 · 2h(y) = 2h′. Em ambos os casos temos que apos k uni~oes t(x) ≥ 2h(x) para todo x. A

proposic~ao segue pelo Princpio da Induc~ao Finita.

Corolario 64. O tempo de m operac~oes num universo de tamanho n e O(m logn+ n).

Demonstrac~ao. Cada faz e feito em tempo O(1) e cada uni~ao em tempo O(1), resultando em

O(n). Cada busca e feito em tempo O(logn) resultando em O(m logn).

Assumimos que cada no x tem um atributo t[x] que armazena o numero de elementos na arvore

enraizada em x os algoritmos cam da seguinte forma

Algoritmo 39: faz(x)

pai[x]← x;1

t[x]← 1.2

Algoritmo 40: busca(x)

enquanto x 6= pai[x] faca x← pai[x];1

devolva(pai[x]).2

Para descrever a uni~ao, usaremos o procedimento link a seguir.

Algoritmo 41: link(x, y)

t[x]← t[x] + t[y];1

pai[y]← x.2

Como o tempo das operac~oes busca s~ao proporcionais a altura parece ser mais natural uma

heurstica que leva em conta a altura e n~ao o tamanho da arvore.

Uniao por altura: usamos a altura, ao inves do tamanho pendurando a arvore mais baixa

na raiz da arvore mais alta.

Com essa heurstica a proposic~ao 63 continua valendo, e consequentemente o corolario. Os

algoritmos para faz, busca e uni~ao s~ao os algoritmos 39, 40 e 42 com t trocado por h, que e

Page 99: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Estruturas de Dados 99

Algoritmo 42: uni~ao(x, y)

se t[busca(x)] ≥ t[busca(y)] entao link(busca(x), busca(y));1

senao link(busca(y), busca(x)).2

iniciado com 0. Em link so precisamos atualizar h se as arvore envolvidas na uni~ao tem a mesma

altura,

Algoritmo 43: link(x, y)

se h[x] = h[y] entao h[x]← h[x] + 1;1

pai[y]← x.2

Comparando os tempos obtidos para lista ligada e arvores

O(m+ n logn)×O(m logn+ n)

usando em ambas representac~oes uni~ao por tamanho, conclumos que ha situac~oes onde o uso de

arvores e pior. Esse fato remete-nos a uma proxima heurstica.

Busca com compressao de caminhos e uniao por rank: quando fazemos um busca(x)

aproveitamos o percurso de x ate a raiz da arvore e desviamos os ponteiros pai[y], de todo

y nesse caminho, para a raiz; na uni~ao penduramos a arvore de menor rank na raiz da de

maior rank.

Exemplo 38. Esquema de uma busca com compress~ao de caminhos.

b

d

c

d c

b

busca(d)

Notemos que se estivermos usando uni~ao por altura, a compress~ao de caminhos modica a

altura da arvore e a atualizac~ao custa muito caro, portanto n~ao a atualizamos e usamos h como

uma estimativa superior para a altura, que chamaremos de rank.

O algoritmo para busca com compress~ao de caminhos ca

Algoritmo 44: busca(x)

se x 6= pai[x] entao pai[x]← busca(pai[x]);1

devolva(pai[x]).2

Essa duas heursticas juntas, a uni~ao por rank e a compress~ao de caminhos e bastante eciente.

O proximo resultado, sobre a complexidade de m operac~oes num universo de tamanho n, envolve

uma func~ao α(m,n) que cresce muito vagarosamente; na pratica podemos assumir que α = 4. N~ao

demonstraremos esse teorema (veja [7]), o resultado que mostraremos a seguir e um pouco menos

preciso.

Teorema 65 (Tarjan, 1975). O tempo gasto com m operac~oes num universo de tamanho n e

O(mα(m,n)).

Page 100: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

100 Algoritmos e Estruturas de dados

Observac~ao 17. A func~ao α(m,n) e uma func~ao que cresce muito vagarosamente. A func~ao de

Ackermann, dada por

A(m,k) =

2k se m = 1,

A(m− 1, 2) se m > 1 e k = 1,

A(m− 1,A(m,k− 1) caso contrario,

e conhecida por crescer muito rapidamente, por exemplo uau = A(4, 1) ∼ 1080 (maior que o numero

estimado de atomos no universo observavel), e

α(m,n) = mini : A(i, bm/nc) > lg(n)

.

Para efeitos praticos podemos assumir α < 5.

Por exemplo

n α(n,n)

0 2 0

3 1

4 7 2

8 2047 3

2048 uau 4

Suponha uma sequencia qualquer de t operac~oes das quais as n primeiras s~ao faz. Particionamos

os elementos de U de acordo com o rank nal do no associado: o Grupo 0 tem os elementos de

rank 0 e 1; o Grupo 1 tem os elementos de rank 2; de um modo geral para k > 2 o Grupo k tem

os elementos de rank em (k, 2k].

O rank dos elementos satisfazem as seguintes propriedades:

(i) quando um no deixa de ser raiz o seu rank n~ao muda nas proximas operac~oes;

(ii) rank[x] < rank[p[x]] para todo x ∈ U que n~ao e raiz;

(iii) na sub-arvore enraizada em x se a altura e h ent~ao o numero de elementos e pelo menos 2h;

(iv) o numero de nos de rank no intervalo (k, 2k] e no maximo n/2k;

(v) o numero de Grupos e lg∗(n), onde lg∗(n) e o numero de vezes que temos que iterar lg ate

que o valor obtido seja menor ou igual a 1, por exemplo, lg∗ 216 = 4.

O custo total das t operac~oes e limitado superiormente pelo custo de m ≤ 2t operac~oes busca.Vamos rastrear uma dessas operac~oes. Num busca(x) os apontadores p[y] no caminho de x ate a

raiz ser~ao redirecionados para a raiz. Classicamos esses apontadores em 2 tipos:

1. Tipo 1 s~ao os apontadores nos nos y tais que p[y] esta num grupo diferente de y, ou y e raiz,

e

2. Tipo 2 s~ao os apontadores dos nos que est~ao no mesmo grupo do pai.

As m operac~oes redirecionam no maximo lg∗(n) apontadores do Tipo 1. Um apontador do Tipo

2 de um no em (k, 2k] e redirecionado no maximo 2k pois por (ii) a cada redirecionamento de p[y]

o apontador apontara para um no de rank maior (para y que n~ao e raiz ou lho de raiz) que o rank

do pai previo, a partir da por (i) o apontador sera sempre do Tipo 1; como s~ao no maximo n/2k

nos o custo e no maximolg∗(n)∑i=0

n

2k2 = O(n lg∗(n)).

Com isso provamos

Teorema 66. O tempo gasto com m operac~oes num universo com n elementos e O((m +

n) lg∗(n)).

Page 101: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Estruturas de Dados 101

Exercıcios

Exerccio 203. Demonstre as tres propriedades de rank enunciadas acima.

Page 102: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

102 Algoritmos e Estruturas de dados

Page 103: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

Referencias Bibliograficas

[1] Jrgen Bang-Jensen and Gregory Gutin. Digraphs. Springer Monographs in Mathematics.

Springer-Verlag London Ltd., London, 2001. Theory, algorithms and applications.

[2] Nicolas Barnier and Pascal Brisset. Graph coloring for air trac ow management. Annals of

Operations Research, 130:163178, 2004.

[3] Bela Bollobas. Extremal graph theory. Academic Press Inc. [Harcourt Brace Jovanovich

Publishers], London, 1978.

[4] Preston Briggs, Keith D. Cooper, and Linda Torczon. Improvements to graph coloring register

allocation. ACM Trans. Program. Lang. Syst., 16(3):428455, 1994.

[5] A. A. Canutescu, A. A. Shelenkov, and R. L. Dunbrack. A graph-theory algorithm for rapid

protein side-chain prediction. Protein Science, 12(9):2001 2014, 2009.

[6] Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic progressions.

J. Symbolic Comput., 9(3):251280, 1990.

[7] Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to algorithms.

The MIT Electrical Engineering and Computer Science Series. MIT Press, Cambridge, MA,

1990.

[8] D. de Werra. An introduction to timetabling. European Journal of Operational Research,

19(2):151 162, 1985.

[9] Reinhard Diestel. Graph theory. Springer-Verlag, New York, second edition, 2000.

[10] Irit Dinur. The PCP theorem by gap amplication (extended abstract). In STOC'06: Pro-

ceedings of the 38th Annual ACM Symposium on Theory of Computing, pages 241250,

New York, 2006. ACM.

[11] I. G. Enting. The combinatorics of algebraic graph theory in theoretical physics. In Combina-

torial mathematics (Proc. Internat. Conf. Combinatorial Theory, Australian Nat. Univ.,

Canberra, 1977), volume 686 of Lecture Notes in Math., pages 148156. Springer, Berlin,

1978.

[12] L. R. Ford, Jr. and D. R. Fulkerson. Flows in networks. Princeton University Press, Princeton,

N.J., 1962.

[13] Zvi Galil. Ecient algorithms for nding maximum matching in graphs. ACM Comput. Surv.,

18(1):2338, 1986.

[14] A. Gamst. Some lower bounds for a class of frequency assignment problems. Vehicular Tech-

nology, IEEE Transactions on, 35(1):8 14, feb. 1986.

[15] Michael R. Garey and David S. Johnson. Computers and intractability. W. H. Freeman and

Co., San Francisco, Calif., 1979. A guide to the theory of NP-completeness, A Series of Books

in the Mathematical Sciences.

[16] Oded Goldreich, Russell Impagliazzo, Leonid Levin, Ramarathnam Venkatesan, and David

Zuckerman. Security preserving amplication of hardness. In 31st Annual Symposium on

Foundations of Computer Science, Vol. I, II (St. Louis, MO, 1990), pages 318326. IEEE

Comput. Soc. Press, Los Alamitos, CA, 1990.

[17] Rajiv Gupta, Mary Lou Soa, and Denise Ombres. Ecient register allocation via coloring

using clique separators. ACM Trans. Program. Lang. Syst., 16(3):370386, 1994.

Page 104: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

104 REFERENCIAS BIBLIOGRAFICAS

[18] Russell Impagliazzo and Avi Wigderson. P = BPP if E requires exponential circuits: deran-

domizing the XOR lemma. In STOC '97 (El Paso, TX), pages 220229 (electronic). ACM,

New York, 1999.

[19] The Clay Mathematics Institute. Millennium Problems. http://www.claymath.org/

millennium, May 2000. Acesso em 03/2008.

[20] N. J. Kalton and James W. Roberts. Uniformly exhaustive submeasures and nearly additive

set functions. Trans. Amer. Math. Soc., 278(2):803816, 1983.

[21] L. Lovasz and M. D. Plummer. Matching theory, volume 121 of North-Holland Mathematics

Studies. North-Holland Publishing Co., Amsterdam, 1986. Annals of Discrete Mathematics,

29.

[22] Alexander Lubotzky and Igor Pak. The product replacement algorithm and Kazhdan's property

(T). J. Amer. Math. Soc., 14(2):347363 (electronic), 2001.

[23] O. Mason and M. Verwoerd. Graph theory and networks in biology. Systems Biology, IET,

1(2):89 119, mar. 2007.

[24] Eleanor M. Mitchell, Peter J. Artymiuk, David W. Rice, and Peter Willett. Use of techniques

derived from graph theory to compare secondary structure motifs in proteins. Journal of

Molecular Biology, 212(1):151 166, 1990.

[25] Michael Sipser and Daniel A. Spielman. Expander codes. IEEE Trans. Inform. Theory, 42(6,

part 1):17101722, 1996.

[26] Nenad Trinajstic. Chemical graph theory. Mathematical Chemistry Series. CRC Press, Boca

Raton, FL, second edition, 1992.

[27] Alasdair Urquhart. Hard examples for resolution. J. ACM, 34(1):209219, 1987.

[28] Leslie G. Valiant. On non-linear lower bounds in computational complexity. In Seventh Annual

ACM Symposium on Theory of Computing (Albuquerque, N. M., 1975), pages 4553.

Assoc. Comput. Mach., New York, 1975.

[29] Uri Zwick. The smallest networks on which the Ford-Fulkerson maximum ow procedure may

fail to terminate. Theoret. Comput. Sci., 148(1):165170, 1995.

Page 105: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

INDICE REMISSIVO 105

Indice Remissivo

(x1 → xk)-caminho, 74

M-alternante, 66

M-aumentante, 66

busca, 96, 99

f-aumentante, 83

faz, 96, 99

k-aresta-conexo, 48

k-clique, 13

k-conexo, 48

k-conjunto-independente, 13

k-cubo, 34

s-t corte, 82

s-t uxo, 82

uni~ao, 96, 99

arvore, 57

geradora, 58

geradora mnima, 60

arvore binaria, 92

Heap, 93

busca, 62, 100

faz, 62

uni~ao, 62

adjacentes, 9

algoritmo

BellmanFord, 76

de Edmonds, 71

de FloydWarshall, 41

de BellmanFord, 76

de Dijkstra, 37

de Fleury, 53

de JarnkPrim, 60

de Kruskal, 61

Dijkstra, 36

ancestral, 44, 73

aresta, 9

aresta de corte, 47

aresta de retorno, 45

aresta-conexidade, 48

aresta-transitivo, 20

arestas adjacentes, 9

articulac~ao, 44

automorsmo, 20

biconexo, 44

blocos, 50

Busca

em Largura, 28

em Profundidade, 28

caminho, 31

hamiltoniano, 55

mnimo, 75

orientado, 74

caminho mnimo, 35

capacidade do corte, 82

cintura, 33

circuito, 32

mpar, 33

hamiltoniano, 53

negativo, 76

orientado, 74

clique, 13

coberto, 65

cobertura mnima, 67

cobertura por vertices, 67

complemento, 11

completo, 11

componente

biconexo, 44

conexo, 43

fortemente conexo, 78

comprimento, 31, 32, 35

de um caminho orientado, 75

concatenac~ao, 34

concatenac~ao de caminhos, 34

conexidade, 48

conexo, 43

conjunto independente, 13

corte

capacidade, 82

denido por A, 15

uxo, 82

custo de um subgrafo, 59

descendente, 44, 73

desigualdade

triangular, 36, 76

diametro, 32

diagrama, 9

digrafo, 20

distancia, 31, 35, 75

emparelhamento, 65

maximo, 65

perfeito, 65

extremos, 9, 31

Fecho transitivo, 74

lho, 44, 73

oresta, 57

Page 106: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

106 REFERENCIAS BIBLIOGRAFICAS

uxo

valor, 82

uxo no corte, 82

folha, 57

grafo, 9

k-partido, 17

bipartido, 14

bipartido completo, 16

com pesos nas arestas, 20

completo, 11

das componentes, 78

de blocos, 50

de Petersen, 18

dirigido, 20, 73

euleriano, 52

hamiltoniano, 53

linha, 12

orientado, 20

regular, 12

subjacente, 20

transposto, 78

trivial, 9

vazio, 9

grafo residual, 85

grau, 10

de entrada, 73

de sada, 73

maximo, 10

medio, 10

mnimo, 10

intersecc~ao de grafos, 11

isomorsmo, 18

isomorfos, 18

lista de adjacencias, 21

lista de adjacencias

dirigida, 73

mnimo

s-t corte, 83

matriz

de incidencias, 24

de adjacencias, 21

multigrafo, 20

operac~ao elementar, 59

ordem, 9

Ordenac~ao topologica, 74

passeio, 25

patriarca, 44

permanente, 69

rank, 100

rede, 82

regular, 12

subgrafo, 13

bipartido induzido, 14

gerador, 13

induzido, 13

tamanho, 9

Teorema

de Berge, 66

de Brooks, 47

de Hall, 68, 69

de Konig, 67

de Menger, 50

de Turan, 17

de Tutte, 67

Ford e Fulkerson, 84

traco, 24

triangulo, 13

trilha, 52

euleriana, 52

euleriana fechada, 52

fechada, 52

uni~ao de grafos, 11

union-nd, 96

com arvores, 98

com lista ligada, 97

com vetor, 96

vertice, 9

vertice de corte, 44

vertice-transitivo, 20

vertices internos, 31

valor do uxo, 82

vetores de incidencias, 24

vizinhanca, 10

vizinhanca de U, 17

vizinhos, 10

Page 107: aleph0.info...Sum ario 1 Conceitos B asicos 7 1.1 Grafosoes|c~iniciaisde ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 1.1.1 Grau

INDICE DE SMBOLOS 107

Indice de Sımbolos

(V, E, ρ), 20

C = 1, . . . , k, 1, 32

Ck, 32

E(G), 9

E+, 73

E−, 73

EG(v), 10

G+ xy, 57

G− F, 48

G−U, 48

G− e, 43

G− v, 44

G = (A ∪ B, E), 14G = (V, E), 9

G[M], 13

G[U], 13

G ' H, 18Gn, 9

H ⊆ G, 13Kn, 11

Kn,m, 16

N+, 73

N−, 73

NG(U), 17

NG(v), 10

O(fn), 8

P = 0, 1, . . . , k, 31

Pk+1, 31

V(G), 9

∆(G), 10

Ω(fn), 8

Θ(fn), 8

α(G), 16

χ(G), 12

δ(G), 10

κ(G), 48

λ(G), 48

dist(u, v), 35, 75

distk(i, j), 40

µ(G), 65

ν(G), 67

ω(G), 16

LG, 12

cin(G), 33

diam(G), 32

distG(u, v), 31

distG(u, v) =∞, 31

val(f), 82

c(S), 83

d(G), 10

d(v), 10