You are on page 1of 13

ESCOLA DE ENGENHARIA

C++ Dijkstra e Prim

Algoritmo de Dijkstra (1959)


L=2
Comprimento Acumulado

1
u2 6 5 L=7 L=8

L=3 L=

2
u3 3 L=6 L=

L=5 L=

3
u4 9 7 L L=11 =12 L= 7 u9 3 1 L=10 L= 11 4 2 9 L=13 L =14 L= 8 u10

2 L=0 4 u0 1 8

5 u6 7 2 L=1 L= 9

6 u5 4 L L=9 =10 L=

u1
C++ - Dijkstra e Prim

10

u7

u8

Prof. Lincoln Cesar Zamboni

2/13

Anlise
1 2 3
u0= 4

2 3 5 0 7

Qual a distncia mnima entre os vrtices:

4e1? 4e2?
4 e 11 ? 4 e 10 ? 4e8?

Resposta: 2

Resposta: 3
Resposta: 10 Resposta: 9 Resposta: 13

L=

6 7 8 9 10 11

6 11 13 1 9 10

Qual caminho possui distncia mnima entre os vrtices 4 e 8 ?


Prof. Lincoln Cesar Zamboni

C++ - Dijkstra e Prim

3/13

O Caminho do 4 at o 8
Comprimento Acumulado

L=2, L=, A A= =4 0 1 1 u2 6 5 L=7, , A= 8, =6 4 0 1 5 u6

L=3, L=, A A= =1 0 2 2 u3 3 L=,, A L=6 A= =2 0 6 6 u5 9

L=5, L=, A A= =2 0

3
u4 7 9 L = 11, =11 L= =12 , A= 0 2 L L= =14 =13 , A= 0 3 7 2 7 8 u9 3 11 1 L= L =10 , A= 0 10 4 u10

Vrtice Anterior

2 L=0, A=0 4 u0 1 8

7 9

4 L=10 L= , A 9, A= =5 0 9 10

L=1, , A= =4 0

u1
C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

u7

u8

4/13

Anlise
1 2 4 1 Qual caminho possui distncia mnima entre os vrtices: 4e8? 4e2? Resposta: 8, 7, 11, 10, 5, 6, 2, 1, 4 Resposta: 2, 1, 4

A=

3 2 u0= 4 0 5 6 6 2 7 11 8 7 9 4 10 5 11 10

4 e 11 ? Resposta: 11, 10, 5, 6, 2, 1, 4


4 e 10 ? Resposta: 10, 5, 6, 2, 1, 4

C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

5/13

rvore de Caminhos Mnimos


1 2 4 8 6 5 5 1

1 2 3 4

4 1 2 0 6 2 11 7

2 3 6

3 9 7 7

A=

5 6 7

9
10 11

4
5 10

4 9

3 1

9
C++ - Dijkstra e Prim

10

11
6/13

Prof. Lincoln Cesar Zamboni

Matriz de Pesos (W)


simtrica
1 2 3

77/121 64% de nulos


8
0 0 9

1
0 1 0

2
1 0 2

3
0 2 0

4
2 0 0

5
6 5 0

6
0 3 0

7
0 9 7

9
0 0 0

10
0 0 0

11
0 0 0

4
5 6 7

2
6 0 0

0
5 3 9

0
0 0 7

0
8 0 0

8
0 1 0

0
1 0 6

0
0 6 0

0
0 0 2

1
7 0 0

0
2 4 3

0
0 0 1

8
9 10 11

0
0 0 0

0
0 0 0

9
0 0 0

0
1 0 0

0
7 2 0

0
0 4 0

2
0 3 1

0
0 0 4

0
0 9 0

0
9 0 1

4
0 1 0

C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

7/13

(L)ength, (A)nterior e (M)arcao


L=2, L= , A A= =4 0 1 u2 1 L=3, L= , A A= =1 0 2 u3 2 L=5, L= , A A= =2 0 3 u4

L A M 2 4 0 F T 1 2 3 1 F 0 T 3 5 2 0 4 0 0 8 0 4 7 6 5 6 2 0 6 11 11 12 2 0 7 13 14 7 3 0 8 4 1 0 9 10 5 0 9 9 10 T F T F T F T F T F T F

2 L=0, A=0
4 u0 1 8

6 5 L= 8, 7, , A=4 6 0
5 u6 7 2 L= 1,, A=4 0 9 u1 9 1

3 L= L=6 , A=2 0
6 u5 4 L L= =10 9,, A= =5 0 9 10 u7 1 6

7 L = 11, L L= =12 , A A=11 =0 2


7 u9 2

9
L L= =14 =13 , A=0 3 7 8 u10 4

1 L L= =10 ,, A= =10 0 11 u8

T F T F 10 10 0 F T 11
8/13

C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

