SIN5013 Análise de Algoritmos e Estruturas de Dados - Grafos€¦ · Grafos – Conceitos Básicos...

Post on 21-Sep-2020

5 views 0 download

Transcript of SIN5013 Análise de Algoritmos e Estruturas de Dados - Grafos€¦ · Grafos – Conceitos Básicos...

SIN5013Análise de Algoritmos e Estruturas de

Dados

Grafos

Prof. Luciano Antonio Digiampietri(baseado no material do prof. Norton Trevisan Roman)

Grafos – Conceitos Básicos

O que é um grafo?

Grafos são estruturas matemáticas (ou modelos matemáticos)que permitem codificar relacionamentos entre pares de objetos

Os objetos são os vértices do grafoOs relacionamentos são suas arestas

Grafos – Conceitos Básicos

O que é um grafo?

Grafos são estruturas matemáticas (ou modelos matemáticos)que permitem codificar relacionamentos entre pares de objetos

Os objetos são os vértices do grafoOs relacionamentos são suas arestas

Grafos – Conceitos Básicos

São representados comoum conjunto de nós(vértices) conectados par apar por linhas (arestas)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Podem ser utilizados pararepresentar uma infinidade desituações/problemas

Podem modelar conexões emredes sociaisLabirintosRotas de metrô

Grafos – Conceitos Básicos

Podem ser utilizados pararepresentar uma infinidade desituações/problemasPodem modelar conexões emredes sociais

LabirintosRotas de metrô

©1

©2

©3

©4

©5

Grafos – Conceitos Básicos

Podem ser utilizados pararepresentar uma infinidade desituações/problemasPodem modelar conexões emredes sociaisLabirintos

Rotas de metrô

Grafos – Conceitos Básicos

Podem ser utilizados pararepresentar uma infinidade desituações/problemasPodem modelar conexões emredes sociaisLabirintosRotas de metrô

Grafos – Conceitos Básicos

Alguns grafos são dirigidos (oudirecionados)

As relações representadaspelas arestas têm sentidodefinidoAs arestas só podem serseguidas em uma única direção

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Em grafos dirigidos, as arestassão pares ordenados de vértices

Saindo de um em direção aooutroMesmo que ambos sejam omesmo vértice (auto-laços -self-loop)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Outros são não dirigidos (ou nãodirecionados)

As relações representadaspelas arestas não têm sentidodefinidoAs arestas podem ser seguidasem qualquer direção

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Podemos pensar num grafo nãodirigido como um grafo dirigidocom arestas de sentido duploAs arestas são pares nãoordenados de vérticesSelf-loops não são permitidos

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Podemos pensar num grafo nãodirigido como um grafo dirigidocom arestas de sentido duploAs arestas são pares nãoordenados de vérticesSelf-loops não são permitidos

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Se (u, v) é uma aresta no grafo,então dizemos que v é adjacentea u

Alternativamente, que v évizinho de u

(u, v) significa que a aresta sai deu e entra em v

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Em grafos não dirigidos, a relaçãode adjacência é simétrica(u, v)⇔ (v , u)

Já em dirigidos, nãonecessariamente há tal simetria

Há (v1, v2), mas não (v2, v1)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Em grafos não dirigidos, a relaçãode adjacência é simétrica(u, v)⇔ (v , u)

Já em dirigidos, nãonecessariamente há tal simetria

Há (v1, v2), mas não (v2, v1)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Em grafos não dirigidos, o graude um vértice é o número dearestas que incidem nele

gr(v1) = gr(v2) = gr(v5) = 2gr(v3) = 3gr(v4) = 1

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Em grafos não dirigidos, o graude um vértice é o número dearestas que incidem nele

gr(v1) = gr(v2) = gr(v5) = 2gr(v3) = 3gr(v4) = 1

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Já em grafos dirigidos, o grau deum vértice é o número de arestasque saem do vértice mais onúmero de arestas que chegamnele

gr(v1) = gr(v2) = gr(v5) = 2gr(v3) = gr(v4) = 3

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Já em grafos dirigidos, o grau deum vértice é o número de arestasque saem do vértice mais onúmero de arestas que chegamnele

gr(v1) = gr(v2) = gr(v5) = 2gr(v3) = gr(v4) = 3

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

No caso de grafos dirigidos, hádois tipos de graus de vértice:

Grau de saída: número dearestas que saem do vérticeGrau de entrada: número dearestas que chegam no vértice

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

No caso de grafos dirigidos, hádois tipos de graus de vértice:

Grau de saída: número dearestas que saem do vérticeGrau de entrada: número dearestas que chegam no vértice

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um caminho de um vértice x aum vértice y é uma sequência devértices em que, para cadavértice, do primeiro ao penúltimo,há uma aresta ligando essevértice ao próximo na sequência.

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

No caso ao lado, alguns caminhossão:

(v1, v2, v3, v5)(v4, v5)(v1, v2, v3)(v4, v4, v5)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

No caso ao lado, alguns caminhossão:(v1, v2, v3, v5)(v4, v5)(v1, v2, v3)(v4, v4, v5)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

