• Nenhum resultado encontrado

09-GrafosII-AED-UFRPE-pbcm

N/A
N/A
Protected

Academic year: 2021

Share "09-GrafosII-AED-UFRPE-pbcm"

Copied!
55
0
0

Texto

(1)

Algoritmos e Estruturas de Dados

Prof. Péricles Miranda

{periclesmiranda@gmail.com}

Árvore de Crescimento Mínimo e

Busca por Menor Caminho

(2)

Conteúdo

Árvore de Crescimento Mínimo

(3)
(4)

Introdução

 A modelagem de circuitos eletrônicos frequentemente precisa

fazer os pinos de muitos componentes equivalentes

eletronicamente, conectando-os juntos.

Para interconectar um conjunto de n pinos, podemos usar um

arranjo de n - 1 fios, cada um conectando dois pinos.

 De todos os arranjos possíveis, usamos aquele que fizer uso da

(5)

Introdução

Podemos modelar o problema do posicionamento de

elementos em um circuito através de um grafo G(V, E)

conectado e não-direcionado.

Para o grafo acima, temos que V é o conjunto de pinos, E é o

conjunto de possíveis interconexões entre dois pares de pinos

e cada aresta (𝑢, 𝑣) ∈ 𝐸 possui um custo de conexão (peso)

associado 𝑤(𝑢, 𝑣) ∈ 𝐸.

(6)

Introdução

O objetivo é então encontrar um subconjunto acíclico

𝑇 ⊆ 𝐸

que conecte todos os vértices e que o peso total

𝑤 𝑇 =

(𝑢,𝑣)∈𝑇

𝑤(𝑢, 𝑣)

(7)

Introdução

Dado que T é acíclico e conecta todos os vértices, o

mesmo pode ser representado como uma árvore, sendo

essa árvore chamada de árvore de crescimento.

O problema de determinar a árvore T é conhecido como

(8)

Exemplo

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(9)

Árvore de Crescimento Mínimo

Suponha que temos um grafo G = (V, E), conectado,

não-direcionado e ponderado através de uma função

𝑤: 𝐸 → ℝ

e desejamos encontrar uma árvore de

crescimento mínimo para G.

Usando uma abordagem gulosa genérica, podemos fazer

com que a árvore de crescimento mínimo seja montada a

partir de uma aresta (u, v) por vez.

(10)

Árvore de Crescimento Mínimo

 A regra que será adota é:

No início de cada iteração do algoritmo, A é um subconjunto de

uma árvore de crescimento mínimo.

A cada etapa, determinamos uma aresta (u, v) para adicionarmos à

A de forma que a regra acima não seja violada.

 Essa aresta é chamada de aresta segura pelo fato de que podemos

adicioná-la à A sem que A deixe de ser subconjunto de uma árvore de crescimento mínimo.

(11)

Árvore de Crescimento Mínimo

procedimento MST_generica(G, w)

𝐴 ← ∅

;

enquanto A não formar uma MST faça

Encontre uma aresta segura (u, v) para A;

𝐴 ← 𝐴 ∪ {(𝑢, 𝑣)}

;

Retorne A;

(12)

Algoritmo Kruskal

No algoritmo de Kruskal, uma aresta segura é encontrada

para ser adicionada à floresta em crescimento.

Essa aresta (u, v) é encontrada como a aresta de menor peso

dentre todas as arestas possíveis que conectam duas florestas

em G.

O algoritmo de Kruskal faz uso da estrutura de conjuntos

disjuntos, sendo cada vértice considerado inicialmente como

pertencente ao seu próprio conjunto.

(13)

Algoritmo Kruskal

procedimento Kruskal(G, w)

𝐴 ← ∅

;

para cada vértice 𝑣 ∈ 𝐺. 𝑉 faça

MAKE-SET(v);

Ordene G.E em ordem crescente de peso;

para cada aresta (𝑢, 𝑣) ∈ 𝐺. 𝐸 após a ordenação faça

se FIND-SET(u) ≠ FIND-SET(v) então

𝐴 ← 𝐴 ∪ {(𝑢, 𝑣)}

;

UNION(u, v)

Retorne A;

fim_Kruskal

(14)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(15)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(16)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(17)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(18)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(19)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(20)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(21)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(22)

Exemplo - Kruskal

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(23)

Algoritmo Kruskal

 Complexidade do algoritmo Kruskal:

Inicialização – O(|V|)

Ordenação das arestas – O(|E| log|E|)

Operações sobre os conjuntos disjuntos – O(|E| log|E|)

(24)

Algoritmo Prim

 Uma das principais diferenças entre o algoritmo Prim e o Kruskal

é o fato de que no algoritmo Prim as arestas em A sempre formarão uma única árvore.

 O algoritmo Prim começa sua execução a partir de um vértice

