Los algoritmos voraces son algoritmos que tratan resolver problemas siempre eligiendo la mejor opción.
Figura 1: Grafo con pesos
Figura 2: Arbol de peso mínimo
def Kruskal(G):
X = set() #Conjunto con las aristas del arbol
G.E.sort() #Ordenar las aristas por el peso
for (u,v) in G.E:
if not conectados(u,v):
X.add((u,v))
unir(u,v)
Figura 3: Añadimos la arista de f a a.
Figura 4: Añadimos la arista de f a e
Un corte en un grafo es una partición en dos conjuntos \((S,T)\) de sus vértices. El conjunto asociado a un corte son las aristas que unen vértices de \(S\) con vértices de \(T\).
Figura 5: Ejemplo de corte
Dado un corte \(S,T\), entonces la arista de mínimo peso que une un nodo cualquiera de \(S\) con un nodo de \(T\) pertenece a algún minimum spanning tree.
def Prim(G,a):
X = set()
Corte = set(a)
mientras X tenga menos de |G.V|-1:
Añadir la arista minima asociada a Corte a X.
Añadir el nodo destino de la arista a Corte.
Figura 6: Traza del algoritmo de Prim empezando en a
Figura 7: Traza del algoritmo de Prim empezando en a