AlGORITMO DE PRIM
Robert Prim en 1957 descubrió un algoritmo para la resolución del problema del Árbol
de coste total mínimo (minimum spanning tree - MST).
Este problema es un problema típico de optimizacion combinatoria, que fue considerado originalmente por Otakar Boruvka en 1926 mientras estudiaba la necesidad de electrificación rural en el sur de Moravia en Checoslovaquia. Este problema también fue resuelto por Joseph B. Kruskal en 1956.
Este problema es un problema típico de optimizacion combinatoria, que fue considerado originalmente por Otakar Boruvka en 1926 mientras estudiaba la necesidad de electrificación rural en el sur de Moravia en Checoslovaquia. Este problema también fue resuelto por Joseph B. Kruskal en 1956.
El algoritmo de Prim
encuentra un árbol de peso total mínimo conectando nodos o vértices con arcos
de peso mínimo del grafo sin formar ciclos.
algoritmo de Prim (árbol
de coste total mínimo)
Consiste en dividir los nodos de un grafo en dos conjuntos:
procesados y no procesados.
Al principio, hay un nodo en el conjunto procesado que corresponde a el equipo central; en cada interacción se incrementa el grafo de procesados en un nodo (cuyo arco de conexión es mínimo) hasta llegar a establecer la conexión de todos los nodos del grafo a procesar. A continuación se muestra el pseudocódigo del algoritmo:
Al principio, hay un nodo en el conjunto procesado que corresponde a el equipo central; en cada interacción se incrementa el grafo de procesados en un nodo (cuyo arco de conexión es mínimo) hasta llegar a establecer la conexión de todos los nodos del grafo a procesar. A continuación se muestra el pseudocódigo del algoritmo:
Prim ( L [1..n , 1..n ]) : 'conjunto
de arcos
'Inicialización: sólo el nodo 1 se
encuentra en B
T =NULL 'T contendrá los arcos del
árbol de extensión mínima Distmin[1]=-1
para i=2 hasta n hacer
más_próximo [ i ]=1
distmin [ i ]=L [ i , 1]
para i=1 hasta n -1 hacer
min=infinito
para j=2 hasta n hacer
si 0 <= distmin [ j ]
< min entonces
min=distmin [ j ]
k=j
T=T union {{mas_próximo [ k ], k
}}
distmin [ k ]= -1 'se añade k a B
para j=2 hasta n hacer
si L [ j , k ] <
distmin [ j ] entonces
distmin [ j ]=L [ j , k ]
más_próximo [ j ]=k
devolver T
No hay comentarios:
Publicar un comentario