SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances (18)

Algoritmo De Dijkstra
Algoritmo De DijkstraAlgoritmo De Dijkstra
Algoritmo De Dijkstra
 
Guia sql funciones
Guia sql funcionesGuia sql funciones
Guia sql funciones
 
Resultset
ResultsetResultset
Resultset
 
Algoritmo de dijkstra final
Algoritmo de dijkstra finalAlgoritmo de dijkstra final
Algoritmo de dijkstra final
 
Listas encadenadas
Listas encadenadasListas encadenadas
Listas encadenadas
 
Vectores
VectoresVectores
Vectores
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativo
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de Dijkstra
 
Análisis de algoritmos
Análisis de algoritmosAnálisis de algoritmos
Análisis de algoritmos
 
Cadenas
CadenasCadenas
Cadenas
 
Matlab Función Arco Tangente
Matlab Función Arco TangenteMatlab Función Arco Tangente
Matlab Función Arco Tangente
 
Funcion arcoseno en matlab
Funcion arcoseno en matlabFuncion arcoseno en matlab
Funcion arcoseno en matlab
 
Dominio
DominioDominio
Dominio
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativo
 
Practica2[Pds][Reporte]
Practica2[Pds][Reporte]Practica2[Pds][Reporte]
Practica2[Pds][Reporte]
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
El problema de la ruta más corta. Dijkstra
El problema de la ruta más corta. DijkstraEl problema de la ruta más corta. Dijkstra
El problema de la ruta más corta. Dijkstra
 
Algoritmo dijkstra
Algoritmo dijkstraAlgoritmo dijkstra
Algoritmo dijkstra
 

En vedette

Crear una webquest en googlesites
Crear una webquest en googlesitesCrear una webquest en googlesites
Crear una webquest en googlesitesProyecto AVA
 
Pictures Of Berkane
Pictures Of BerkanePictures Of Berkane
Pictures Of Berkaneberkane93420
 
Dossier preparatoire au conseil 24022014
Dossier preparatoire au conseil 24022014Dossier preparatoire au conseil 24022014
Dossier preparatoire au conseil 24022014CCDBB
 
Ces applications qui modifient en profondeur le business
Ces applications qui modifient en profondeur le businessCes applications qui modifient en profondeur le business
Ces applications qui modifient en profondeur le businessMicrosoft Ideas
 
La lettre du CNC n°120
La lettre du CNC n°120La lettre du CNC n°120
La lettre du CNC n°120LeCNC
 
MARKET_121-Antoine PRAZ
MARKET_121-Antoine PRAZMARKET_121-Antoine PRAZ
MARKET_121-Antoine PRAZAntoine Praz
 
Je détruis ma maison
Je détruis ma maisonJe détruis ma maison
Je détruis ma maisonlaurentsanti
 
Fotografía
FotografíaFotografía
FotografíaMildred
 
Qcm Nombres Complexes1
Qcm Nombres Complexes1Qcm Nombres Complexes1
Qcm Nombres Complexes1atire
 
Statistiques 1
Statistiques 1Statistiques 1
Statistiques 1atire
 
Présentation Trinity
Présentation TrinityPrésentation Trinity
Présentation TrinityManu Adad
 
Minçavi DÉPOT
Minçavi DÉPOTMinçavi DÉPOT
Minçavi DÉPOTMincavi
 
Les visites de fin d'année de pigeault immobilier programmes neufs à rennes
Les visites de fin d'année de pigeault immobilier   programmes neufs à rennesLes visites de fin d'année de pigeault immobilier   programmes neufs à rennes
Les visites de fin d'année de pigeault immobilier programmes neufs à rennesiperon
 
L'introduction du monnayage en babylonie
L'introduction du monnayage en babylonieL'introduction du monnayage en babylonie
L'introduction du monnayage en babyloniegusifang
 
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...Equipe RENARD
 

En vedette (20)

Crear una webquest en googlesites
Crear una webquest en googlesitesCrear una webquest en googlesites
Crear una webquest en googlesites
 
Pictures Of Berkane
Pictures Of BerkanePictures Of Berkane
Pictures Of Berkane
 
Dossier preparatoire au conseil 24022014
Dossier preparatoire au conseil 24022014Dossier preparatoire au conseil 24022014
Dossier preparatoire au conseil 24022014
 
Ces applications qui modifient en profondeur le business
Ces applications qui modifient en profondeur le businessCes applications qui modifient en profondeur le business
Ces applications qui modifient en profondeur le business
 
1 tours horizon
1 tours horizon1 tours horizon
1 tours horizon
 
La lettre du CNC n°120
La lettre du CNC n°120La lettre du CNC n°120
La lettre du CNC n°120
 
MARKET_121-Antoine PRAZ
MARKET_121-Antoine PRAZMARKET_121-Antoine PRAZ
MARKET_121-Antoine PRAZ
 
Je détruis ma maison
Je détruis ma maisonJe détruis ma maison
Je détruis ma maison
 
Fotografía
FotografíaFotografía
Fotografía
 
Qcm Nombres Complexes1
Qcm Nombres Complexes1Qcm Nombres Complexes1
Qcm Nombres Complexes1
 
Statistiques 1
Statistiques 1Statistiques 1
Statistiques 1
 
Présentation Trinity
Présentation TrinityPrésentation Trinity
Présentation Trinity
 
Minçavi DÉPOT
Minçavi DÉPOTMinçavi DÉPOT
Minçavi DÉPOT
 
Documento.rtf 1
Documento.rtf 1Documento.rtf 1
Documento.rtf 1
 
jayson certificate
jayson certificatejayson certificate
jayson certificate
 
Pour le don d'organes
Pour le don d'organesPour le don d'organes
Pour le don d'organes
 
Les visites de fin d'année de pigeault immobilier programmes neufs à rennes
Les visites de fin d'année de pigeault immobilier   programmes neufs à rennesLes visites de fin d'année de pigeault immobilier   programmes neufs à rennes
Les visites de fin d'année de pigeault immobilier programmes neufs à rennes
 
Certifications
CertificationsCertifications
Certifications
 
L'introduction du monnayage en babylonie
L'introduction du monnayage en babylonieL'introduction du monnayage en babylonie
L'introduction du monnayage en babylonie
 
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...
Renée Pinard - ACFAS 2013 - Le transfert de connaissances : où débute et où s...
 

Similaire à Kruskal (20)

Kruskal
KruskalKruskal
Kruskal
 
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
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
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
 

Plus de Alhe' Wero

Plus de Alhe' Wero (6)

Patrones
PatronesPatrones
Patrones
 
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 () * /