Anda di halaman 1dari 41

Algoritmos Estruturados

Aula 09: Grafos e Árvores

Tecnologia em Análise e Desenvolvimento de


Sistemas

2° Semestre

Prof° Rafael Divino Ferreira Feitosa


E-mail: rafael.feitosa@ifgoiano.edu.br
Roteiro

● 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

● Muitas aplicações na computação precisam


considerar um conjunto de conexões entre
pares de objetos;
● Os relacionamentos derivados dessas conexões
respondem a perguntas como:
● Qual a menor distância entre um objeto e outro?
● Quantos outros objetos podem ser alcançados a partir
de determinado objeto?
● Para modelar essas situações utilizamos um tipo
abstrato de dados chamado grafo.
3
Grafos

● Existem centenas de problemas práticos que


podem ser resolvidos com aplicação de grafos:
● A Web como um imenso grafo onde os links levam o
usuário a uma informação relevante;
● Alocação de pessoas em vagas de processos seletivos
para descobrir as melhores oportunidades;
● Descoberta do caminho mais curto entre cidades.

4
Definições Básicas

● Um grafo é constituído de um conjunto de


vértices (ou nós ou nodos) e um conjunto de
arestas (ou arcos) conectando pares de vértices:
● Um vértice é um objeto simples que pode ter um nome
e outros atributos:
– Um grafo com |V| vértices tem nomes com valores entre
0 e |V| - 1;
– Quando os vértices possuem nomes arbitrários é
necessário criar um mapeamento 1 – 1 entre os nomes
arbitrários e os |V| inteiros entre 0 e |V| - 1.

5
Definições Básicas

● Processo de definição e desenho:

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

● Vértices são representados por círculos e arestas são


