SlideShare ist ein Scribd-Unternehmen logo
1 von 18
 Árbol de mínima expansión:
Árbol de máximo alcance cuyo valor
es mínimo, es decir, la suma de sus
aristas es mínima.
 Algoritmo de Kruskal: El algoritmo de Kruskal
permite hallar el árbol minimal de cualquier grafo
valorado (con capacidades). Hay que seguir los
siguientes pasos:
 Se marca la arista con menor valor. Si hay más
de una, se elige cualquiera de ellas.
 De las aristas restantes, se marca la que tenga
menor valor, si hay más de una, se elige
cualquiera de ellas.
 Repetir el paso 2 siempre que la
arista elegida no forme un ciclo
con las ya marcadas.
 El proceso termina cuando
tenemos todos los nodos del
grafo en alguna de las aristas
marcadas, es decir, cuando
tenemos marcados n-1 arcos,
siendo n el número de nodos del
grafo.
Ejemplo: Determinar el árbol de
mínima expansión para el siguiente
grafo:
Siguiendo el algoritmo de Kruskal, tenemos:
Elegimos, por ejemplo, la arista (5, 6) = 1 (menor valor)
y la marcamos.
Elegimos la siguiente arista con menor valor (1, 3) = 1 y
la marcamos.
Elegimos la siguiente arista con menor valor (5, 7) = 2 y
la marcamos, ya que no forma ciclos con ninguna arista de
las marcadas anteriormente.
 Elegimos la siguiente arista con menor valor (1, 2) = 3 y la
marcamos, ya que no forma ciclos con ninguna arista de las
marcadas anteriormente.
 Elegimos la siguiente arista con menor valor (6, 7) = 4 y la
desechamos, ya que forma ciclos con las aristas (5, 7) y (5,
6) marcadas anteriormente.
 Elegimos la siguiente arista con menor valor (2, 5) = 5 y la
marcamos, ya que no forma ciclos con ninguna arista de las
marcadas anteriormente.
 Elegimos la siguiente arista con menor valor (4, 5) = 6 y la
marcamos, ya que no forma ciclos con ninguna arista de las
marcadas anteriormente.
 FIN. Finalizamos dado que los 7 nodos del grafo están en
alguna de las aristas, o también ya que tenemos marcadas 6
aristas (n-1).
 Por tanto el árbol de mínima expansión resultante sería:
 <iostream.h> # include # include
<process.h> <malloc.h> # include # define
MAX 20 borde struct { int u, v int, int peso;
borde * enlace; } * frente = NULL; int padre
[ MAX]; / * Mantiene el padre de cada nodo
* / árbol
CODIGO Y PSEUDOCODIGO
<img src="http://www.tech-
faq.com/components/com_glossary/
images/plugin/messagebox_info.pn
g" border="0" align="top"
alt="Glossary Link" />
 <a class="glossarylink"
 href="/index.php?
option=com_glossary&Itemid=239&id=402&letter
=E&lang=es" title="EDGE (Enhanced Data Rates
for Global Evolution) – is an improved GPRS
standard used to obtain rich content data. It
broadcasted four times faster than conventional
transmission. The speed of EDGE network
depends upon various aspects, such as service
outages, traffic volume, signal strength and the
Internet speed. ">edge</a> [MAX]; / *
contendrá los bordes del árbol de expansión * /
int n; / * Indica el número total de nodos en el
 gráfico * / int wt_tree = 0; / * Peso del árbol
