Sei sulla pagina 1di 37

UNIVERSIDAD VERACRUZANA

FACULTAD DE CONTADURIA, ADMINISTRACION Y SISTEMAS COMPUTACIONALES ADMINISTRATIVOS

EXPERIENCIA EDUCATIVA: ANALISIS DE ALGORITMOS

TRABAJO: PROYECTO FINAL

ALUMNOS: BARRIENTOS TIRADO CARLOS BALAM GARCIA BARRADAS FRANCISCO HIRAM MUNGUIA CHACON EMMANUEL JORDAN

FECHA DE ENTREGA: 12 DE JUNIO DE 2012

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

{ buffer=burbuja[j]; burbuja[j]=burbuja[i]; burbuja[i]=buffer; } }

} 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

{ if(burbuja[i]<burbuja[j]) { buffer=burbuja[j]; burbuja[j]=burbuja[i]; burbuja[i]=buffer; } }

} 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(j=0;j<burbuja.length;j++) { if(burbuja[i]<burbuja[j]) { buffer=burbuja[j]; burbuja[j]=burbuja[i]; burbuja[i]=buffer; } }

} 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++) {

a[i]=(int) (Math.random() * 100); } long inicio=System.nanoTime(); long total=Runtime.getRuntime().totalMemory();

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

Potrebbero piacerti anche