Buscar

Estruturas de Dados - Grafos (Guilherme)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estruturas de Dados
Grafos
Guilherme N. Ramos
gnramos@cic.unb.br
Departamento de Cieˆncia da Computac¸a˜o
Universidade de Bras´ılia
gnramos (CIC/UnB) ED - Grafos 1/45
Grafos
Grafo: uma representac¸a˜o de relac¸o˜es (arestas) entre objetos (ve´rtices).
A Arco (aresta): par ordenado de ve´rtices.
V Ve´rtice (no´): estrutura de dados.
Exemplo:
V = {1, 2, 3, 4, 5, 6}
A = {(1, 2), (1, 5), (2, 3), (2, 5),
(3, 4), (4, 5), (4, 6)}
gnramos (CIC/UnB) ED - Grafos 2/45
Grafos
- Um ve´rtice e´ um objeto simples que pode ter nome e outros
atributos.
- Grafos sa˜o estruturas de dados bastantes gene´ricas, englobando
todas as estruturas vistas anteriormente
- Definindo um grafo:
V = {A,B,C,D,E,F}
A = {(A,B), (B,A), (B,C), (B,D), (C,C), (D,A), (D,C), (E,F)}
A
B
C
D
E
F
gnramos (CIC/UnB) ED - Grafos 3/45
Grafos
Aplicac¸o˜es
- No´s sa˜o cidades e arcos sa˜o estradas: os grafos auxiliam a trac¸ar os
caminhos e descobrir o caminho mais curto (ou mais longo) entre
cidades
- No´s sa˜o terminais de dispositivos eletroˆnicos e arcos representam as
conexo˜es entre esses terminais
- No´s sa˜o tarefas em um projeto e arcos representam as dependeˆncias
entre as tarefas
gnramos (CIC/UnB) ED - Grafos 4/45
Conceitos e Definic¸o˜es
Grafo direcionado : as arestas ou arcos sa˜o direcionados, a conexa˜o
(A,B) e´ diferente da conexa˜o (B,A).
Grafo na˜o direcionado : as arestas ou arcos na˜o possuem direc¸a˜o e (A,B)
e´ igual a (B,A).
- Na˜o e´ permitido uma aresta para o mesmo no´ ex:
(C,C).
A
B
C
D A
B
C
D
gnramos (CIC/UnB) ED - Grafos 5/45
Conceitos e Definic¸o˜es
Ve´rtices adjacentes : sa˜o no´s ligados por um arco.
- Adjaceˆncia na˜o e´ sime´trica em grafos direcionados.
Arco incidente : e´ um arco que chega a um ve´rtice.
- arco incidente em D → (B,D)
Grau de v : Na˜o-direcionado: nu´mero de arcos incidentes em v .
Direcionado: soma dos arcos
de entrada : que chegam ao ve´rtice.
de sa´ıda : que saem do ve´rtice.
Caminho : sequeˆncia de arcos levando de um ve´rtice a outro.
- O caminho entre no´ C e no´ A e´ {(C,B), (B,A)}.
A
B
C
D
gnramos (CIC/UnB) ED - Grafos 6/45
Conceitos e Definic¸o˜es
Alcanc¸a´vel : um ve´rtice x e´ alcanc¸a´vel a partir do ve´rtice y se existe
um caminho de y ate´ x .
- D e´ alcanc¸a´vel a partir de A.
Circuito : caminho que leva de um ve´rtice a ele mesmo.
- {(B,D), (D,A), (A,B)}
Lac¸o : circuito de um u´nico arco.
- {(C,C)}
A
B
C
D
gnramos (CIC/UnB) ED - Grafos 7/45
Conceitos e Definic¸o˜es
Grafo ac´ıclico : e´ um grafo que na˜o possui circuito
Subgrafo : grafo formando por um subconjunto de ve´rtices de outro
grafo, contendo todos os arcos cujas extremidades sa˜o os
ve´rtices neste subconjunto
Grafo parcial : conte´m todos os no´s de outro grafo mas apenas um
subconjunto de seus arcos
Subgrafo
A
B
D
Grafo parcial
A
B
C
D
gnramos (CIC/UnB) ED - Grafos 8/45
Conceitos e Definic¸o˜es
Grafo Conexo : grafo que possui pelo menos um no´ a partir de qual
existem caminhos para todos os outros no´s.
Grafo Fortemente Conexo : para todos os no´s existem caminhos a partir
de todos os outros no´s
Grafo valorado ou ponderado : os arcos possuem valores ou pesos
associados
A
B
C
D
0.10.3
0.4
0.2
0.7
0.5
0.8
1
gnramos (CIC/UnB) ED - Grafos 9/45
Implementac¸a˜o
Matriz de Adjaceˆncia
- Cada posic¸a˜o na matriz e´ um arco:
- linha indica o no´ de sa´ıda do arco
- coluna indica o no´ de chegada
- Valor da posic¸a˜o indica:
- a existeˆncia ou na˜o do arco
- o peso associado ao arco
- Deve ser utilizada para grafos densos, onde o nu´mero de arcos |A| e´
pro´ximo do nu´mero de ve´rtices ao quadrado |V |2
- Complexidade de espac¸o O(V 2)
- O tempo necessa´rio para acessar um elemento e´ constante.
- Ler ou examinar a matriz tem complexidade de tempo O(V 2)
gnramos (CIC/UnB) ED - Grafos 10/45
Implementac¸a˜o
Matriz de Adjaceˆncia
gnramos (CIC/UnB) ED - Grafos 11/45
Implementac¸a˜o
Lista de Adjaceˆncia
- Os ve´rtices de uma lista de adjaceˆncia sa˜o em geral armazenados em
uma ordem arbitra´ria.
- Possui uma complexidade de espac¸o O(|V |+ |A|)
- Indicada para grafos esparsos, onde |A| e´ muito menor do que |V |2 .
- e´ compacta e usualmente utilizada na maioria das aplicac¸o˜es.
- Tempo O(|V |) para determinar se existe uma aresta entre o ve´rtice i
e o ve´rtice j , pois podem existir O(|V |)ve´rtices na lista de
adjacentes do ve´rtice i .
Ve´rtice
typedef struct v node t {
char cidade [20];
a node t ∗aresta ;
struct v node t ∗prox;
} v node t ;
Aresta
typedef struct a node t {
double peso;
struct v node t ∗ vertice ;
struct a node t ∗prox;
} a node t;
gnramos (CIC/UnB) ED - Grafos 12/45
Implementac¸a˜o
Lista de Adjaceˆncia
A
B
C
D
0.10.3
0.4
0.2
0.7
0.5
0.8
1
A
B
C
D
0.3
−→
B
0.4
−→
A 0.2
−→
C 0.7
−→
D
0.5
−→
C 0.1
−→
D
0.8
−→
A 1
−→
C
gnramos (CIC/UnB) ED - Grafos 13/45
Busca
Busca em Profundidade
- e´ um algoritmo para caminhar no grafo.
- A estrate´gia e´ buscar o mais profundo no grafo sempre que poss´ıvel.
- Os arcos sa˜o exploradas a partir do ve´rtice v mais recentemente
descoberto que ainda possui arestas na˜o exploradas saindo dele.
- Quando todas as arestas adjacentes a v tiverem sido exploradas a
busca anda para tra´s para explorar ve´rtices que saem do ve´rtice do
qual v foi descoberto.
gnramos (CIC/UnB) ED - Grafos 14/45
Busca
Busca em Profundidade - Algoritmo
Enquanto a pilha na˜o esta´ vazia fac¸a:
1 Seja v o ve´rtice no topo da pilha e AV seus arcos.
2 Se AV 6= ∅, enta˜o retire um arco (v ,w) de AV :
- Se w na˜o esta´ marcado
(i) Enta˜o enta˜o marque w
(ii) Coloque w na lista de arcos visitados
3 Sena˜o, retire v do topo da pilha.
void b prof(v node t ∗v, a node t∗∗ptr arestas) {
processa(v);
int i ;
for( i = 0; i < NUM VIZINHOS; ++i) {
v node t ∗w = vizinho(v, i) ;
if (!processado(w)) {
b prof(w, ptr arestas ) ;
insere( ptr arestas , aresta(v,w));
}
}
}
gnramos (CIC/UnB) ED - Grafos 15/45
Busca
Busca em Largura (em Extensa˜o)
- Expande a fronteira entre ve´rtices descobertos e na˜o descobertos
uniformemente atrave´s da largura da fronteira.
- O algoritmo descobre todos os ve´rtices a uma distaˆncia k do ve´rtice
origem antes de descobrir qualquer ve´rtice a uma distaˆncia k + 1.
- O grafo G (V ,A) pode ser direcionado ou na˜o direcionado.
gnramos (CIC/UnB) ED - Grafos 16/45
Busca
Busca em Largura (em Extensa˜o) - Algoritmo
1 Coloca o no´ raiz na fila.
2 Retira um no´ do in´ıcio da fila e o examina.
3 Se o elemento procurado esta´ nesse no´, interrompe a busca e
retorna o resultado.
4 Sena˜o, coloca todos os sucessores desse no´, ainda na˜o examinados,
no final da lista.
5 Se a fila esta´ vazia, cada no´ no grafo ja´ foi examinado
- interrompe a busca e retorna “na˜o encontrado”.
6 Repete passo 2.
gnramos (CIC/UnB) ED - Grafos 17/45
Busca
Ana´lise de Complexidade
- Complexidade temporal de ambos os algoritmos de busca e´
O(|V |·|A|).
- Complexidade espacial da busca em profundidade e´ O(h), onde h e´
o comprimento do mais longo caminho no grafo.
- Complexidade espacial da busca em largura e´ O(|V |·|A|)
gnramos (CIC/UnB) ED - Grafos 18/45
Busca
Busca Profundidade x Largura
- A busca em largura e´ completa apenas se a a´rvore pesquisada tem
um nu´mero finito de ramos.
- A busca em largura e´ o´tima se o custo dos passos forem ideˆnticos -
o algoritmo encontrara´ a soluc¸a˜o mais “rasa” de uma a´rvore de
busca, na˜o necessariamente a melhor. No caso em que os passos
possuem custos diferentes, a soluc¸a˜o mais “rasa” na˜o e´
necessariamente a melhor.
- A busca em profundidade e´ aplicadaem va´rios algoritmos de
ordenac¸a˜o em grafos como:
- Ordenamento topolo´gico.
- Encontrar componentes fortemente conectados.
gnramos (CIC/UnB) ED - Grafos 19/45
Busca
Exemplo: Missiona´rios e Canibais
3 missionarios e 3 canibais esta˜o em um lado de um rio, e ha´ uma canoa
onde cabem ata´ 2 pessoas. Como levar todos ao outro lado do rio sem
que os canibais fiquem em maior nu´mero que os missiona´rios em uma
margem?
Supondo a representac¸a˜o:
cMargemEsquerda/MargemDireita
gnramos (CIC/UnB) ED - Grafos 20/45
Busca
Exemplo: Missiona´rios e Canibais
c3,3/0,0
3,1/0,2c
2,2/1,1c
1,3/2,0c
c3,2/0,1
c2,3/1,0
3,0/0,3c
2,1/1,2c
1,2/2,1c
c3,1/0,2
c2,2/1,1
1,1/2,2c
2,0/1,3c
0,2/3,1c
c2,1/1,2
c1,2/2,1
1,0/2,3c
0,1/3,2c
c0,2/3,1
c1,1/2,2
0,0/3,3c
c2,0/1,3
gnramos (CIC/UnB) ED - Grafos 21/45
Ordenamento Topolo´gico
- Ordenac¸a˜o linear de todos os ve´rtices, tal que se G conte´m uma
aresta (u, v) enta˜o u aparece antes de v .
- Pode ser vista como uma ordenac¸a˜o de seus ve´rtices ao longo de
uma linha horizontal de tal forma que todas as arestas esta˜o
direcionadas da esquerda para a direita.
- Pode ser usado sempre que o problema abordado envolve uma
ordem parcial.
- Um grafo pode ter va´rios ordenamentos topolo´gicos poss´ıveis.
gnramos (CIC/UnB) ED - Grafos 22/45
Ordenamento Topolo´gico
7
11
5
2
8
3
9 10
1 7, 5, 3, 11, 8, 2, 9, 10
2 3, 5, 7, 8, 11, 2, 9, 10
3 3, 7, 8, 5, 11, 10, 2, 9
4 5, 7, 3, 8, 11, 10, 9, 2
5 7, 5, 11, 3, 10, 8, 9, 2
6 7, 5, 11, 2, 3, 8, 9, 10
3 7 8 5 11 10 2 9
gnramos (CIC/UnB) ED - Grafos 23/45
Ordenamento Topolo´gico
Algoritmo para Ordenamento Topolo´gico:
- Adaptac¸a˜o da busca em profundidade.
- Durante a busca em profundidade, a cada ve´rtice completo, insere
na frente de uma lista encadeada.
void ord top(v node t ∗v, v node t∗∗ptr vertices) {
processa(v);
int i ;
for( i = 0; i < NUM VIZINHOS; ++i) {
v node t ∗w = vizinho(v, i) ;
if (!processado(w)) {
ord top(w, ptr vertices ) ;
insere( ptr vertices , w);
}
}
}
gnramos (CIC/UnB) ED - Grafos 24/45
Ordenamento Topolo´gico
Aplicac¸a˜o: Escalonamento
Escalonamento
Organizac¸a˜o (distribuic¸a˜o e ordem de execuc¸a˜o) de tarefas nos recursos
dispon´ıveis.
Objetivos:
- Ser justo(evitando o adiamento indefinido).
- Maximizar a produtividade (throughput.
- Ser previs´ıvel.
- Minimizar o tempo de resposta para usua´rios interativos.
- Maximizar o nu´mero poss´ıvel de usua´rio interativos.
- Minimizar a sobrecarga (overhead).
- Balancear o uso de recursos.
- Exibir degradac¸a˜o previs´ıvel e progressiva em situac¸o˜es de intensa
carga de trabalho.
- Etc.
gnramos (CIC/UnB) ED - Grafos 25/45
Ordenamento Topolo´gico
Aplicac¸a˜o: Escalonamento
1 Pegar ovo.
2 Pegar o o´leo.
3 Untar a frigideira.
4 Quebrar o ovo.
5 Esquentar o o´leo.
6 Poˆr o ovo na
frigideira.
7 Esperar o ovo fritar.
8 Retirar o ovo.
1 2 3 4 5 6 7 8
1 4
532
6 7 8
Recurso 1
Recurso 2
Recurso ?
gnramos (CIC/UnB) ED - Grafos 26/45
Exerc´ıcio
Algoritmo para Encontrar Amigos em uma Rede Social
Dada uma rede social representada por um grafo, onde cada aresta
representa uma relac¸a˜o de amizade, elabore um algoritmo que liste
sugesto˜es de prova´veis amigos. Uma pessoa pode ser sugerida a outra se
elas na˜o sa˜o amigas (na rede social) e teˆm pelo menos n amigos em
comum.
1 Suponha o grafo G (V ,A) e um ve´rtice v inicial.
2 Para cada ve´rtice u tal que 6∃(v , u):
2.1 Para cada ve´rtice w 6= v tal que ∃(u,w):
Se 6 ∃(v ,w): incremente contador W (de amigos em comum com v).
2.2 Se contador W > n: adicione w a lista de sugesto˜es.
3 Retorne a lista de sugesto˜es.
gnramos (CIC/UnB) ED - Grafos 27/45
Exerc´ıcio
Algoritmo para Encontrar Amigos em uma Rede Social
A
B
C
D EK
F
G
H
I
J
L
A B C D E F G H I J K L
contador 0 0 0 0 3 0 2 1 1 1 0 0
a) Para n = 3 → {E} b) Para n = 2 → {E ,G}
gnramos (CIC/UnB) ED - Grafos 28/45
Exemplo: Mapas de Mu´sica
http://audiomap.tuneglue.net/
gnramos (CIC/UnB) ED - Grafos 29/45
A´rvore Geradora M´ınima
- Considere um grafo na˜o direcionado e conectado; e que associada a
cada arco ha´ uma distaˆncia na˜o negativa.
- O objetivo e´ encontrar o caminho mais curto de tal maneira que os
arcos fornec¸am um caminho entre todos os pares de no´s.
- O subgrafo conecta todos os ve´rtices e´ uma a´rvore geradora.
- Essa a´rvore e´ uma a´rvore geradora m´ınima se o comprimento total e´
o menor poss´ıvel.
gnramos (CIC/UnB) ED - Grafos 30/45
A´rvore Geradora M´ınima
Propriedades:
- Podem haver va´rias a´rvores geradoras m´ınimas, com o mesmo
comprimento.
- Se cada arco tem um peso diferente, existe uma u´nica a´rvore
geradora m´ınima.
- A a´rvore geradora m´ınima e´ o subgrafo de menor custo conectando
todos os ve´rtices.
Exemplo de aplicac¸a˜o: instalac¸a˜o de fibras o´ticas no campus de uma
faculdade.
- Cada trecho de fibra o´tica entre os pre´dios possui um custo
associado.
- Uma a´rvore de extensa˜o fornece um modo de conectar todos os
pre´dios sem redundaˆncia.
- Uma a´rvore geradora m´ınima desse grafo nos daria uma a´rvore com
o menor custo para fazer essa ligac¸a˜o.
gnramos (CIC/UnB) ED - Grafos 31/45
A´rvore Geradora M´ınima
Algoritmos
1 Algoritmo Gene´rico: a cada passo, adiciona-se uma aresta “segura”
a um subconjunto de arestas do grafo: o subconjunto final e´ a AGM.
2 Algoritmo de Prim: as arestas adicionadas ao subconjunto (a´rvore)
devem ser as de m´ınimo peso que conectam a a´rvore a um ve´rtice
ainda na˜o presente.
3 Algoritmo de Kruskal: as arestas adicionadas a a´rvore sa˜o as arestas
de menor peso que conecta dois componentes distintos.
gnramos (CIC/UnB) ED - Grafos 32/45
A´rvore Geradora M´ınima
Algoritmo Gene´rico
Enquanto o subconjunto A′ na˜o for uma AGM:
1 Seleciona uma aresta do grafo.
2 Se aresta e´ segura, adiciona a A′.
A aresta segura e´ sempre a aresta de peso m´ınimo que conecta a a´rvore a
um ve´rtice na˜o presente no conjunto V ′ (ve´rtices ligados pelas arestas de
A′).
Como determinar o que e´ uma aresta segura?
- Faz-se um corte do do grafo, dividindo-o em dois subgrafos: A′
estara´ contido em um deles.
- A mais leve entre as arestas que cruzam o corte e´ uma aresta segura.
gnramos (CIC/UnB) ED - Grafos 33/45
A´rvore Geradora M´ınima
Algoritmo Gene´rico: Aresta Segura
- V ′ = {0,1,2,3}
- Arestas que cruzam o corte: (1,4),(2,4),(2,5),(3,5)
- Arestas seguras: (2,5) e (3,5).
gnramos (CIC/UnB) ED - Grafos 34/45
A´rvore Geradora M´ınima
Algoritmo de Prim
Entrada: um grafo conectado ponderado com ve´rtices V e arestas A.
1 Inicialize V ′ = {u}, onde u e´ um no´ arbitra´rio de V e A′ = {∅}
2 Repita ate´ que V ′ = V :
2.1 Escolha um arco (u, v) de A com o m´ınimo peso tal que u esteja em
V ′ e v na˜o
2.2 Adicione v a V ′ e (u, v) a A′
Sa´ıda: A′, que descreve a a´rvore geradora m´ınima (junto a V ′ = V ).
gnramos (CIC/UnB) ED - Grafos 35/45
A´rvore Geradora M´ınima
Algoritmo de Prim - Exemplo1
1Imagens de Alexander Drichel
gnramos (CIC/UnB) ED - Grafos 36/45
A´rvore Geradora M´ınima
Algoritmo de Prim - Complexidade
- A complexidade desse algoritmo depende da forma como a escolha
do arco e´ feita.
- Complexidade O(|V |2)
- Usando um vetor ordenado ou a´rvore bina´ria para armazenar os
ve´rtices:
- Ordem e´ definida pelo peso do arco mais leve que liga esse ve´rtice a
qualquer um dos ve´rtices ja´ no subconjunto
- Complexidade: O(|A|log |V |)
gnramos (CIC/UnB) ED - Grafos 37/45
A´rvore Geradora M´ınima
Algoritmo de Kruskal
1 Crie uma floresta F (um conjunto de a´rvores), onde cada ve´rtice no
grafo e´ uma a´rvore separada.
2 Crie um conjunto A′ contendo todas as arestas do grafo.3 Enquanto A′ 6= ∅:
3.1 remova uma aresta com peso m´ınimo de A′
3.2 se essa aresta conecta duas a´rvores diferentes, adicione-a a F ,
combinando duas a´rvores numa u´nica a´rvore parcial
3.3 se na˜o (aresta conecta dois ve´rtices na mesma a´rvore), descarte a
aresta.
Ao fim do algoritmo, a floresta tem apenas um componente e forma uma
a´rvore geradora m´ınima do grafo.
gnramos (CIC/UnB) ED - Grafos 38/45
A´rvore Geradora M´ınima
Algoritmo de Kruskal - Exemplo2
2Imagens de Alexander Drichel
gnramos (CIC/UnB) ED - Grafos 39/45
A´rvore Geradora M´ınima
Algoritmo de Kruskal - Complexidade
Depende de como os arcos sa˜o ordenados:
- O(|A|log |A|)
gnramos (CIC/UnB) ED - Grafos 40/45
Caminhos Mais Curtos
- Muitas das aplicac¸o˜es de grafos necessitam encontrar o caminho
mais curto entre dois ve´rtices de um grafo ponderado
- Busca em largura obte´m o caminho mais curto entre dois ve´rtices,
se todos os arcos tiverem o mesmo peso
- O caminho mais curto entre dois ve´rtice e´ um subgrafo, tal que seus
ve´rtices sa˜o os ve´rtices alcanc¸a´veis do ve´rtice origem, o subgrafo
forma uma a´rvore cuja raiz e´ o ve´rtice origem e para todos os
ve´rtices, o caminho simples da origem ate´ esse ve´rtice e´ o caminho
mais curto
Algoritmo mais utilizado: Dijkstra
gnramos (CIC/UnB) ED - Grafos 41/45
Caminhos Mais Curtos
Algoritmo Djikstra
- Escolhido um ve´rtice como raiz da busca, este algoritmo calcula o
custo m´ınimo deste ve´rtice para todos os demais ve´rtices do grafo.
- O algoritmo pode ser usado sobre grafos orientados, ou na˜o, e
admite que todas as arestas possuem pesos na˜o negativos (nulo e´
poss´ıvel).
gnramos (CIC/UnB) ED - Grafos 42/45
Caminhos Mais Curtos
Algoritmo Djikstra
Seja G (V ,A) um grafo direcionado e v um ve´rtice de G :
1 Atribuic¸a˜o de distaˆncias:
0 ao ve´rtice inicial v ;
∞ aos demais.
2 Marcar todos os ve´rtices como abertos (na˜o visitados) e o inicial
como atual.
3 Para cada ve´rtice aberto adjacente ao atual, atribua a distaˆncia
estimada dele ate´ o no´ inicial. Se a distaˆncia for menor que a
distaˆncia registrada, atualize o valor.
4 Depois de processar todos os no´s aberto adjacentes ao atual,
marque-o como fechado (visitado). Sua distaˆncia e´ final e m´ınima.
5 Escolha o no´ aberto de menor distaˆncia como novo no´ atual e va´
para 3, termine se na˜o houver.
gnramos (CIC/UnB) ED - Grafos 43/45
Caminhos Mais Curtos
Algoritmo Djikstra - Exemplo
f a
g
b
e h c
d fechado
aberto
atual
2
2
2
2
11
1
11
0.5
0.5g
b
(1)
d
h
(0.5)
g h
2
(1)
h
ba
(2)
c
b
d
e
(2)
(2)
2
Atribuic¸a˜o de distaˆncias.Marcar todos os ve´rtices como abertos e g como atual.Atribuir a distaˆncia estimada ate´ o no´ inicial para cada ve´rtice aberto
adjacente, e atualizar a distaˆncia.
Marcar o atual como fechado.Escolher o no´ aberto de menor distaˆncia como novo no´ atual.Atribuir a distaˆncia estimada ate´ o no´ inicial para cada ve´rtice aberto
adjacente, e atualizar a distaˆncia.
Marcar o atual como fechado, escolher o no´ aberto de menor distaˆncia
como novo no´ atual, e atribuir distaˆncias.
Terminar quando na˜o ha´ mais no´s abertos.
gnramos (CIC/UnB) ED - Grafos 44/45
Caminhos Mais Curtos
Algoritmo Djikstra
Complexidade: O(|E |+ |V |log |V |)
Aplicac¸o˜es
- Protocolos de roteamento dinaˆmicos (OSPF, IS-IS).
- Algoritmo Bellman-Ford (grafos direcionados, arestas com peso
negativo).
- Algoritmo A* (planejamento de rota).
- Ana´lise de circuitos ele´tricos.
- Etc.
gnramos (CIC/UnB) ED - Grafos 45/45
	Grafos
	Conceitos e Definições
	Implementação
	Busca
	Ordenamento Topológico
	Árvore Geradora Mínima
	Caminhos Mais Curtos

Outros materiais