de expansión * / int count = 0; / * Indica el
número de aristas incluidas en el árbol * / / *
Funciones * / void make_tree (); insert_tree
(int i, j int, int peso); void insert_pque (int i, j
int, int peso); borde * del_pque ();
create_graph void (); void main () { int i;
create_graph (); make_tree (); cout << "los
bordes que se incluirán en el árbol de
expansión se :  n "; for (i = 1; i <= count; i +
+) { tribunal <<árbol [i]. u; tribunal <<árbol
[i]. V; } tribunal <<" Peso de este árbol de
expansión mínima es: "<<wt_tree; } / * Fin de
main () * / void create_graph ()
 { int i, en peso, max_edges, origen, destino;
cout <<" Introduzca el número de nodos: ";
cin>> n; max_edges * = n (n-1) / 2; for (i =
1; i <= max_edges; i + +) { tribunal <<
"Introduzca el borde" <<i << "(0 0 para dejar
de fumar):" cin>> romper origen; cin>>
destino; if ((origen == 0) & & (destino == 0));
cout << " n Introduzca el peso de este canto:"
cin>> peso; if (origen> n | | Destin> n | |
origen <= 0 | | destin <= 0) { tribunal << "no
válido borde  n"; i -; } más insert_pque
(origen, destino, peso); } if (i <n - 1) { tribunal
<< " nSpanning árbol no es posible  n";
salida (1); } } / * Fin de create_graph () * /
void make_tree () { borde * tmp; int nodo1,
nodo2,
 <img src="http://www.tech-
faq.com/components/com_glossary
/images/plugin/messagebox_info.p
ng" border="0" align="top"
alt="Glossary Link" />
 <a
class="glossarylink"
 href="/index.php?
option=com_glossary&Itemid=239&id=240&lett
er=R&lang=es" title="also called the
administrator account. Root refers to the user
with the permission on every mode of a multi-
user or single OS. The root in PC file structure
is recognized as the top-most or the first
directory within the chain of command.
">root</a>_n1, root_n2 while (count <n-1) / *
bucle hasta n-1 aristas incluidas en el árbol * /
tmp = { del_pque (); nodo1 = tmp-> u; nodo2
= tmp-> v; tribunal << " nn1 = "<<nodo1;
cout <<"  nn2 = "<<node2; while( nodo1> 0)
{ root_n1 = nodo1; nodo1 = padre
 [nodo1]; } while (nodo2> 0) { root_n2 =
nodo2; nodo2 = padre [nodo2]; } tribunal <<
" nrootn1 =" <<root_n1; tribunal << "
nrootn2 =" <<root_n2; if(root_n1!=root_n2)
{ insert_tree(tmp-> u, tmp-> v, tmp-> peso);
wt_tree = wt_tree + tmp-> peso; padre
[root_n2] = root_n1; } } } / * Fin de
make_tree () * / / * Inserción de una ventaja
en el árbol * / void insert_tree (int i, int j, int
peso) { tribunal << "
 nEste borde insertado en el árbol de
expansión  n"; count + +; árbol
[cuenta]. u = i; árbol [cuenta]. v = j;
[árbol cuenta]. peso = peso; } / * Fin de
insert_tree () * / / * Inserción de bordes
en la cola de prioridad * / insert_pque
(int i, j int, int peso) { borde * tmp, * q;
tmp = (borde *) malloc ( sizeof (borde));
tmp-> U = i; tmp-> v = j; tmp-> peso =
peso; / * la cola está vacía o borde que
se ha añadido peso inferior a primera
borde * /
 if (frente == NULL | | tmp-> peso <front->
peso) { tmp-> link = frente; frente = tmp; }
más { q = frente, mientras que (q-> enlace! =
NULL & & q-> enlace-> peso < = tmp-> peso)
q = q-> enlace; tmp-> link = q-> enlace; q->
link = tmp; si (q-> link == NULL) / * borde que
se añade al final * / tmp-> link = NULL; } } / *
Fin de insert_pque () * / / * Eliminar un borde
de la cola de prioridad * / * borde del_pque ()
{ borde * tmp; tmp = frente; cout << " nEdge
es procesada "; tribunal <<tmp-> u; cout <<"
-> "<<tmp-> V; cout <<" "<<tmp-> peso;
frente = frente-> enlace; return tmp; } / * Fin
de del_pque () * /
salida
VIDEO EXPLICACION
http://www.youtube.com/watch?v=AR_Y88kkh58

Weitere ähnliche Inhalte

Was ist angesagt? (17)

Presentación3d
Presentación3dPresentación3d
Presentación3d
 
Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)
 
Semana 4 Estructuras de datos(Listas)
Semana 4   Estructuras de datos(Listas)Semana 4   Estructuras de datos(Listas)
Semana 4 Estructuras de datos(Listas)
 
Matematicas con bloques o posicion de un elemento en un array or Block math ...
Matematicas con bloques o posicion de un elemento en un array or  Block math ...Matematicas con bloques o posicion de un elemento en un array or  Block math ...
Matematicas con bloques o posicion de un elemento en un array or Block math ...
 
busquedas con adversarios
busquedas con adversariosbusquedas con adversarios
busquedas con adversarios
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
 
Ordenamiento burbuja1
Ordenamiento burbuja1Ordenamiento burbuja1
Ordenamiento burbuja1
 
Funcionesphpmysql
FuncionesphpmysqlFuncionesphpmysql
Funcionesphpmysql
 
Sentencias my sql
Sentencias my sqlSentencias my sql
Sentencias my sql
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
C++
C++C++
C++
 