incio V = {1, 2, ..., n} obter o vrtice inicial u0 V e o vrtice final uf V M = {u0} D=V-M L(u0) = 0 A(u0) = 0 L(v) = A(v) = 0 "vD i=0

Os vrtices V foram numerados a partir do nmero 1.

Complexidade Dijkstra O(n2)

M o conjunto dos vrtices Marcados e D o dos Desmarcados.

fim

ni1 comparaes e adies.

L(u0) a distncia acumulada at u0 e A(u0) o vrtice anterior a u0 neste caso 0 significa que no h um vrtice anterior. Os vrtices desmarcados recebem a distncia acumulada e no possuem vrtice anterior (simbolizado por ter o valor A(v) nulo).

O caminho para a distncia mnima de uf at u0 C

No existe um caminho com distncia mnima de uf at u0


no

sim

C inicializada com a seqncia ordenada nula ().

v = u0

n vrtices.

ui uf
sim

no

L(uf) a distncia mnima de u0 at uf.


Expanso da rvore de caminhos mnimos. a(ui, v) representa a adjacncia entre ui e v. Busca do vrtice desmarcado com distncia acumulada mnima. O vrtice buscado agora marcado.

C = () v = uf
no

L(v) = mnimo(L(v), L(ui) + w(ui, v)) A(v) = ui "vD e a(ui, v) 0 ui+1 | L(ui+1) = mnimo(L(v)) "vD M = M {ui+1} i=i+1

v u0 e A(v) 0
sim

C = C + (v) v = A(v)

C concatenada com a seqncia ordenada unitria (v).

n i 1 comparaes.
9/13

C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

Dijkstra: total de operaes com n vrtices


Adies
a = (n-1)+(n-2)+...+ a= 1 + 0 0 + 1 +...+ (n-2)+(n-1)

2a = (n-1)+(n-1)+...+ (n-1)+(n-1) a = n(n-1)

Comparaes
c = n(n-1)

Total

0(n2)
C++ - Dijkstra e Prim Prof. Lincoln Cesar Zamboni

10/13

Algoritmo de Prim
L= 2 A=4 A=0
Distncia

A=1 A=0 L=1 2 2 u3

2 A=2 L= A=0 3 u4

u2 2 L=0 A=0
4 u0 1 7 9 u1
C++ - Dijkstra e Prim

6 5 L=7 A=9 6 A=1 L= 5 A=2 1 A=6 8 A=4 A=0 1 5


u6 2 L=1 A=4 A=0

3 9 7 9 L= A=0 L=3 A=2 L=9 L=4 A=7 A=11 A=3 A=11 A=0 L=1 L= A=0 L=2 9 A=2 L=3 7 A=3 A=10 6 A=6 6 2 6 7 8 u5 u9
4

u10

4 3 1 L=4 A=6 L= A=0 L= A=0 L=2 L=9 A=5 A=9 L=1 A=10 10 u7

11

Prof. Lincoln Cesar Zamboni

u8

11/13

rvore de Cobertura Mnima


1 2 4 8 6 5 5 1

1 2 3 4

4 1 2 0 6 2 11 7

2 3 6

3 9 7 7

A=

5 6 7

9
10 11

4
5 10

4 9

3 1

4 tot = 16
12/13

9
C++ - Dijkstra e Prim

10

11

Prof. Lincoln Cesar Zamboni

Prim

incio V = {1, 2, ..., n} M = {u0} D=V-M L(u0) = 0 A(u0) = 0 L(v) = A(v) = 0 "vD i=0

fim
Os vrtices V foram numerados a partir do nmero 1.

M o conjunto dos vrtices Marcados e D o dos Desmarcados. L(u0) a distncia acumulada at u0 e A(u0) o vrtice anterior a u0 neste caso 0 significa que no h um vrtice anterior. Os vrtices desmarcados recebem a distncia e no possuem vrtice anterior (simbolizado por ter o valor A(v) nulo). T inicializada com a seqncia ordenada nula ().

A rvore de cobertura mnima T e a soma total de pesos tot.

No existe uma rvore de cobertura mnima.


no

sim

v = n+1 T = () tot = 0 v=1


no

D
sim

no

L(v) = mnimo(L(v), w(ui, v)) A(v) = ui "vD e a(ui, v) 0 ui+1 | L(ui+1) = mnimo(L(v)) "vD M = M {ui+1} i=i+1

Expanso da rvore. a(ui, v) representa a adjacncia entre ui e v. Busca do vrtice desmarcado com distncia mnima.

vne A(v) 0
sim

T = T + ((v, A(v))) tot = tot + L(v) v=v+1

O vrtice buscado agora marcado.

T concatenada com a seqncia ordenada unitria de um par ordenado (v, A(v)).

C++ - Dijkstra e Prim

Prof. Lincoln Cesar Zamboni

13/13

You might also like