Algoritmos em Grafos
Celso C. Ribeiro
Caroline T. Rocha
PARTE 1: CONCEITOS BÁSICOS
Algoritmos em Grafos
2
Conceitos Básicos
Grafo: Geometricamente, um grafo é um conjunto de
pontos (vértices ou nós) conectados por linhas (arestas).
v1
v5
G = (V,
e E)
e2
e3
v2
v3
v4
vérticese6
e10
e8
5
e4
e1
v8
e7
e12
v7
e9
arestas
v6
e11
v9
V = {v1, v2, ..., vn}
|V | = n
V = {v1, vE2,=v3{e
, v1,4,ev2,5,...,
v6,evm7}, v8, v|9E}| = mn = 9
E = {e1, e2, e3, e4,..., e9, e10, e11, e12} m = 12
Algoritmos em Grafos
3
Conceitos Básicos
Cada aresta é definida por um par não-ordenado de
nós, que são suas extremidades:
e = (vi , vj)
u e v são adjacentes
e é incidente a v
e é incidente a u
e = (u, v)
d(v) : grau do nó v = número de arestas incidentes a v
e5, e7 , e8(nós
incidentes
a v5
adjacentes)
a v4), v=
v7
6, 2
d(v ) = d(v v) 5 =adjacente
d(v ) = d(v
1
2
8
9
d(v3) = d(v4) = d(v5) = d(v6) = 3
d(v7) = 4
d(v) = 0
vértice isolado
Algoritmos em Grafos
4
Conceitos Básicos
Teorema: o número de nós de grau ímpar em um grafo finito é
par.
Demonstração:
d (v i )  2. | E |

i V

e1
e = (u, v) é um laço se u = v
arestas paralelas possuem as
mesmas extremidades
e4
e2
e3
e5
Multi-grafo: sem laços, mas eventualmente com arestas paralelas
Grafo simples (grafo) : sem laços nem arestas paralelos
Algoritmos em Grafos
5
Conceitos Básicos
Kn: grafo completo com n nós
número de arestas: n(n-1)/2
K3
K4
K5
Grafo k-regular: todos os nós têm grau k.
Kn é (n-1)-regular
Algoritmos em Grafos
6
Conceitos Básicos
Grafo bipartido: o conjunto de nós pode ser particionado
em dois subconjuntos V1 e V2 tais que qualquer aresta
possui uma extremidade em V1 e a outra em V2.
V1
É bipartido?
SIM
V2
Km,n: grafo bipartido completo
onde |V1| = m e |V2| = n
É bipartido?
NÃO
Algoritmos em Grafos
7
Conceitos Básicos
G '  (V ' , E ' ) é um subgrafo de G  (V , E ) :
V ' V , E '  E
Grafo induzido em G  (V , E ) por X V :
G (X )  (X , E (X ))
onde E(X) é o subconjunto de E formado por todas as
arestas com as duas extremidades em X.
2
1
G
6
X = {2, 3, 4, 5}
4
3
G(X)
5
Algoritmos em Grafos
8
Conceitos Básicos
Clique: subconjunto de nós que induz um subgrafo completo.
5
C1 = {1, 2, 3}
C2 = {2, 4, 5}
2
1
6
3
C3 = {4, 6}
C4 = {3}
4
G  (V , E ) e G  (V , E ) são complementares:
(i , j )  E  (i , j )  E
1
2
(i , j )  E  (i , j )  E
3
G
4
1
2
3
4
G
Algoritmos em Grafos
9
Conceitos Básicos
Caminho de v i a v j :
Seqüência P de vértices e arestas alternados, tais que cada
aresta é incidente ao nó anterior e ao nó posterior.
v i  v j  P é um ciclo ou circuito.
Caminho simples: cada vértice aparece exatamente uma vez
Comprimento de um caminho: número de arestas
Caminhos disjuntos em vértices/arestas: não têm
vértices/arestas em comum
Algoritmos em Grafos
10
Conceitos Básicos
Vértices vi e vj são conectados se existe um caminho de vi a vj.
Dois vértices vi e vj estão na mesma componente conexa se
existe um caminho entre eles.
Um grafo é conexo se possui uma única componente conexa,
ou seja, se existe um caminho entre qualquer par de nós
Problema importante: determinar se um grafo é conexo ou não.
É conexo?
Algoritmos em Grafos
11
Conceitos Básicos
Um grafo gerador de um grafo conexo G=(V,E) é um subgrafo
conexo G’ com o mesmo conjunto de nós V.
Grafo G
Grafo gerador de G
v é um ponto de articulação do grafo conexo
G se sua remoção desconecta G.
v
Se uma componente conexa de um grafo não contem ponto de
articulação, então ela é uma componente 2-conexa.
Uma aresta e cuja remoção desconecta um
grafo conexo é chamada de ponte.
e
Algoritmos em Grafos
12
Conceitos Básicos
Digrafo ou grafo orientado: grafo no qual são associadas
direções aos seus arcos.
G  (V , A)
V  {v 1 ,...,v n }
A  {a1 ,...,am }
a  (i , j ) V V
Início ou origem
j é sucessor de i
i
par ordenado
Fim ou destino
2
j
i é predecessor de j
d  (i )
= grau de entrada de i
= número de predecessores de i
d  (i )
= grau de saída de i
= número de sucessores de i
4
1
3
5
d  (1)  1
d  (4)  0
d  (4)  3
d  (6)  1
6
Algoritmos em Grafos
13
Conceitos Básicos
Uma cadeia a1, a2, ..., aq de arcos é uma seqüência tal que
cada arco ai tem uma extremidade comum com o arco ai-1 e
outra com o arco ai+1, 2 ≤ i ≤ q-1.
2
a1
a3
5
a2
1
a4
a6
a5
3
a7
a2, a5, a6, a4  cadeia entre os nós 2 e 3
4
Ciclo: cadeia cujas extremidades coincidem.
Caminho a1, a2,..., aq: extremidade final do arco ai coincide
com a extremidade inicial do arco ai+1.
Circuito: caminho cujas extremidades coincidem.
Algoritmos em Grafos
14
Conceitos Básicos
Dois vértices vi e vj estão na mesma componente fortemente
conexa de um grafo orientado se existe um caminho de vi a
vj e um caminho de vj a vi.
7
6
2
8
1
{1, 2, 3, 4, 5, 6, 8, 9, 10}
{7}
5
3
10
9
4
1
4
7
{1, 2, 3, 4}
{5, 6, 7}
2
3
6
5
Algoritmos em Grafos
15
Conceitos Básicos
Grafos planares:
Um grafo é planar se ele pode ser representado no plano de
modo tal que não haja interseção entre suas arestas.
K3 ?
PLANAR
K4 ?
PLANAR
K5 ?
NÃO
K3,3 ?
NÃO
Algoritmos em Grafos
16
Conceitos Básicos
Árvore: grafo conexo sem circuitos
Floresta: grafo cujas componentes conexas são árvores
Um caminho é uma árvore?
Sim!
Algoritmos em Grafos
17
Conceitos Básicos
Teorema: Se T é uma árvore com n vértices, então:
1. Existe um único caminho entre dois nós quaisquer de T.
2. Sejam i, j dois nós de T tais que a aresta (i, j) não existe.
Então, a inserção da aresta (i, j) em T provoca a formação
de exatamente um ciclo.
3.
T possui n-1 arestas.
Algoritmos em Grafos
18
Conceitos Básicos
Formas de representação e matrizes associadas a um grafo
Matriz de incidência nó-arco:
Uma linha para cada nó
Uma coluna para cada aresta
G  (V , A)
|V | n
| A | m
1
a1
a2
4
a5
a  (i , j )  A
2
a4
a
a3
3
Am n
 0
i   1
 0
 
j   1
 0 
0
0
0
 1  1



1
0

1

1
0


 0 1 1
0  1


0
0  1  1
 0
Algoritmos em Grafos
19
Conceitos Básicos
Formas de representação e matrizes associadas a um grafo
Uma matriz quadrada é unimodular se seu determinante é 1.
Uma matriz retangular A é totalmente unimodular se e
somente qualquer matriz quadrada regular extraída de A é
unimodular.
Algoritmos em Grafos
20
Conceitos Básicos
Formas de representação e matrizes associadas a um grafo
Teorema: A matriz de incidência de um grafo é totalmente
unimodular.
Uma matriz de incidência contém exatamente dois elementos nãonulos por coluna (+1, -1).
Demonstração por indução:
1. Todas as matrizes quadradas regulares de dimensão 1 são
unimodulares (det = 1).
2. Suponha a hipótese verdadeira até matrizes de ordem n-1 e
considere uma matriz quadrada A’ de ordem n extraída de A.
Se toda coluna de A’ tem dois elementos não-nulos, então
det(A’) = 0 (soma das linhas nulas).
Se uma coluna de A’ não tem elementos não-nulos, então
det(A’) = 0.
Algoritmos em Grafos
21
Conceitos Básicos
Formas de representação e matrizes associadas a um grafo
Se existe uma coluna com um único coeficiente não-nulo, então
det(A’) =  det(A’’), onde A’’ é a matriz quadrada de ordem n-1
extraída de A’ pela eliminação da linha i e da coluna j. Como a
hipótese é verdadeira para n-1, det(A’’) = 1 ou 0. Logo,
det(A’) = 1 ou 0.
j
A' 


i



1







Algoritmos em Grafos
22
Conceitos Básicos
Formas de representação e matrizes associadas a um grafo
Matriz de adjacência:
Uma linha para cada nó
Uma coluna para cada nó
a12
1
2
a24
a13
a34
4
aij = 1  (i , j )  A
aij = 0  (i , j )  A
a23
An n
3
0

0


0

0
1
0
0
0
1
1
0
0
0

1
1

0
Grafos sem arcos paralelos:
1
2
1
2
4
3
n2 posições
4
3
Algoritmos em Grafos
23
Conceitos Básicos
Formas de representação por listas de adjacências
Lista de nós:
Cada nó aponta para a lista de seus sucessores (ou nós
adjacentes)
2
1
n nós  n +m posições
m arestas
4
nós
3
sucessores
nós
predecessores
1
2
3
1
2
3
4
2
1
3
4
3
1
2
4
2
3
4
Algoritmos em Grafos
24
Conceitos Básicos
Formas de representação por listas de adjacências
1
3
Lista de arcos
2
1
4
1
2
3
4
n
1
3
5
7
m
1
3
1
3
2
1
1
2
3
4
5
6
7
2
S(.)
1
1
1
2
4
4
T(.)
2
3
4
3
2
3
3
É simples passar de uma forma de representação para outra.
Algoritmos em Grafos
25
Conceitos Básicos
Desenhar o grafo representado pela matriz de adjacência
abaixo:
0
0

0
A
0
0

 1
1
2
1
1 0 0 0 1
0 1 0 0 1
0 0 1 0 0

0 1 0 0 0
1 0 1 0 0

0 1 0 1 0 
3
4
5
6
7
8
1
2
5
3
6
5
2
8
7
4
6
3
11
9
4
10
9 10 11
Quais1 são
conexas deste grafo?
1  1componentes
0 0 0 0 0 fortemente
0 0 0
 1  as


2  1 {3,4}
0
0
0

1
0

1

1
0
0
0
{1,2,5,6},


3  0

0
0 1
0
0 0 matriz
0 0
4  0 0 sua
Representar
5  0
0  1  1

0de 0incidência.
 1  1  1
0  1  1 0 0

0 0 0 0 0
0 1
0 0 0 0 1

6  0  1  1  1  1  1
0
Algoritmos em Grafos
26
Conceitos Básicos
Representar o mesmo grafo por sua lista de adjacências.
1
2
6
2
3
6
3
4
4
1
1
2
5
3
6
3
5
5
2
4
6
1
3
2
8
7
4
6
3
11
9
4
5
10
Representar o grafo por sua lista de arcos.
1
2
3
4
5
6
7
8
9
10
11
1
1
6
6
2
6
2
5
5
3
4
2
6
1
3
6
5
3
2
4
4
3
Algoritmos em Grafos
27
Conceitos Básicos
Algoritmo para converter uma representação de um grafo orientado
sob forma de matriz de adjacência em matriz de incidência.
Ler número de nós n, matriz A
linha  1, coluna  1, arco  0
Enquanto linha ≤ n faça
Enquanto coluna ≤ n faça
Se A(linha,coluna)=1 então
arco  arco+1, k  1
Enquanto k ≤ n faça
B(k,arco)  0
k  k+1
fim_enquanto
B(linha,arco)  +1
B(coluna,arco)  -1
fim_se
coluna  coluna +1
fim_enquanto
coluna  1
linha  linha +1
fim_enquanto
Algoritmos em Grafos
28
Conceitos Básicos
Exercício: Escrever um algoritmo para converter a representação
de um grafo orientado sob forma de matriz de incidência
em uma representação por listas de adjacência.
Algoritmos em Grafos
29
Download

Parte 1