Descargar

Algoritmos de ordenación

Enviado por Pablo Turmero


Partes: 1, 2

    edu.red

    Vamos a comparar los algoritmos de ordenación mas conocidos que se usan hoy día, a saber:

    Bubblesort Insertion Sort Selection Sort Quicksort (que es una optimización de Tree Sort) Mergesort 1 Algoritmos que vamos a comparar

    edu.red

    Para nuestra comparativa vamos a usar un lenguaje imperativo frecuentemente utilizado como es Java; y como lenguaje funcional vamos a usar Haskell. 2 ¿Qué lenguajes vamos a usar?

    edu.red

    Esta comparativa la pretendíamos realizar con las siguientes condiciones: Un array con un número determinado de elementos dependiendo del algoritmo que usemos para que no sea demasiado costosa la medida de tiempos. Estos elementos serán números aleatorios. Mediremos el tiempo que tarda cada ordenación ignorando la generación de números aleatorios. 3 ¿Cómo pensábamos realizar la comparativa?

    edu.red

    Usaremos un algoritmo iterativo para bubble sort e insertion sort en Java y sus versiones recursivas en Haskell.

    La máquina que vamos a usar para realizar la comparativa tiene las siguientes características: CPU: Intel Core i7-2600 @3.40 GHz Memoria RAM: 8 GB DDR3 S.O: Windows 7 4 ¿Cómo pensábamos realizar la comparativa?

    edu.red

    La eficiencia temporal de los algoritmos es muy distinta. Algunos tardan minutos en lo que otros tardan meses. No queremos comparar entre sí los algoritmos, ya que sabemos lo que van a tardar más o menos; sino que vamos a comparar entre los 2 lenguajes que hemos dicho anteriormente.

    Solución: El número de elementos a ordenar lo ajustaremos según el algoritmo. 5 Problemas que se plantean: Velocidad de los algoritmos

    edu.red

    Haskell utiliza internamente listas enlazadas. Java puede utilizar Arrays y Listas. Si utilizamos Arrays, tenemos ventaja ya que el acceso a la posición de memoria es inmediato. Las listas enlazadas son mucho mas eficientes en Haskell que en Java.

    Solución: Analizar 4 opciones: Haskell interpretado, Haskell compilado, Java con Arrays y Java con LinkedList. 6 Problemas que se plantean: Estructuras de datos

    edu.red

    7 Algoritmos de ordenación

    edu.red

    Se basa en en comparar cada par de elementos adyacentes. De cada par de elementos uno es mas ligero (menor) que el otro.

    Si el elemento mas ligero está a la derecha, entonces cambia de lugar. 8 Bubble Sort

    edu.red

    Se van comparando cada par de elementos adyacentes de la lista. Si se llega al final de la lista se vuelve al principio hasta que la lista quede ordenada.

    9 Bubble Sort

    edu.red

    for (int i=1; i< a.length;i++) { for(int j=0;j< a.length-1;j++) { if (a[j]>a[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } 10 Bubble Sort: Implementación en Java

    edu.red

    bsort :: Ord a => [a] -> [a] bsort s = case _bsort s of t | t == s -> t | otherwise -> bsort t where _bsort (x:x2:xs) | x > x2 = x2:(_bsort (x:xs)) | otherwise = x:(_bsort (x2:xs)) _bsort s = s 11 Bubble Sort: Implementación en Haskell

    edu.red

    3000 numeros aleatorios.

    Java con listas enlazadas: 33.0202s Haskell (interpretado): 5.9411s Haskell (compilado): 0.3382 s Java con Arrays: 15,3ms 12 Bubble Sort: Conclusiones

    Partes: 1, 2
    Página siguiente