Tema4
Tema4Tema4
Tema4
 
Estructuras en c++
Estructuras en c++Estructuras en c++
Estructuras en c++
 
Objetop
ObjetopObjetop
Objetop
 
Estructuras en c++
Estructuras en c++Estructuras en c++
Estructuras en c++
 
Conjunto generador
Conjunto generadorConjunto generador
Conjunto generador
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 

Andere mochten auch

2010 communautes
2010 communautes2010 communautes
2010 communautesEDinstitut
 
Danzas zoomórficas uso, cultores y vigencia
Danzas zoomórficas uso, cultores y vigenciaDanzas zoomórficas uso, cultores y vigencia
Danzas zoomórficas uso, cultores y vigenciaeducmusical1
 
Unidad 2 act n6
Unidad 2 act n6Unidad 2 act n6
Unidad 2 act n6Xiomara
 
Microsoft BPOS - Online Services
Microsoft BPOS - Online ServicesMicrosoft BPOS - Online Services
Microsoft BPOS - Online Servicesaisnet it
 
Folclore chileno y danzas imitativas
Folclore chileno y danzas imitativasFolclore chileno y danzas imitativas
Folclore chileno y danzas imitativaseducmusical1
 
Viernes programacion de artistica completa1
Viernes programacion de artistica completa1Viernes programacion de artistica completa1
Viernes programacion de artistica completa1Patriciaglop
 
Blog presentación
Blog presentaciónBlog presentación
Blog presentaciónangel
 
alejandro_simonoff_las_politicas_de_nacionalidades
alejandro_simonoff_las_politicas_de_nacionalidadesalejandro_simonoff_las_politicas_de_nacionalidades
alejandro_simonoff_las_politicas_de_nacionalidadesAlejandro Simonoff
 

Andere mochten auch (20)

Evaluacion web
Evaluacion webEvaluacion web
Evaluacion web
 
Radar
RadarRadar
Radar
 
2010 communautes
2010 communautes2010 communautes
2010 communautes
 
Danzas zoomórficas uso, cultores y vigencia
Danzas zoomórficas uso, cultores y vigenciaDanzas zoomórficas uso, cultores y vigencia
Danzas zoomórficas uso, cultores y vigencia
 
Unidad 2 act n6
Unidad 2 act n6Unidad 2 act n6
Unidad 2 act n6
 
Repaso
RepasoRepaso
Repaso
 
Presentación1
Presentación1Presentación1
Presentación1
 
Part 1
Part 1Part 1
Part 1
 
La caja escondida
La caja escondidaLa caja escondida
La caja escondida
 
Microsoft BPOS - Online Services
Microsoft BPOS - Online ServicesMicrosoft BPOS - Online Services
Microsoft BPOS - Online Services
 
Presentation prus
Presentation prusPresentation prus
Presentation prus
 
Usuarios
UsuariosUsuarios
Usuarios
 
Folclore chileno y danzas imitativas
Folclore chileno y danzas imitativasFolclore chileno y danzas imitativas
Folclore chileno y danzas imitativas
 
Netiqueta
NetiquetaNetiqueta
Netiqueta
 
Viernes programacion de artistica completa1
Viernes programacion de artistica completa1Viernes programacion de artistica completa1
Viernes programacion de artistica completa1
 
Blog presentación
Blog presentaciónBlog presentación
Blog presentación
 
Conference abc
Conference abcConference abc
Conference abc
 
Mercadeo del bien comun
Mercadeo del bien comunMercadeo del bien comun
Mercadeo del bien comun
 
Matanza del mozote
Matanza del mozoteMatanza del mozote
Matanza del mozote
 
alejandro_simonoff_las_politicas_de_nacionalidades
alejandro_simonoff_las_politicas_de_nacionalidadesalejandro_simonoff_las_politicas_de_nacionalidades
alejandro_simonoff_las_politicas_de_nacionalidades
 

Ähnlich wie Kruskal

Ähnlich wie Kruskal (20)

Coloreo de grafos
Coloreo de grafosColoreo de grafos
Coloreo de grafos
 
Deteccion de Ciclos en c
Deteccion de Ciclos en cDeteccion de Ciclos en c
Deteccion de Ciclos en c
 
Cplus
CplusCplus
Cplus
 
Informe tecnico victor_uex
Informe tecnico victor_uexInforme tecnico victor_uex
Informe tecnico victor_uex
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Informe tecnico u 5-victor uex
Informe tecnico u 5-victor uexInforme tecnico u 5-victor uex
Informe tecnico u 5-victor uex
 
