2° Semestre
● Grafos
● Definições básicas
● Grafos direcionados e não direcionados
● Grau de vértice
● Caminho de comprimento
● Tipos de grafos
● Estrutura de dados para grafos
● Árvores
● Formas de representação
● Nomenclaturas
● Árvores binárias
● Percurso em árvores binárias
2
Grafos
4
Definições Básicas
5
Definições Básicas
v1
G=(V, E) direcionado
V={v1, v2, v3, v4, v5}
v2
E={(v1, v2), (v1, v5),
DESENHO
(v2, v3), (v2, v4),
(v2, v5), (v3, v4), v3 v4
(v3, v5), (v4, v5)}
v5
6
Grafos Direcionados e Não
Direcionados
● Um grafo direcionado G é um par de (V, A), em que:
● V é um conjunto finito de vértices (ou nodos);
● A é um conjunto de arestas (ou arcos) com relação binária em V.
0 1 4
V = {0,1,2,3,4,5}
A = {(0,1),(0,3),(1,2),(1,3),(2,2),(2,3),(3,0),(5,4)}
3 2 5
A = {(0,1),(0,2),(1,2),(4,5)}
3 2 5
● Em um grafo não direcionado, self-loops não são
permitidos.
8
Grafos Direcionados e Não
Direcionados
● Em um grafo direcionado, a aresta (u, v) sai do
vértice u e entra no vértice v:
● Se (u, v) é uma aresta no grafo G = (V, A):
– O vértice v é adjacente ao vértice u;
– A aresta é dita dissidente de u e incidente a v.
● Quando o grafo é não direcionado, a relação de
adjacência é simétrica;
● Em grafos direcionados a relação de adjacência
não é necessariamente simétrica.
9
Grafos Direcionados e Não
Direcionados
● Nas figuras A e B o vértice 1 é adjacente ao
vértice 0:
● A aresta (0,1) pertence aos dois grafos.
● Na figura A o vértice 0 não é adjacente ao vértice
1.
0 1 4 0 1 4
3 2 5 3 2 5
A B 10
Grau de Vértice
3 2 2 5 3 2 5
3
1
11
A B
Caminho de Comprimento
12
Caminho de Comprimento
13
Caminho de Comprimento
● Em um grafo direcionado:
● Um caminho (v0, v1, …, vk) forma um ciclo se v0 = vk e o
caminho possui pelo menos 1 aresta:
– O ciclo é simples se os vértices v0, v1, …, vk são distintos;
– O self-loop é um ciclo de tamanho 1.
● Em um grafo não direcionado:
● Um caminho (v0, v1, …, vk) forma um ciclo se v0 = vk e o
caminho possui pelo menos 3 arestas:
– Conhecido também como caminho fechado;
– O ciclo é simples se os vértices v0, v1, …, vk são distintos.
● Um grafo sem ciclos é acíclico.
14
Caminho de Comprimento
0 1 4
3 2 5
● Um grafo não direcionado é conectado se possuir exatamente um
componente conectado:
● Cada vértice alcançável a partir de qualquer outro.
15
Grafos Fortemente
Conectados
● Um grafo direcionado G = (V, A) é fortemente conectado se cada
dois vértices quaisquer forem alcançáveis a partir um do outro;
● No grafo da figura abaixo todos os pares em {0, 1, 2, 3} são
mutuamente alcançáveis:
● Os vértices {4, 5} não formam um componente fortemente conectado.
0 1 4
3 2 5
3 2 5 2 5
18
A B
Versão Direcionada de Grafo
Não Direcionado
● A versão direcionada de um grafo não
direcionado G = (V, A) é um grafo direcionado G' =
(V', A'):
● Cada aresta não direcionada (u, v) em G é substituída
por duas arestas direcionadas (u, v) e (v, u).
0 1 0 1
2 2
19
Versão Não Direcionada de
Grafo Direcionado
● A versão não direcionada de um grafo
direcionado G = (V, A) é um grafo não direcionado
G' = (V', A'):
● Contém as arestas de G sem a direção e sem os self-
loops.
0 1 4 0 1 4
3 2 5 3 2 5
A B
20
Grafo Ponderado
0 1 4
3 2
7
5 2
1 5
3
23
Estrutura de Dados para
Grafos
● A escolha da estrutura de dados certa para a
representação de grafos tem um grande impacto
no desempenho de um algoritmo;
● Há duas representações usuais:
● Matriz de adjacências;
● Listas de adjacências.
24
Estrutura de Dados para
Grafos
● Dado um grafo G = (V, E), a matriz de adjacências M é
uma matriz de ordem |V|x|V|, tal que:
● |V| = número de vértices;
● M[i,j] = 1, se existir aresta de i a j;
● M[i,j] = 0, se não existir aresta de i a j.
● Grafos não direcionados são representados em matrizes
simétricas. V V V V V 1 2 3 4 5
V1 V2 V1 0 1 0 0 1
V2 1 0 1 1 1
V3 V3 0 1 0 1 0
V5 V4 V4 0 1 1 0 1
V5 1 1 0 1 0
25
Estruturas de Dados para
Grafos
● A matriz de adjacência, M[i,j] deve indicar ou não a presença de
uma aresta divergente de i e convergente em j, ou seja i → j;
● Grafos direcionados são representados em matrizes
assimétricas;
● Se o grafo for ponderado:
● M[i,j] deve conter o peso associado com a aresta:
– Se não existir aresta entre i e j, então é necessário utilizar um valor que
não possa ser usado como peso, como o valor 0 ou negativo, por exemplo.
V1 V2 V3 V4 V5
V1 V2 V1 0 1 0 0 0
V2 0 0 0 1 1
V3
V3 1 0 0 0 0
V5 V4
V4 0 0 1 0 0
V5 0 0 0 1 0 26
Estruturas de Dados para
Grafos
● A lista de adjacência é outra estrutura de dados
utilizada para representar grafos:
● Cada vértice do grafo possui uma lista de todos os outros
vértices com os quais ele tem uma aresta:
– Chamada lista de adjacência deste vértice.
V1 V2 V3 NULL
V1 V2 V1 V4 V5 NULL
V2 V3 V3 V1 V6 V7 NULL
V4 V2 V8 NULL
V5 V6 V5 V2 V8 NULL
V6 V3 V8 NULL
V4 V7 V7 V3 V8 NULL
V8 V8 V4 V5 V6 V7 NULL
27
Árvores
● Árvores são:
● Estruturas de dados não sequenciais extremamente
úteis em muitas aplicações;
● Estruturas de dados que caracterizam uma relação
entre os dados que a compõem:
– A relação existente entre os nós é uma relação de
hierarquia, onde um conjunto de nós é
hierarquicamente subordinado a outro.
29
Árvores
B C D
E F G H
I J K L
30
Formas de Representação de
Árvores
● As árvores podem ser representadas
graficamente de diversas formas:
● Grafo (mais utilizada):
A
B C
D E F G
● Diagrama de Venn (ou diagrama de inclusão):
E G
D F
B C
A 31
Formas de Representação de
Árvores
● As árvores podem ser representadas graficamente
de diversas formas:
● Identação:
A
A
B
D B C
E
F D E F G
C
G
● Parênteses aninhados:
(A (B(D, E, F), C(G)))
32
Nomenclatura
Árvore Ordenada
● Uma árvore é chamada ordenada quando a ordem
das subárvores é significante:
● Assim, as duas árvores ordenadas seguintes são diferentes:
A A
B C D C D B
● Exemplo:
● Em uma árvore que representa os descendentes de uma
família real, a ordem das subárvores pode ser importante
pois pode determinar a ordem de sucessão da coroa.
33
Nomenclatura
Pai, Filho e Nível
A
B C D
E F G H
I J K L
● Pai e filho: Um nó y abaixo de um nó x é chamado filho de x.
Então x é dito pai de y . Exemplo: B é pai de E e F;
● Irmão: Nós com o mesmo pai são ditos irmãos. Exemplo: B, C,
D são irmãos;
● Nível de um nó: A raiz de uma árvore tem nível 1. Se um nó tem
nível i, seus filhos têm nível i + 1. Exemplo: E, F, G e H têm nível
3.
34
Nomenclatura
Altura, Folha e Grau
A
B C D
E F G H
I J K L
● Altura ou profundidade de uma árvore: É o nível máximo de seus
nós. A árvore do exemplo tem altura 4;
● Folha ou nó terminal: É um nó que não tem filhos. Exemplo: C, H,
I, J, K e L são folhas;
● Nó interno ou nó não terminal: É um nó que não é folha;
● Grau de um nó: É o número de filhos do nó. Exemplo: B tem grau
2, G tem grau 1.
35
Nomenclatura
Grau de Árvore e Árvore Binária
B C D
E F G H
I J K L
+ - e f
2 6
1 3 5 7
2 6
1 3 5 7
2 6
1 3 5 7
2 6
1 3 5 7
41