O comprimento de um caminho éo número de arestas nele

compr(v1, v2, v3, v5) = 3compr(v4, v5) = 1compr(v1, v2, v3) = 2compr(v4, v4, v5) = 2

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

O comprimento de um caminho éo número de arestas nele

compr(v1, v2, v3, v5) = 3compr(v4, v5) = 1compr(v1, v2, v3) = 2compr(v4, v4, v5) = 2

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um ciclo acontece quando, apartir de um determinado vértice,pudermos percorrer algumcaminho que nos leve a essemesmo vértice

Em grafos dirigidos, o caminhodeve conter pelo menos umaaresta

v1

v2

v3

v4

v5

tamanho 3

tamanho 1

Grafos – Conceitos Básicos

Em grafos não dirigidos, um ciclodeve conter pelo menos 3 arestasGrafos em que há ao menos umciclo são chamados de cíclicosGrafos em que não há ciclos sãochamados de acíclicos

v1

v2

v3

v4

v5

tamanho 3

Grafos – Conceitos Básicos

Um grafo não direcionado éconexo (ou conectado) se cadapar de vértices nele estiverconectado por um caminho

O grafo ao lado é conexoAgora é desconexoE continua assim

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo não direcionado éconexo (ou conectado) se cadapar de vértices nele estiverconectado por um caminho

O grafo ao lado é conexo

Agora é desconexoE continua assim

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo não direcionado éconexo (ou conectado) se cadapar de vértices nele estiverconectado por um caminho

O grafo ao lado é conexoAgora é desconexo

E continua assim

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo não direcionado éconexo (ou conectado) se cadapar de vértices nele estiverconectado por um caminho

O grafo ao lado é conexoAgora é desconexoE continua assim

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo dirigido é fortementeconexo se existir um caminhoentre qualquer par de vértices nografo

Contém um caminho direto de upara v e um caminho direto vpara u para cada par devértices (u, v)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo dirigido é conexo sepossuir um caminho de u para v ,ou um caminho de v para u, paracada par de vértices (u, v)

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Um grafo dirigido é fracamenteconexo se a substituição de todasas suas arestas por arestasnão-direcionadas produz umgrafo conexo.

Ex: não há caminho de v4 → v3

nem de v3 → v4

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Grafos também podem serponderados

Caso em que possuem pesosassociados às suas arestasEsses pesos podem representarcustos, distâncias etc.

v1

v2

v3

v4

v5

Grafos – Conceitos Básicos

Grafos também podem serponderados

Caso em que possuem pesosassociados às suas arestasEsses pesos podem representarcustos, distâncias etc.

v1

v2

v3

v4

v5

12

-2

4

40

8

Grafos – Conceitos Básicos

Por fim, temos um tipo jáconhecido de grafo...

A árvore

Grafo acíclicoConexoNão-dirigido

Grafos – Conceitos Básicos

Por fim, temos um tipo jáconhecido de grafo...A árvore

Grafo acíclicoConexoNão-dirigido

v1 v2

v3

v4

v5

v6

Grafos – Representação

Como podemos representar um grafo?

Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

Grafos – Representação

Como podemos representar um grafo?Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

Grafos – Representação

Como podemos representar um grafo?Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

v1

v2

v3

v4

v5

Não dirigido

Grafos – Representação

Como podemos representar um grafo?Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

v1

v2

v3

v4

v5

Não dirigido

Nó Conectado av1 v2, v3

v2 v1, v3, v4

v3 v1, v2, v5

v4 v2, v5

v5 v3, v4

Grafos – Representação

Como podemos representar um grafo?Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

v1

v2

v3

v4

v5

Dirigido

Grafos – Representação

Como podemos representar um grafo?Como um mapeamento de cada nó à lista de nós aos quaisele está conectado

v1

v2

v3

v4

v5

Dirigido

Nó Conectado av1 v2

v2 v3

v3 v1, v5

v4 v2, v4

v5 v4

Grafos – Representação

Representação computacional de grafos

Existem duas maneiras usuais de representar grafos:

Matrizes de adjacênciaListas de adjacência

Grafos – Representação

Representação computacional de grafosExistem duas maneiras usuais de representar grafos:

Matrizes de adjacênciaListas de adjacência

Grafos – Matrizes de Adjacências

Uma matriz de adjacências A de um grafo com n vértices éuma matriz n × n de bits, em que:

A[i, j] = 1 se houver uma aresta indo do vértice i para ovértice j no grafo.A[i, j] = 0 se não houver aresta indo de i para j

Grafos – Matrizes de Adjacências

Uma matriz de adjacências A de um grafo com n vértices éuma matriz n × n de bits, em que:

A[i, j] = 1 se houver uma aresta indo do vértice i para ovértice j no grafo.A[i, j] = 0 se não houver aresta indo de i para j

Grafos – Matrizes de Adjacências

v1

v2

v3

v4

v5

v1 v2 v3 v4 v5

v1 0 1 1 0 0v2 1 0 1 1 0v3 1 1 0 0 1v4 0 1 0 0 1v5 0 0 1 1 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado?

