Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ALUMNOS: BARRIENTOS TIRADO CARLOS BALAM GARCIA BARRADAS FRANCISCO HIRAM MUNGUIA CHACON EMMANUEL JORDAN
Anlisis de Algoritmos
Proyecto Final
Pgina 1
Introduccin
El anlisis de algoritmos es de suma importancia ya que usualmente existen varios algoritmos disponibles para una aplicacin particular y quisiramos conocer cul es el mejor o ms apropiado. Cuando resolvemos un problema nos vemos frecuentemente enfrentando este problema (eleccin de programas). En este sentido la pregunta clave es: Cuntos recursos (tiempo de ejecucin y espacio en memoria) requiere un algoritmo dado? Para responder esta pregunta tpicamente se siguiente los siguientes pasos: 1. Identificar las caractersticas de los datos de entrada y decidir el tipo de anlisis a realizar. 2. Identificar las operaciones abstractas. 3. Efectuar el anlisis matemtico. Usualmente el anlisis de un algoritmo incluye:
un caso medio y su medida de dispersin (indicacin cuantitativa de cun cercano al caso promedio esperamos que trabaje nuestro algoritmo). un caso pesimista (peor caso). un caso optimista (mejor caso).
En el presente trabajo mencionaremos diferentes estructuras algortmicas, las cuales nos darn una idea clara de cmo es que funcionan y se conforman estos algoritmos. Dando pauta para el anlisis e interpretacin de los resultados obtenidos.
Anlisis de Algoritmos
Proyecto Final
Pgina 2
Burbuja
import java.util.Random; import java.util.Scanner; import java.io.*; public class Burbuja { public static void burbuja() { System.out.println("Longitud del arreglo"); Scanner sc=new Scanner(System.in); int longitud=sc.nextInt(); int burbuja[]=new int[longitud]; for(int i=0;i<longitud;i++) {
burbuja[i]=(int) (Math.random() * 100); } int buffer,i,j; long inicio=System.nanoTime(); long total=Runtime.getRuntime().totalMemory(); for(i=0;i<burbuja.length;i++) { for(j=0;j<burbuja.length;j++) { if(burbuja[i]<burbuja[j])
Anlisis de Algoritmos
Proyecto Final
Pgina 3
} for(i=0;i<longitud;i++) { System.out.print(burbuja[i]+"\t");
} System.out.println(); long fin=System.nanoTime(); long libre=Runtime.getRuntime().freeMemory(); System.gc(); System.out.println("Tiempo de ejecucuion: "+(fin-inicio)+" nanosegundos"); System.out.println("memoria ram: "+(total-libre)+" bytes"); } }
Anlisis de Algoritmos
Proyecto Final
Pgina 4
Anlisis de Algoritmos
Proyecto Final
Pgina 5
Anlisis de Algoritmos
Proyecto Final
Pgina 6
Anlisis de Algoritmos
Proyecto Final
Pgina 7
Burbuja optimizada
import java.util.Random; import java.util.Scanner; import java.io.*; public class Burbuja { public static void burbuja() { System.out.println("Longitud del arreglo"); Scanner sc=new Scanner(System.in); int longitud=sc.nextInt(); int burbuja[]=new int[longitud]; for(int i=0;i<longitud;i++) {
burbuja[i]=(int) (Math.random() * 100); } int buffer,i,j; long inicio=System.nanoTime(); long total=Runtime.getRuntime().totalMemory(); for(i=0;i<burbuja.length;i++) { for(j=0;j<burbuja.length;j++)
Anlisis de Algoritmos
Proyecto Final
Pgina 8
} for(i=0;i<longitud;i++) { System.out.print(burbuja[i]+"\t");
} System.out.println(); long fin=System.nanoTime(); long libre=Runtime.getRuntime().freeMemory(); System.gc(); System.out.println("Tiempo de ejecucuion: "+(fin-inicio)+" nanosegundos"); System.out.println("memoria ram: "+(total-libre)+" bytes"); } }
Anlisis de Algoritmos
Proyecto Final
Pgina 9
Anlisis de Algoritmos
Proyecto Final
Pgina 10
Anlisis de Algoritmos
Proyecto Final
Pgina 11
Anlisis de Algoritmos
Proyecto Final
Pgina 12
Finobacci
import java.util.Random; import java.util.Scanner; import java.io.*; public class Burbuja { public static void burbuja() { System.out.println("Longitud del arreglo"); Scanner sc=new Scanner(System.in); int longitud=sc.nextInt(); int burbuja[]=new int[longitud]; for(int i=0;i<longitud;i++) {
burbuja[i]=(int) (Math.random() * 100); } int buffer,i,j; long inicio=System.nanoTime(); long total=Runtime.getRuntime().totalMemory(); for(i=0;i<burbuja.length;i++) {
Anlisis de Algoritmos
Proyecto Final
Pgina 13
} for(i=0;i<longitud;i++) { System.out.print(burbuja[i]+"\t");
} System.out.println(); long fin=System.nanoTime(); long libre=Runtime.getRuntime().freeMemory(); System.gc(); System.out.println("Tiempo de ejecucuion: "+(fin-inicio)+" nanosegundos"); System.out.println("memoria ram: "+(total-libre)+" bytes"); } }
Anlisis de Algoritmos
Proyecto Final
Pgina 14
Anlisis de Algoritmos
Proyecto Final
Pgina 15
Anlisis de Algoritmos
Proyecto Final
Pgina 16
Anlisis de Algoritmos
Proyecto Final
Pgina 17
Heap Sort
import java.util.Random; import java.util.Scanner; import java.io.*; public class HeapSort { public static void ordenacionMonticulos(int[] v) { final int N = v.length; for(int nodo = N/2; nodo>=0; nodo--) hacerMonticulo(v, nodo, N-1); for(int nodo = N-1; nodo>=0; nodo--) { int tmp = v[0]; v[0] = v[nodo]; v[nodo] = tmp; hacerMonticulo(v, 0, nodo-1); } }
public static void hacerMonticulo(int[] v, int nodo, int fin) { int izq = 2*nodo+1;
Anlisis de Algoritmos
Proyecto Final
Pgina 18
int der = izq+1; int may; if(izq>fin) return; if(der>fin) may=izq; else may= v[izq]>v[der]?izq:der; if(v[nodo] < v[may]) { int tmp = v[nodo]; v[nodo] = v[may]; v[may] = tmp; hacerMonticulo(v, may, fin); } } public static void heap() { System.out.println("Longitud del arreglo"); Scanner sc=new Scanner(System.in); int longitud=sc.nextInt(); int a[]=new int[longitud]; for(int i=0;i<longitud;i++) {
Anlisis de Algoritmos
Proyecto Final
Pgina 19
ordenacionMonticulos(a); for(int i=0;i<longitud;i++) { System.out.print(a[i]+"\t"); } System.out.println(); long fin=System.nanoTime(); long libre=Runtime.getRuntime().freeMemory(); System.gc(); System.out.println("Tiempo de ejecucuion: "+(fin-inicio)+" nanosegundos"); System.out.println("memoria ram: "+(total-libre)+" bytes"); } }
Anlisis de Algoritmos
Proyecto Final
Pgina 20
Anlisis de Algoritmos
Proyecto Final
Pgina 21
Anlisis de Algoritmos
Proyecto Final
Pgina 22
Merge sort
Anlisis de Algoritmos
Proyecto Final
Pgina 23
Anlisis de Algoritmos
Proyecto Final
Pgina 24
Anlisis de Algoritmos
Proyecto Final
Pgina 25
Multiplicacion recursiva
Anlisis de Algoritmos
Proyecto Final
Pgina 26
Anlisis de Algoritmos
Proyecto Final
Pgina 27
Anlisis de Algoritmos
Proyecto Final
Pgina 28
Quicksort
Anlisis de Algoritmos
Proyecto Final
Pgina 29
Anlisis de Algoritmos
Proyecto Final
Pgina 30
Anlisis de Algoritmos
Proyecto Final
Pgina 31
Radixsort
Anlisis de Algoritmos
Proyecto Final
Pgina 32
Anlisis de Algoritmos
Proyecto Final
Pgina 33
Anlisis de Algoritmos
Proyecto Final
Pgina 34
Anlisis de Algoritmos
Proyecto Final
Pgina 35
shellsort
Anlisis de Algoritmos
Proyecto Final
Pgina 36
Conclusin
En conclusin podemos mencionar que el anlisis de algoritmos es una parte importante de la estructura computacional ms amplia, que provee los recursos que necesita cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones resultan ser bastante tiles en la bsqueda de algoritmos eficientes. A la hora de realizar un anlisis de algoritmos es conveniente calcular su complejidad en su sentido, es decir, para un tamao de entrada suficientemente grande. Lo esencial de la investigacin era hacer hincapi en la complejidad en el tiempo y espacio, as como la eficiencia de los algoritmos. Como ya se menciono anteriormente la complejidad de tiempo es ms que nada el clculo del tiempo que tarda en ejecutarse el algoritmo de igual manera la complejidad de espacio, es la memoria que ocupa dicho algoritmo y por ltimo la eficiencia nos ayuda a saber cules son las medidas adecuadas a tomar para el uso de estos tipos de algoritmos de acuerdo al problema a resolver. Conforme lo mencionado el analizar una estructura o la funcionalidad de un algoritmo no es cosa fcil y que se tome a la ligera, se deben de tener en cuenta estos factores los cuales nos ayudaran a implementar o elegir un algoritmo de forma eficiente y que nos ayude a resolver el problema-
Anlisis de Algoritmos
Proyecto Final
Pgina 37