Lecture 37
Lecture 37Lecture 37
Lecture 37
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
1.2. kotlin (1)
1.2. kotlin (1)1.2. kotlin (1)
1.2. kotlin (1)
 
1.2. kotlin
1.2. kotlin1.2. kotlin
1.2. kotlin
 
Tarea 1 bash
Tarea 1 bashTarea 1 bash
Tarea 1 bash
 
Informe metodos de ordenamiento
Informe metodos de ordenamientoInforme metodos de ordenamiento
Informe metodos de ordenamiento
 
Informe metodos de ordenamiento
Informe metodos de ordenamientoInforme metodos de ordenamiento
Informe metodos de ordenamiento
 
Informe tecnico
Informe tecnicoInforme tecnico
Informe tecnico
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
Implementacion
ImplementacionImplementacion
Implementacion
 
Graficas especiales
Graficas especialesGraficas especiales
Graficas especiales
 
Clase integracion matlab
Clase integracion matlabClase integracion matlab
Clase integracion matlab
 
Informe tecnico u 4-victor uex
Informe tecnico u 4-victor uexInforme tecnico u 4-victor uex
Informe tecnico u 4-victor uex
 

Mehr von Alhe' Wero

Mehr von Alhe' Wero (7)

Patrones
PatronesPatrones
Patrones
 
Kruskal
KruskalKruskal
Kruskal
 
Kruskal
KruskalKruskal
Kruskal
 
Logica
LogicaLogica
Logica
 
Logica
LogicaLogica
Logica
 
Cargador
CargadorCargador
Cargador
 
Máximo común divisor
Máximo común divisorMáximo común divisor
Máximo común divisor
 