Não usamos bits.

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado?

Não usamos bits.

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado? Não usamos bits.

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado? Não usamos bits.

Cuidado!

Como diferenciar não arestade um valor válido (como0)?Deve-se definir um padrão

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado? Não usamos bits.

Cuidado!Como diferenciar não arestade um valor válido (como0)?

Deve-se definir um padrão

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for ponderado? Não usamos bits.

Cuidado!Como diferenciar não arestade um valor válido (como0)?Deve-se definir um padrão

v1 v2 v3 v4 v5

v1 0 2 12 0 0v2 2 0 4 3 0v3 12 4 0 0 40v4 0 3 0 0 8v5 0 0 40 8 0

Grafos – Matrizes de Adjacências

E se o grafo for dirigido?

v1 v2 v3 v4 v5

v1 0 2 0 0 0v2 0 0 4 0 0v3 12 0 0 0 40v4 0 3 0 0 0v5 0 0 0 8 0

Grafos – Matrizes de Adjacências

E se o grafo for dirigido?

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1 v2 v3 v4 v5

v1 0 2 0 0 0v2 0 0 4 0 0v3 12 0 0 0 40v4 0 3 0 0 0v5 0 0 0 8 0

Grafos – Matrizes de Adjacências

E se o grafo for dirigido?

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1 v2 v3 v4 v5

v1 0 2 0 0 0v2 0 0 4 0 0v3 12 0 0 0 40v4 0 3 0 0 0v5 0 0 0 8 0

Grafos – Listas de Adjacências

A segunda maneira de representar um grafo é por meio deuma lista de adjacências

Grafos – Listas de Adjacências

A segunda maneira de representar um grafo é por meio deuma lista de adjacências

v1

v2

v3

v4

v5

Não dirigido

Grafos – Listas de Adjacências

A segunda maneira de representar um grafo é por meio deuma lista de adjacências

v1

v2

v3

v4

v5

Não dirigido

Nó Conectado av1 v2, v3

v2 v1, v3, v4

v3 v1, v2, v5

v4 v2, v5

v5 v3, v4

Grafos – Listas de Adjacências

A segunda maneira de representar um grafo é por meio deuma lista de adjacências

v1

v2

v3

v4

v5

Dirigido

Grafos – Listas de Adjacências

A segunda maneira de representar um grafo é por meio deuma lista de adjacências

v1

v2

v3

v4

v5

Dirigido

Nó Conectado av1 v2

v2 v3

v3 v1, v5

v4 v2, v4

v5 v4

Grafos – Listas de Adjacências

Uma lista de adjacências de um grafo com n vérticesconsiste de um arranjo de n listas ligadas, uma para cadavértice no grafo.

Para cada vértice u, a lista contém todos os vizinhos de uOu seja, todos os vértices vi para os quais existe uma aresta(u, vi)

Grafos – Listas de Adjacências

Uma lista de adjacências de um grafo com n vérticesconsiste de um arranjo de n listas ligadas, uma para cadavértice no grafo.

Para cada vértice u, a lista contém todos os vizinhos de uOu seja, todos os vértices vi para os quais existe uma aresta(u, vi)

Grafos – Listas de Adjacências

v1

v2

v3

v4

v5

v1

v2

v3

v4

v5

v2 v3

v1 v3 v4

v1 v2 v5

v2 v5

v3 v4

Grafos – Listas de Adjacências

E se o grafo for ponderado?

Armazenamos os pesos nas lista.

Grafos – Listas de Adjacências

E se o grafo for ponderado?

Armazenamos os pesos nas lista.

v1

v2

v3

v4

v5

12

2

4

40

8

3

Grafos – Listas de Adjacências

E se o grafo for ponderado? Armazenamos os pesos nas lista.

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1

v2

v3

v4

v5

v2, 2 v3, 12

v1, 2 v3, 4 v4, 3

v1, 12 v2, 4 v5, 40

v2, 3 v5, 8

v3, 40 v4, 8

Grafos – Listas de Adjacências

E se o grafo for dirigido?

Grafos – Listas de Adjacências

E se o grafo for dirigido?

v1

v2

v3

v4

v5

12

2

4

40

8

3

Grafos – Listas de Adjacências

E se o grafo for dirigido?

v1

v2

v3

v4

v5

12

2

4

40

8

3

v1

v2

v3

v4

v5

v2, 2

v3, 4

v1, 12 v5, 40

v2, 3

v4, 8

Grafos – Representação

E quando usamos uma ou outra representação?

Vai depender da densidade do grafo

Se denso (quando possui muitas arestas em relação aonúmero de vértices) ou esparso (com poucas arestas)

Vai depender das operações que queremos executar

Grafos – Representação

E quando usamos uma ou outra representação?Vai depender da densidade do grafo

Se denso (quando possui muitas arestas em relação aonúmero de vértices) ou esparso (com poucas arestas)

Vai depender das operações que queremos executar

SIN5013Análise de Algoritmos e Estruturas de

Dados

Grafos

Prof. Luciano Antonio Digiampietri(baseado no material do prof. Norton Trevisan Roman)