Professional Documents
Culture Documents
FACULTAD DE INGENIERA DE
SISTEMAS
ALGORITMOS (SIC324)
DEBER No: 2
Alumno:
Deber de:
Prctica No.: 02
Tema:
Objetivos:
Marco terico:
Ejemplos
Ejemplo
Caractersticas
Formas de Representacin
Completos
PREORDEN: ABDECFG
INORDEN: DBEAFCG
POSTORDEN: DEBFGCA
Por nivel: ABCDEFG
Consultar tema 2:
https://educacionvirtual.epn.edu.ec/course/view.php?
id=292§ion=3
Arboles AVL
Consultar tema 2:
https://educacionvirtual.epn.edu.ec/course/view.php?
id=292§ion=3
Ejercicios
a. rbol binario 1
Preorden: ABDGKCEHIFJ
Inorden: GKDBAHEICFJ
Postorden: KGDBHIEJFCA
Por Nivel: ABCDEFGHIJK
b. rbol binario 2
Preorden: ABDGEHICFJK
Inorden: GDBHEIAJKFC
Postorden: GDHIEBKJFCA
Por Nivel: ABCDEFGHIJK
Desarrollo de la prctica:
1) Obtener el recorrido de los rboles siguientes, en preorden, inorden y
postorden y segn su nivel. Disear e implementar cada uno de los
algoritmos para su recorrido
rbol Binario 1
Preorden: ABDGKCEHIFJ
Inorden: GKDBAHEICFJ
Postorden: KGDBHIEJFCA
Por Nivel: ABCDEFGHIJK
rbol Binario 2
Preorden: ABDGEHICFJK
Inorden: GDBHEIAJKFC
Postorden: GDHIEBKJFCA
Por Nivel: ABCDEFGHIJK
Diseo
Preorden (APNODO)
Inorden(APNODO)
Posorden(APNODO)
IMPLEMENTACION
Clase Aplicacin
package com.epn;
import javax.swing.JOptionPane;
do {
opcion = Integer
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
.parseInt(JOptionPane.showInputDialog(
null,
"MENU",
switch (opcion) {// switch para ver que opcion del menu se escojio
case 1:
int sw = 0;
do {
int valor =
Integer.parseInt(JOptionPane.showInputDialog(
sw = JOptionPane.showConfirmDialog(null,
break;
case 2:
int valor =
Integer.parseInt(JOptionPane.showInputDialog(null,
break;
case 3:
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
System.out.println("\n");
break;
case 4:
System.out.println("\n");
break;
case 5:
System.out.println("\n");
break;
case 6:
opcion = 6;
break;
default:
break;
Clase Nodo
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
package com.epn;
super();
return izq;
this.izq = izq;
return der;
this.der = der;
return info;
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
this.info = info;
} else {
} else {
} else {
Clase Arbol
package com.epn;
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
import javax.swing.JOptionPane;
public Arbol() {
super();
return raiz;
this.raiz = raiz;
} else {
return;
return;
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
return;
Anlisis
INSERCION_ABB(APNODO, INFOR)
Diseo
INICIO
Si(INFOR < APNODO.INFO) entonces
Si(APNODO^.IZQ != Null) entonces
Crear(NODO) {Se crea un nuevo nodo}
Hacer NODO^.IZQ Null NODO^.DER Null
NODO^.INFO INFOR
APNODO^.IZQ NODO
Sino
Regresar a la INSERCION_ABB(APNODO^.IZQ, INFOR)
{Llamada Recursiva}
FIN Si
Sino
Si(INFOR> APNODO^.INFO) entonces
Si(APNODO^.DER != Null) entonces
Crear(NODO) {Se crea un nuevo nodo}
Hacer NODO^.IZQ Null NODO^.DER Null
NODO^.INFO INFOR
APNODO^.DER NODO
Sino
Regresar a la INSERCION_ABB(APNODO^.DER,
INFOR)
{Llamada Recursiva}
FIN Si
Sino
Escribir El nodo Ya se encuentra en el rbol
FIN Si
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
FIN SI
FIN
Ejemplo:
Insertar las siguientes claves en el Arbola Binario de Bsqueda que esta
vaco
120-87-43-65-140-99-130-22-56
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Eliminacion en un ABB
ELIMINACION_ABB(APNODO, INFOR)
INICIO
Si(APNODO != Null) entonces
Si(INFOR < APNODO^.INFO) entonces
Regresar a ELIMINACION_ABB(APNODO^.IZQ, INFOR)
Sino
Si(INFOR>APNODO^.INFOR) entonces
Regresar a ELIMINACION_ABB(APNODO^.DER,
INFOR)
Sino
Hacer OTRO NODO
Si(OTRO^.DER = Null) entonces
Hacer APNODO OTRO^.IZQ
Sino
SI(OTRO^.DER = Null) entonces
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Ejemplo:
Eliminar las siguientes claves
22-99-87-120-140-135-56
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
5) Aplicando los arboles AVL insertar las claves 70, 82, 85, 68, 39
FE=0 FE=1
FE=2
70 70 70
FE=1 FE=1
82
82
FE=0
85
FE=0
82 FE=-1
82
FE=0 FE=0
FE=-1 FE=0
70 85
70 85
FE=0
68
FE=-2 FE=-1
82 82
FE=-1
FE=0 FE=0
68
39 70
FE=0
39
Analisis
INSETAR_BALANCEO (NODO,BO,INFOR)
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Diseo
INICIO
Si(NODO != Null) entonces
Si(INFOR<NODO^.INFOR) entonces
Regresar a INSERTAR_BALANCEO(NODO^.IZQ,INFOR)
{Llamada recursiva}
SI(BO=VERDADERO) entonces
Si(NODO^.FE)
=1:Hacer NODO^.FE 0 y BO
FALSO
=0:Hacer NODO^.FE -1
=-1:Hacer NODO1 NODO^.IZQ
{Reconstruccion del arbol}
Si(NODO^.FE<=0) {Rotacion
II}
Hacer NODO^.IZQ
NODO1^.DER
NODO1^.DER NODO
NODO^.FE 0 y NODO
NODO1
{Termina la rotacion II}
Sino {Rotacion ID}
Hacer NODO2
NODO1^.DER
NODO^.IZQ
NODO2^.DER
NODO2^.DER NODO
NODO1^.DER
NODO2^.IZQ
NODO2^.IZQ NODO1
Si(NODO2^.FE=-1)
entonces
Hacer NODO^.FE
1
Sino
Hacer NODO^.FE
0
FIN Si
Si(NODO2^.FE=1)
entonces
Hacer NODO1^.FE
-1
Sino
Hacer NODO1^.FE
0
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
FIN Si
Hacer NODO NODO2
{Termina rotacio ID}
FIN Si
Hacer NODO^.FE 0 y BO
FALSO
FIN Si
FIN Si
Sino
Si(INFOR>NODO^.INFO) entonces
Regresar a
INSERTAR_BALANCEO(NODO^.DER,INFOR,BO)
{Llamada recursiva}
Si(BO=VERDADERO) entonces
Si(NODO^.FE)
=1:Hacer NODO^.FE 0
y BO FALSO
=0:Hacer NODO1^.FE
1
=-1:Hacer NODO1
NODO^.DER
{Reconstruccion del
arbol}
Si(NODO^.FE>=0)
{Rotacion DD}
Hacer NODO^.DER
NODO1^.IZQ
NODO1^.IZQ
NODO
NODO^.FE 0 y
NODO NODO1
{Termina la rotacion
DD}
Sino {Rotacion DI}
Hacer NODO2
NODO1^.IZQ
NODO^.DER
NODO2^.IZQ
NODO2^.IZQ
NODO
NODO1^.IZQ
NODO2^.DER
NODO2^.DER
NODO1
Si(NODO2^.FE=
1) entonces
Hacer
NODO^.FE -1
Sino
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Hacer
NODO^.FE 0
FIN Si
Si(NODO2^.FE=
-1) entonces
Hacer
NODO1^.FE 1
Sino
Hacer
NODO1^.FE 0
FIN Si
Hacer NODO
NODO2
{Termina rotacio
DI}
FIN Si
Hacer NODO^.FE 0 y
BO FALSO
FIN Si
FIN Si
Sino
Escribir La informacion ya se encuentra en el
arbol
FIN Si
FIN Si
Sino
CREAR(NODO)
Hacer NODO^.INFO INFOR NODO^.IZQ Null
NOSO^.DER Null
NODO^.FE 0 y BO VERDADERO
FIN Si
FIN
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
IMPLEMENTACION
CLASE APLICACIN
package com.epn;
import javax.swing.JOptionPane;
nodo\n3.-Salida","MENU",JOptionPane.INFORMATION_MESSAGE));//opciones
del menu principal
switch (opcion) {// switch para ver que opcion del menu se
escojio
case 1:
int sw = 0;
do {
int valor =
Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el valor a
insertar"));//aqui se ingresa lo que deseamos insertar en un nodo
avl.insetar(valor);//llamamos a la funcion insertar de la
clase arbolAvl
sw = JOptionPane.showConfirmDialog(null,"Desea seguir
ingresando mas nodos");//un control para verificar si deseamos
ingresar mas nodos
} while (sw == JOptionPane.YES_OPTION);//mientras la opcion
sea si se seguira ingresando mas nodos
System.out.println("\t NUEVO ARBOL AVL");
avl.preOrden(avl.obtenerRaiz());//llamamos a la funcion
recorridoPreOrden de la clase arbolAvl
break;
case 2:
int valor
=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el valor a
insertar "));//aqui se ingresa lo que deseamos insertar en un nodo
avl.insetar(valor);//llamamos a la funcion insertar de la
clase arbolAvl
System.out.println("\t NUEVO ARBOL AVL");
avl.preOrden(avl.obtenerRaiz());//llamamos a la funcion
recorridoPreOrden de la clase arbolAvl
break;
case 3:
opcion = 3;
break;
default:
break;
}
} while (opcion != 3);
}
CLASE NODO
package com.epn;
CLASE ABOLAVL
package com.epn;
import javax.swing.JOptionPane;
public class ArbolAvl {
private Nodo raiz; //se crea una variable de tipo nodo llamada
raiz
public ArbolAvl() {
super();
this.raiz = null; // El constructor inicializa el nodo raiz con
null
}
//metodos para obtener la raiz
public Nodo obtenerRaiz(){
return raiz;
}
}
//metodo para obtener el factor de equilibrio
public int obtenerFE(Nodo x){
if(x==null){ //si el nodo es igual a nulo
return -1; //estonces retorna cin un valor de -1
}else{//sino
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
subAr.fe=Math.max(obtenerFE(subAr.izq),obtenerFE(subAr.der))
+1;//se obtiene el fe del subAr entre el subAr de la izq y derecha mas
1 para que quede bien quilibrado
}
return nuevoPadre;//se retorna el nuevo padre
}
//metodo para la insercion de un nodo
public void insetar (int dato){
Nodo nuevo = new Nodo(dato);// se crea un uevo nodo y se
inicializa con el valor ingresado
if(raiz==null){//si la raiz es igual a nulo
raiz=nuevo; //la raiz toma el valor del nuevo nodo creado
}else{//sino
raiz=Insertar(nuevo, raiz);//se realiza un recursividad con
el nuevo y la raiz
}
Analisis
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
ALGORITMO DIJKSTRA
N Numero de vertices
M Matriz dde nxn
S,D Arreglos
Diseo
DIJKSTRA(N)
INICIO
Agregar el vertice 1 a S
Repetir con i desde 2 a N
Elegirun vertice V en (V-S) tal que D[V] sea el valor minimo
Agregar V a S
Repetir para cada vertice W en (V-S)
Hacer D[W] minimo (D[W], D[V] + M[V,W])
FIN Repetir
FIN Repetir
FIN
IMPLEMENTACION
CLASE DIJKSTRA
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package proyectoestructuras;
import java1.uac.Grafo;
import java1.uac.LimiteException;
/**
*
* @author Kevin
*/
public class Dijkstra {
private int m_Costo[][];
private int ultimo[];
private int D[];
private boolean F[];
private int s,n;
D=new int[n];
F=new boolean [n];
}
for(int i=0;i<n;i++){
int v = minimo();
F[v]=true;
for(int w=0;w<n;w++){
if(!F[w]){
if((D[v]+m_Costo[v][w])<D[w]){
D[w]=D[v]+m_Costo[v][w];
ultimo[w]=v;
}
}
}
}
for(int i=0;i<n;i++){
System.out.println("costo minimo a "+i+": "+D[i]);
}
}
public int minimo(){
int mx = Grafo.inf;
int v=1;
for(int j=0;j<n;j++){
if(!F[j]&&(D[j]<=mx)){
mx=D[j];
v=j;
}
}
return v;
}
}
}
CLASE APLICACIN
package proyectoestructuras;
import java.util.Scanner;
import java1.uac.Grafo;
import java1.uac.GrafoCol;
import java1.uac.LimiteException;
g.insArco(0, 1, 55);
g.insArco(0, 2, 110);
g.insArco(0, 3, 79);
g.insArco(1, 3, 70);
g.insArco(2, 0, 123);
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
g.insArco(2, 3, 40);
g.insArco(2, 4, 180);
g.insArco(3, 2, 89);
g.insArco(3, 4, 105);
return g;
}
}
ALGORITMO FLOYD
Analisis
FLOYD(N)
N Numero de vertices
M Matriz dde nxn
I,K,J Tipo entero
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Diseo
INICIO
Repetir con K desde 1 hasta N
Repetir con I desde 1 hasta N
Repetir con K desde 1 hasta N
Si(
M IK + M KJ <M IJ ) entonces
Hacer
M IJ M IK + M KJ
FIN Si
FIN Repetir
FIN Repetir
FIN Repetir
FIN
FLOYD_GUARDAR_VERTICE(N)
N Numero de vertices
M,T Matriz dde nxn
I,K,J Tipo entero
INICIO
Repetir con K desde 1 hasta N
Repetir con I desde 1 hasta N
Repetir con K desde 1 hasta N
Si(
M IK + M KJ <M IJ ) entonces
Hacer
M IJ M IK +M KJ y T IJ K
FIN Si
FIN Repetir
FIN Repetir
FIN Repetir
FIN
IMPLEMENTACION
CLASE APLICACIN
package kevin.jimenez;
import javax.xml.crypto.dsig.CanonicalizationMethod;
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
caminos[i][j]="";
caminosAuxiliares[i][j]="";
}
}
for(k=0;k<vertices;k++){
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
aux=MatrizAdyacencia[i][j];
aux1=MatrizAdyacencia[i][k];
aux2=MatrizAdyacencia[k][j];
aux3=aux1+aux2;
minimo=Math.min(aux, aux3);
if(aux!=aux3){
if(minimo==aux3){
caminoRecorrido="";
caminosAuxiliares[i][j]=k+"";
caminos[i]
[j]=caminosR(i,j,caminosAuxiliares,caminoRecorrido)+(k+1);
}
}
MatrizAdyacencia[i][j]=(long) minimo;
}
}
}
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
cadena=cadena+"["+MatrizAdyacencia[i][j]+"]";
}
cadena=cadena+"\n";
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
////////////////////////
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
if(MatrizAdyacencia[i][j]!=1000000000){
if(i!=j){
if(caminos[i][j].equals("")){
caminitos+="de ("+(i+1)+"---
>"+(j+1)+") irse por... ("+(i+1)+", "+(j+1)+")\n";
}
else{
caminitos+="de ("+(i+1)+"---
>"+(j+1)+") irse por... ("+(i+1)+", "+caminos[i][j]+", "+(j+1)+")\n";
}
}
}
}
}
return "la matriz de caminos mas cortos entre los
diferentes vertices es:\n"+cadena+
"\n los diferentes caminos mas cortos entre
vertices son:\n"+caminitos;
}
ALGORITMO WARSHALL
Analisis
WARSHALL (N)
N Numero de vertices
C Matriz dde nxn
M,I,K,J Tipo entero
Diseo
INICIO
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
IMPLEMENTACION
CLASE WARSHALL
package kevin.jimenez;
import java.io.BufferedReader;
import java.io.InputStreamReader;
//
}
System.out.println();
System.out.println();
System.out.println("Matriz de adyacencia correspondiente: ");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(warshall[i][j]);
}
System.out.println();
}
}
Anlisis de resultados:
ARBOL AVL
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
ALGORITMO DIJKSTRA
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
ALGORITMO FLOYD
ALGORITMO WARSHALL
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN
Conclusiones y recomendaciones:
Bibliografa:
[1 G. &. Cairo, Arboles, de Estructura de Datos, Mexico, Mc Graw Hill, pp.
] 178-202.