Kruskal

  • 1.
  • 2.  Árbol de mínima expansión: Árbol de máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima.
  • 3.  Algoritmo de Kruskal: El algoritmo de Kruskal permite hallar el árbol minimal de cualquier grafo valorado (con capacidades). Hay que seguir los siguientes pasos:  Se marca la arista con menor valor. Si hay más de una, se elige cualquiera de ellas.  De las aristas restantes, se marca la que tenga menor valor, si hay más de una, se elige cualquiera de ellas.
  • 4.  Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las ya marcadas.  El proceso termina cuando tenemos todos los nodos del grafo en alguna de las aristas marcadas, es decir, cuando tenemos marcados n-1 arcos, siendo n el número de nodos del grafo.
  • 5. Ejemplo: Determinar el árbol de mínima expansión para el siguiente grafo: Siguiendo el algoritmo de Kruskal, tenemos: Elegimos, por ejemplo, la arista (5, 6) = 1 (menor valor) y la marcamos. Elegimos la siguiente arista con menor valor (1, 3) = 1 y la marcamos. Elegimos la siguiente arista con menor valor (5, 7) = 2 y la marcamos, ya que no forma ciclos con ninguna arista de las marcadas anteriormente.
  • 6.  Elegimos la siguiente arista con menor valor (1, 2) = 3 y la marcamos, ya que no forma ciclos con ninguna arista de las marcadas anteriormente.  Elegimos la siguiente arista con menor valor (6, 7) = 4 y la desechamos, ya que forma ciclos con las aristas (5, 7) y (5, 6) marcadas anteriormente.  Elegimos la siguiente arista con menor valor (2, 5) = 5 y la marcamos, ya que no forma ciclos con ninguna arista de las marcadas anteriormente.  Elegimos la siguiente arista con menor valor (4, 5) = 6 y la marcamos, ya que no forma ciclos con ninguna arista de las marcadas anteriormente.  FIN. Finalizamos dado que los 7 nodos del grafo están en alguna de las aristas, o también ya que tenemos marcadas 6 aristas (n-1).  Por tanto el árbol de mínima expansión resultante sería:
  • 7.  <iostream.h> # include # include <process.h> <malloc.h> # include # define MAX 20 borde struct { int u, v int, int peso; borde * enlace; } * frente = NULL; int padre [ MAX]; / * Mantiene el padre de cada nodo * / árbol CODIGO Y PSEUDOCODIGO
  • 9.  href="/index.php? option=com_glossary&Itemid=239&id=402&letter =E&lang=es" title="EDGE (Enhanced Data Rates for Global Evolution) – is an improved GPRS standard used to obtain rich content data. It broadcasted four times faster than conventional transmission. The speed of EDGE network depends upon various aspects, such as service outages, traffic volume, signal strength and the Internet speed. ">edge</a> [MAX]; / * contendrá los bordes del árbol de expansión * / int n; / * Indica el número total de nodos en el
  • 10.  gráfico * / int wt_tree = 0; / * Peso del árbol de expansión * / int count = 0; / * Indica el número de aristas incluidas en el árbol * / / * Funciones * / void make_tree (); insert_tree (int i, j int, int peso); void insert_pque (int i, j int, int peso); borde * del_pque (); create_graph void (); void main () { int i; create_graph (); make_tree (); cout << "los bordes que se incluirán en el árbol de expansión se : n "; for (i = 1; i <= count; i + +) { tribunal <<árbol [i]. u; tribunal <<árbol [i]. V; } tribunal <<" Peso de este árbol de expansión mínima es: "<<wt_tree; } / * Fin de main () * / void create_graph ()
  • 11.  { int i, en peso, max_edges, origen, destino; cout <<" Introduzca el número de nodos: "; cin>> n; max_edges * = n (n-1) / 2; for (i = 1; i <= max_edges; i + +) { tribunal << "Introduzca el borde" <<i << "(0 0 para dejar de fumar):" cin>> romper origen; cin>> destino; if ((origen == 0) & & (destino == 0)); cout << " n Introduzca el peso de este canto:" cin>> peso; if (origen> n | | Destin> n | | origen <= 0 | | destin <= 0) { tribunal << "no válido borde n"; i -; } más insert_pque (origen, destino, peso); } if (i <n - 1) { tribunal << " nSpanning árbol no es posible n"; salida (1); } } / * Fin de create_graph () * / void make_tree () { borde * tmp; int nodo1, nodo2,
  • 12.  <img src="http://www.tech- faq.com/components/com_glossary /images/plugin/messagebox_info.p ng" border="0" align="top" alt="Glossary Link" />  <a class="glossarylink"
  • 13.  href="/index.php? option=com_glossary&Itemid=239&id=240&lett er=R&lang=es" title="also called the administrator account. Root refers to the user with the permission on every mode of a multi- user or single OS. The root in PC file structure is recognized as the top-most or the first directory within the chain of command. ">root</a>_n1, root_n2 while (count <n-1) / * bucle hasta n-1 aristas incluidas en el árbol * / tmp = { del_pque (); nodo1 = tmp-> u; nodo2 = tmp-> v; tribunal << " nn1 = "<<nodo1; cout <<" nn2 = "<<node2; while( nodo1> 0) { root_n1 = nodo1; nodo1 = padre
  • 14.  [nodo1]; } while (nodo2> 0) { root_n2 = nodo2; nodo2 = padre [nodo2]; } tribunal << " nrootn1 =" <<root_n1; tribunal << " nrootn2 =" <<root_n2; if(root_n1!=root_n2) { insert_tree(tmp-> u, tmp-> v, tmp-> peso); wt_tree = wt_tree + tmp-> peso; padre [root_n2] = root_n1; } } } / * Fin de make_tree () * / / * Inserción de una ventaja en el árbol * / void insert_tree (int i, int j, int peso) { tribunal << "
  • 15.  nEste borde insertado en el árbol de expansión n"; count + +; árbol [cuenta]. u = i; árbol [cuenta]. v = j; [árbol cuenta]. peso = peso; } / * Fin de insert_tree () * / / * Inserción de bordes en la cola de prioridad * / insert_pque (int i, j int, int peso) { borde * tmp, * q; tmp = (borde *) malloc ( sizeof (borde)); tmp-> U = i; tmp-> v = j; tmp-> peso = peso; / * la cola está vacía o borde que se ha añadido peso inferior a primera borde * /
  • 16.  if (frente == NULL | | tmp-> peso <front-> peso) { tmp-> link = frente; frente = tmp; } más { q = frente, mientras que (q-> enlace! = NULL & & q-> enlace-> peso < = tmp-> peso) q = q-> enlace; tmp-> link = q-> enlace; q-> link = tmp; si (q-> link == NULL) / * borde que se añade al final * / tmp-> link = NULL; } } / * Fin de insert_pque () * / / * Eliminar un borde de la cola de prioridad * / * borde del_pque () { borde * tmp; tmp = frente; cout << " nEdge es procesada "; tribunal <<tmp-> u; cout <<" -> "<<tmp-> V; cout <<" "<<tmp-> peso; frente = frente-> enlace; return tmp; } / * Fin de del_pque () * /