Anda di halaman 1dari 4

Algoritmo de Prim

Mario Augusto Vale de Castro, Introduo a Teoria de Grafos, Curso de


Cincias da Computao (marioavcastro@hotmail.com).
Prof. Msc. Fernando Junior, Faculdade Pitgoras So Lus/MA.

Resumo
O algoritmo de Prim, em Cincias da Computao, um algoritmo guloso que
busca encontrar uma rvore geradora mnima para um grafo conexo com
pesos. Foi desenvolvido pelo matemtico Vojtch Jarnk em 1930 e mais tarde
implementado
pelo
cientista
Robert
C.
Prim.
Hoje o Algoritmo de Prim usado em diversos problemas que envolvem
logstica, distribuio de redes de internet, localizao em GPS e outros
servios.
Palavras-chave: algoritmo, guloso, Prim.
1. Introduo
O Algoritmo de Prim o algoritmo de arvore geradora mnima mais fcil de
implementar e o melhor mtodo para grafos conexos. Com esse algoritmo pode
encontrar qualquer arvore geradora mnima que usa grafos com pesos. Um
subgrafo T de um grafo conectado G = (V, E) uma arvore geradora de G, se
isso uma arvore e contem qualquer vrtice de G. Arvores so grafos sem
ciclos e conexos que podem ser obtidas com a simples remoo de uma das
arestas de um grafo. Essa arvore muito importante pra conectar todos os
vrtices do grafo sem ciclo. Apesar de ser fcil encontra-la, h algumas
restries que podem ser impostas (altura, dimetro, grau dos vrtices) e
tornando assim difcil obter uma soluo. Como as arestas do grafo podem ter
pesos (ou custos) tem-se o custo da rvore geradora como sendo a soma dos
custos de todas as suas arestas. Quando o custo da rvore geradora sempre
menor ou igual ao de qualquer outra ela chamada de rvore geradora de
custo (ou peso) mnimo.
2. Algoritmo de Prim
Colocando A sendo um conjunto de arestas, a aresta (u, v) uma aresta
segura para A, se A U {(u, v)} e tambm um subconjunto de alguma arvore
geradora mnima. Enquanto A = no forma uma arvore geradora, encontrar
uma aresta (u, v) que seguro para A adicionando (u, v) em A. No incio o
conjunto A contm um vrtice arbitrrio. A cada passo, o algoritmo considere
todas as arestas que tocam A e seleciona a de menor peso. Depois, o algoritmo
acrescenta em A o vrtice ligada por essa aresta que no estava em A. O
processo continua at que A contenha todos os vrtices de G. Eis uma
descrio do algoritmo:

funo Prim(G = (N,A): grafo): conjunto de arestas


T := {}
A := Um vrtice de G
Enquanto B no contm todos os vrtices
(u,v) := aresta de menor peso tal que u
Aev

T := T U {(u,v)}
A := A U {u}
Retornar T
Para ilustrar, consideremos de novo o grafo da figura 7, comeando
arbitrariamente pelo vrtice a:
Passo
aresta considerada
Conjunto A
Incio
{a}
1
(b,a)
{a,b}
2
(c,b)
{a,b,c}
3
(d,a)
{a,b,c,d}
4
(e,d)
{a,b,c,d,e}
5
(g,d)
{a,b,c,d,e,g}
6
(f,g)
{a,b,c,d,e,f,g}

V-

Figura 8
3. Implementao
Para implementar eficientemente esse algoritmo, utiliza-se uma matriz de
adjacncia A[1..n, 1..n], onde cada elemento indica a distncia entre dois
vrtices. Caso dois vrtices no forem ligados por uma aresta o valor ser para
representar o conjunto A, podemos utilizar duas tabelas de n elementos, uma
indicando para cada vrtice o vrtice de A que mais perto, uma outra que d
a
distncia
at
o
vrtice
de
A
que

mais
perto.
Seja mais_perto[1..n] e dist_mais_perto[1..n] essas
duas
tabelas,
respectivamente. Para um vrtice que j pertence a A, colocamos (-1) na
entrada correspondente na tabela. Eis o algoritmo:
funo Prim(L = [1..n, 1..n]: grafo): conjunto de arestas
{Inicialmente consideramos que o vrtice 1 o nico elemento de
A}

T := {}
Para i := 2 at n:
mais_perto[i] := 1
dist_mais_perto[i] := L[i,1]
Repetir n-1 vezes:
min :=
Para j := 2 at n:
Se 0

dist_mais_perto[j] < min ento

min := dist_mais_perto[j]
k := j
T := T U ((k,mais_perto[k])}
dist_mais_perto[k] := -1
Para j := 2 at n:
Se L[k,j] < dist_mais_perto[j] ento
dist_mais_perto[j] := L[k,j]
mais_perto[j] := k
Retornar T
4. Concluso
Como vimos anteriormente, o algoritmo de Prim bastante utilizado em vrios
ramos devido facilidade que ela encontra a rvore. Ento s depende da
forma como ela implementada, podendo gerar uma rvore com maior
preciso e em menor tempo. Visto que o uso do algoritmo pode ser usado em
uma ampla gama de solues, sempre bom colocar em mente em que deve
ser usado para que se tenha um maior proveito possvel.
5. Referencias
Aquino, Artur Ribeiro de Otimizao em Grafos: Arvore Geradora com
Restries, 2010, Universidade Federal de Pernambuco.
El Algoritmo de Prim
http://www.monografias.com/trabajos87/monografia-algoritmoprim/monografia-algoritmo-prim.shtml

Lecture 07: Minimum Spanning Trees and Prims Algorithm, CLRS Chapter 23.

Anda mungkin juga menyukai