representadas por setas;
● Em grafos direcionados podem existir arestas de um vértice para
si mesmo, as self-loops.
7
Grafos Direcionados e Não
Direcionados
● Um grafo não direcionado G é um par (V, A), em que:
● A é constituído de pares de vértices não ordenados;
● As arestas (u, v) e (v, u) são consideradas como uma única
aresta e:
– A aresta e é dita incidente a u e a v, além disso, u e v são
ditos adjacentes um ao outro.
0 1 4
V = {0,1,2,3,4,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

● O grau de um vértice em um:



Grafo não direcionado: número de arestas que incidem sobre ele:
– Ex.: O vértice 1 da figura B tem grau 2.
● Grafo direcionado: soma do número de arestas que saem (out-
degree) e entram (in-degree):
– Ex.: O vértice 2 da figura A tem out-degree 2, in-degree 2 e grau 4.
● Um vértice de grau 0 é dito isolado ou não conectado,
como o vértice 3 da figura B.
0 1 4 0 1 1 4
4 2

3 2 2 5 3 2 5
3
1
11
A B
Caminho de Comprimento

● Um caminho de comprimento k de um vértice x


a um vértice y em um grafo G = (V, A) é:
● Uma sequência de vértices (v0, v1, v2, …, vk) tal que x =
v0, y = vk e (vi-1, vi) ∈ A para i = 1, 2, 3, …, k.
● O comprimento de um caminho é o número que
arestas contidas nele:
● O caminho contém os vértices v0, v1, v2, …, vk e as
arestas (v0, v1), (v1, v2), …, (vk-1, vk).

12
Caminho de Comprimento

● Se existir um caminho c de x a y, então:


● y é alcançável a partir de x via c;
● Um caminho é simples se todos os vértices do
caminho forem distintos:
● O caminho {0, 1, 2, 3} é simples;
● O caminho {1, 3, 0, 3} não é simples.

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

● Um grafo não direcionado é conectado (ou conexo) se cada par de


vértices estiver conectado por um caminho;
● O componentes conectados são conjunto de vértices sob a relação “é
alcançável a partir de”:
● São porções conectadas de um grafo.
● A figura B contém 3 componentes: {0,1,2}, {4,5} e {3};

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

● Um grafo direcionado fortemente conectado tem apenas um


componente fortemente conectado.
16
Grafos Isomorfos

● Dois grafos G = (V, A) e G' = (V', A') são


isomorfos se existir uma bijeção f: V → V', tal que
(u, v) ∈ A se e somente se (f(u), f(v)) ∈ A':
● É possível re-rotular os vértices de G para serem
rótulos de G' mantendo as arestas correspondentes em
G e G'.
f: 0-s
0 1 1-t
2-u
4 5 s w x t 3-v
4-w
5-x
7 6 v z y u 6-y
7-z
3 2
17
Subgrafos

● Um grafo G' = (V', A') é um subgrafo de G = (V, A) se


V' ⊆ V e A' ⊆ A:
● O conjunto de vértices é um subconjunto do conjunto de
vértices G e o conjunto de arestas é um subconjunto do
conjunto de arestas de G.
● O subgrafo induzido pelo conjunto de vértices {1, 2,
4, 5} da figura A é mostrado na figura B e possui o
conjunto de arestas ({1,2}, {2,2}, {5,4}).
0 1 4 1 4

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

● Um grafo ponderado possui pesos associados à suas


arestas:
● Podem representar custos ou distâncias.

0 1 4
3 2
7
5 2
1 5
3

● No grafo acima, qual o menor caminho de 0 a 3?


● O menor caminho não é a aresta 0 - 3, mas sim a aresta 0 -
2 e depois a aresta 2 - 3.
21
Grafo Bipartido

● Um grafo bipartido é um grafo não direcionado G =


(V, A), no qual V pode ser particionado em dois
conjuntos V1 e V2 tal que (u, v) ∈ A implica que:
● u ∈ V1 e v ∈ V2; ou
● u ∈ V 2 e v ∈ V1 .
● Simplificando, todas as arestas ligam os dois
subconjuntos V1 e V2.
0 0
4 1 1
2
3 2 4
3 22
Grafo Completo

● Um grafo completo é um grafo não direcionado


no qual todos os pares de vértices são adjacentes:
● Possui arestas ligando todos os vértices entre si.
● Como o grafo direcionado pode ter no máximo |V|²
arestas então o grafo completo possui:
● (|V|² - |V|)/2 = |V|(|V| - 1)/2 arestas:
– Do total de |V|² pares possíveis de vértices devemos
subtrair os self-loops e dividir por 2 já que cada aresta
ligando dois vértices é contada duas vezes no gráfico
direcionado.

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

● Uma árvore livre, como na figura A, é um grafo não


direcionado, acíclico e conectado:
● É comum omitir o adjetivo “livre” quando dizemos que um grafo é
uma árvore.
● Caso o grafo seja acíclico mas não conexo, ele é dito uma
floresta, como na figura B:
● Uma floresta também é definida como uma união disjunta de árvores.
● Toda árvore é um grafo, mas nem todo grafo é uma árvore.
0 1 5 9 0 2
6 1 6 7
3 2 7
3 8
4
9 4 5 9
10 28
A B
Á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

● Uma árvore do tipo T (tree) é constituída de:


● Uma estrutura vazia; ou
● Um elemento; ou
● Um nó do tipo T chamado raiz com um número finito de
árvores do tipo T associadas, chamadas de subárvores
da raiz.
A

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

● Grau de uma árvore: É o máximo grau de seus


nós. A árvore do exemplo tem grau 3.
● Árvore binária: É uma árvore ordenada de grau
2.
36
Árvores Binárias

● Uma árvore binária é uma estrutura de dados:


● Vazia; ou
● Contendo um nó chamado raiz mais duas árvores binárias
disjuntas:
– Chamadas subárvore esquerda e subárvore direita.

* Veja como a estrutura de árvore


binária expressa de maneira clara
a precedência das operações, sem
/ + necessidade de usar parêntesis.

+ - e f

a b c d Pode representar a expressão aritmética:


((a + b) /(c − d)) ∗ (e + f ) 37
Percurso em Árvores Binárias
Pré-Ordem
● No percurso pré-ordem percorre-se (R, E, D):
● Raiz;
● Sub-árvore esquerda, em pré-ordem; e
● Sub-árvore direita, em pré-ordem.

2 6

1 3 5 7

● Ordem de percurso do exemplo: 4 2 1 3 6 5 7


38
Percurso em Árvores Binárias
In-Ordem
● No percurso in-ordem percorre-se (E, R, D):
● Sub-árvore esquerda, in-ordem;
● Raiz; e
● Sub-árvore direita, em in-ordem.

2 6

1 3 5 7

● Ordem de percurso do exemplo: 1 2 3 4 5 6 7


39
Percurso em Árvores Binárias
Pós-Ordem
● No percurso pós-ordem percorre-se (E, D, R):
● Sub-árvore esquerda, em pós-ordem;
● Sub-árvore direita, em pós-ordem; e
● Raiz.

2 6

1 3 5 7

● Ordem de percurso do exemplo: 1 3 2 5 7 6 4


40
Percurso em Árvores Binárias
Percurso em Nível
● No percurso em nível percorre-se a árvore de
cima para baixo e da esquerda para a direita.
4

2 6

1 3 5 7

● Ordem de percurso do exemplo: 4 2 6 1 3 5 7

41

Anda mungkin juga menyukai