arbitrário em G.V, sendo o crescimento em cada etapa representado pela inclusão em A de uma aresta leve que conecta A a um vértice isolado.

(25)

Algoritmo Prim

Uma representação para o algoritmo Prim leva em

consideração que todos os vértices ainda não pertencem à

árvore se encontram em uma lista de menor prioridade Q

baseada no atributo chave.

Para cada vértice v, o atributo v.chave é o peso mínimo das

arestas que conectam v à árvore.

Se não houver conexão entre v e algum vértice na árvore,

(26)

Algoritmo Prim

procedimento MST_Prim(G, w, r)

para cada 𝑢 ∈ 𝐺. 𝑉 faça

𝑢. 𝑐ℎ𝑎𝑣𝑒 ← ∞; 𝑢. 𝑝𝑎𝑖 ← 𝑁𝐼𝐿; 𝑟. 𝑐ℎ𝑎𝑣𝑒 ← 0; 𝑄 ← 𝐺. 𝑉;

enquanto Q ≠ NIL faça

𝑢 ← 𝑅𝑒𝑡𝑖𝑟𝑎𝑟_𝑀𝑖𝑛(𝑄);

para cada 𝑣 ∈ 𝐺. 𝑉𝑖𝑧𝑖𝑛ℎ𝑎𝑛𝑐𝑎[𝑢] faça se 𝑣 ∈ 𝑄 e 𝑤 𝑢, 𝑣 < 𝑣. 𝑐ℎ𝑎𝑣𝑒 então

𝑣. 𝑝𝑎𝑖 ← 𝑢;

𝑣. 𝑐ℎ𝑎𝑣𝑒 ← 𝑤(𝑢, 𝑣);

(27)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(28)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(29)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(30)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(31)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(32)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(33)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(34)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(35)

Exemplo - Prim

A B H C I G D E F 4 8 11 7 8 7 1 2 2 6 4 14 9 10

(36)

Algoritmo Prim

Complexidade do algoritmo Prim (considerando uma

implementação com Heap):

Construção do heap - O(|E|)

Loop - O(|V| log|E| + |E| log|E|)

= O (|E| log|E|)

(37)
(38)

Busca por Menor Caminho

Um caminho C num grafo G é mínimo se não existe

outro caminho com mesma origem e mesmo

término que C, mas comprimento menor que o de C.

A distância de um vértice s a um vértice t em um

grafo G é o comprimento de um caminho mínimo de

s a t. Se não existe caminho algum de s a t, a distância

(39)

Busca por Menor Caminho

A distância de s a t é d, se, e somente se:

Existe um caminho de comprimento d de s a t;

Nenhum caminho de s a t tem comprimento menor que d.

Em geral, em um grafo direcionado, a distância de um vértice s a

um vértice t é diferente da distância de t a s. Se o grafo é não-direcionado, entretanto, as duas distâncias são iguais.

(40)

Busca por Menor Caminho

Para a busca de caminhos mínimos em grafos há

algoritmos específicos que executam a tarefa.

Entretanto há formas específicas para tratar o problema,

sendo diferentes quando busca-se caminhos mínimos a

partir de um dado vértice ou quando se buscam os

caminhos mínimos entre todos os pares de vértices.

(41)

Busca por Menor Caminho

Problema dos Caminhos Mínimos com Origem Fixa: Dado um vértice s

de um grafo com custos nos arcos, encontrar, para cada vértice t que pode ser alcançado a partir de s, um caminho mínimo simples de s a t.

 Todos os algoritmos para esses problemas exploram a seguinte

propriedade básica:

Propriedade Triangular: Para quaisquer vértices x, y e z de um grafo

com custos não-negativos nos arcos, tem-se: d(x, z) ≤ d(x, y)+d(y, z) sendo d(i, j) a distância de i a j.

(42)

Busca por Menor Caminho

Um algoritmo eficiente para a obtenção do caminho

mínimo em grafos com custos não-negativos é o

chamado algoritmo de Dijkstra.

O algoritmo pode ser usado, em particular, para

encontrar um caminho de custo mínimo de um dado

vértice a outro, ou a todos os outros vértices.

(43)

Busca por Menor Caminho

1. Atribui-se uma distância infinita para todos os pares de vértices, exceto o vértice origem.

2. Marque todos os vértices como não visitados e defina o vértice inicial como vértice corrente.

3. Para este vértice corrente, considere todos os seus vértices vizinhos não visitados e calcule a

distância a partir do vértice. Se a distância for menor do que a definida anteriormente, substitua a distância.

4. Quando todos os vizinhos do vértice corrente forem visitados, marque-o como visitado, o que

fará com que ele não seja mais analisado (sua distância é mínima e final).

5. Eleja o vértice não visitado com a menor distância (a partir do vértice inicial) como o vértice

(44)

Busca por Menor Caminho

procedimento init_fonte_unica(G, s)

para cada vértice 𝑣 ∈ 𝐺. 𝑉 faça

𝑣. 𝑑 ← ∞; 𝑣. 𝑝𝑎𝑖 ← 𝑁𝐼𝐿; 𝑠. 𝑑 ← 0; procedimento relaxamento_no(u, v, w) se v.d > u.d+w(u, v) então 𝑣. 𝑑 ← 𝑢. 𝑑 + 𝑤(𝑢, 𝑣); 𝑣. 𝑝𝑎𝑖 ← 𝑢;

(45)

Busca por Menor Caminho

procedimento Dijkstra(G, s)

procedimento init_fonte_unica(G, s) 𝑆 ← ∅; 𝑄 ← 𝐺. 𝑉; enquanto Q ≠ Ø faça 𝑢 ← 𝑅𝑒𝑡𝑖𝑟𝑎𝑟_𝑀𝑖𝑛(𝑄); 𝑆 ← 𝑆 ∪ {𝑢};

para cada 𝑣 ∈ 𝐺. 𝑉𝑖𝑧𝑖𝑛ℎ𝑎𝑛𝑐𝑎[𝑢] faça

relaxamento_no(u, v, w); fim_Dijkstra

(46)

Exemplo - Dijkstra

0 s 10 1 5 2 3 2 6 4 9 7

(47)

Exemplo - Dijkstra

0 10 5 s 10 1 5 2 3 2 6 4 9 7

(48)

Exemplo - Dijkstra

0 8 5 14 7 s 10 1 5 2 3 2 6 4 9 7

(49)

Exemplo - Dijkstra

0 8 5 13 7 s 10 1 5 2 3 2 6 4 9 7

(50)

Exemplo - Dijkstra

0 8 5 9 7 s 10 1 5 2 3 2 6 4 9 7

(51)

Exemplo - Dijkstra

0 8 5 9 7 s 10 1 5 2 3 2 6 4 9 7

(52)

Busca por Menor Caminho

 Complexidade do algoritmo de Dijkstra:

Inicialização - O(|V|)

Loop - O((|V| + |E|) log|E|)

Existem |V| deleções do heap (extrair o mínimo)

Existem no máximo |E| atualizações (cada aresta só é analisada

uma vez)

(53)
(54)

Exercícios

1. Dado o grafo abaixo, a partir do nó A, em ordem lexicográfica, apresente os resultados obtidos para o mesmo após cada etapa da aplicação dos seguintes algoritmos.

a. Busca em Kruskal. b. Busca em Prim. c. Dijkstra. A B C D E F G H A 0 0 6 0 12 0 0 11 B 0 0 0 0 11 0 0 0 C 6 0 0 0 4 10 0 0 D 0 0 0 0 10 0 1 9 E 12 11 4 10 0 0 0 3 F 0 0 10 0 0 0 5 5 G 0 0 0 1 0 5 0 0 H 11 0 0 9 3 5 0 0

(55)

Referências

 CORMEN, H. T.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C.

Introduction to Algorithms, 3rd ed., Boston: MIT Press, 2009.

 FEOFILOFF, Paulo. Algoritmos em Linguagem C. Editora

Referências

Documentos relacionados

Para cada par de vértices determinar a fração de caminhos mais curtos que passam através do vértice em questão. Somar esta fração de todos os pares

139 http://www.networkadvertising.org/faq#n167... O que a NAI quer nos fazer acreditar é que as estratégias publicitárias de rastreamento são utilizadas para criar melhorias em

O presente trabalho aborda o papel da monitoria de Cálculo Diferencial e Integral I (Cálculo I) na formação dos graduandos em Licenciatura em Matemática, Agroecologia,

Trabalhos têm demonstrado ainda a importância da estimulação de receptores toll-like 2 e 4 (TLR2 e TLR4), receptores de manose (MR) e dectina-1 de fagócitos, tanto

Pegaram as melhores ovelhas e o melhor gado para oferecer como sacrifício ao Senhor, o Deus de você.. — Eu vou lhe contar o que o Senhor Deus me disse na

Results obtained in this study allow us to infer there are differences in the evaluation of plantar pressure distributions in standing posture between the Baropodometer, SAPO,

Problema dos caminhos mínimos com origem fixa (Sigle-source shortest paths problem): Dado um vértice s de um digrafo com custos não-negativos nos arcos, encontrar, para cada vértice

Este livro foi planejado para ensinar às crianças alguns conceitos sobre o divórcio e para ajudá-las a reconhecer e expressar sentimentos de tristeza pela