Java

Métodos de ordenación de forma concurrente

INTRODUCCIÓN

Un hilo de ejecución, en sistemas operativos, es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.(wikipedia.org)

Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden e ese dato modificado inmediatamente.

PROBLEMA

Se trata de ordenar un array de datos de N dimensión mediante 3 métodos de ordenación. Estos métodos se ejecutarán de forma concurrente, es decir, “al mismo tiempo”. Debido a que ya hay bastante información en Internet sobre los hilos, no tiene caso explicar su funcionamiento, en vez de ello, quien no tenga muy claro el tema de hilos, les dejo algunos enlaces que deben leer antes de continuar:

http://rt00149b.eresmas.net/Otras/ConcurrenciaJAVA/

http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte10/cap10-1.html

http://www.chuidiang.com/java/hilos/hilos_java.php

HERRAMIENTAS

  • Sistema Operativo Linux (Mandriva 2007)
  • JDK 1.6
  • IDE NetBeans 6.0

DESARROLLO

uml_ordenacion

Como se observa en el Diagrama de clases UML, el programa se compone de 3 clases:

1.- Burbuja
2.- Inserción
3.- QuickSort

Y una clase principal desde donde se genera el array con los elementos aleatorios a ordenar y se ejecutan los 3 hilos correspondientes a los 3 métodos por los cuales se ordenará el array.

Estas tres clases implementan a la interfaz Runnable para poder hacer uso de los hilos, también se pudo haber heredado de la clase Thread. En el método run de Runnable es donde se debe colocar el código que se desea ejecutar como un hilo, en nuestro caso es donde se codificarán los algoritmos de Burbuja, Inserción, y QuickSort. Además, como se observa, se cuenta con un método imprimir() el cuál imprimirá el array ya ordenado.

La clase principal es Test, desde donde se pide al usuario introduzca la dimensión del array, para este fin se utiliza la clase Scanner implementada a partir del JDK 1.5 que toma como parámetro la salida estandar System.in

Scanner in = new Scanner(System.in);

Y con sus métodos, nextInt, nextDouble, etc., se obtiene la salida del teclado.

Para generar los números aleatorios se utiliza la clase Random localizada en el paquete java.util

public void generaDatos()

{
System.out.println("\n ************* DATOS GENERADOS ALEATORIAMENTE***************\n");
for(int i = 0; i <= datos.length-1; i++)
{
dato = Double.parseDouble(formato.format(rnd.nextDouble()*100));
datos[i] = dato;
System.out.println(i + ".- "+ dato);
}
}

La diferencia de tiempos entre los 3 métodos implementados es muy notoria, QuickSort es un método bastante rápido para la ordenación de datos, mientras que el método burbuja tarda en ordenar 100,000 datos en más de 1 minuto, el QuickSort los ordena en menos de 2 segundos.

A continuación algunas pantallas del programa en ejecución:

ordenacion3.png

ordenacion4.png

ordenacion.png

Código Fuente:

http://mundobyte.hostjava.net/blog/?p=92

Saludos!!

63 comentarios en “Métodos de ordenación de forma concurrente

  1. Me parecio muy interesante el desarrollo que llevo acabo, me puedes hacer el favor de darme el codigo fuente

    Muchas gracias

    Juan Sebastian

  2. Muy interesante el tema de los hilos, quisiera observar el codigo , te agradeceria muchisimo si me lo envias a mi correo.

    Mil gracias

    Alberto Benitez

  3. Me parece super bueno el ejemplo, serias tan amable de facilitarme el codigo fuente.

    Es que estoy haciendo un trabajo donde tengo que demostrar un ejemplo con threads y otro sin ellos.

    Gracias !!!

  4. Hola, muy interezante. Justo me dejaron un trabajo sobre esto.. ahi buscando llegue a este post.. Le agradeceria si pudiera mandarme el codigo a mi correo..🙂 , Thankkkk….

  5. Hola muy buen trabajo, yo voy empezando con esto de netbeans me gustaria mucho si me mandaras el codigo para ver como se hacen esas cosas en este programa de antemano muchas gracias!!! espero tu respuesta. oscar

  6. ei me podrias mandar tu codigo, actualemente estoy viendo eso en clase y me gustaria ver como se realiza la ordenacion para entenderle mas a los metodos.🙂

  7. hi…. me gustaria que me pasaras el codigo necesito hacer una investigacion sobre los diferentes lenguajes de programacion sobres los metodos…

    te lo agradeceria mucho

  8. oye me parece super bien lo de los metodos de ordenamiento , de echo en la escuela para un trabajo final me encargaron algo de metodos de ordenacion
    me podrias proporcionar el codigo fuente
    del metodo de quicksort o el de burbuka??

    =) te lo agradecer enormemente…!
    saludos

  9. Hola a todos!

    Les propongo que quien necesite el ejemplo, me mande un correo electrónico solicitandomelo. Próximamente comprare un pequeño hosting para pasar toda esta información a mi página personal.

    Saludos!!

  10. que tal camarada, se me hizo muy interesante tu trabajo, crees que me puedas ayudar, pasandome tu codigo fuente, es que es lo que precisamente ocupo para un trabajo de mi escuela, en una materia que se llama tiempo real, y con esto me harias un gran favor. gracias de ante mano

  11. Hola muchas gracias por tu gran servicio aqui en este página… por favor me puedes enviar los algoritmos de los métodos de ordenamiento y busqueda porfavor?
    Gracias…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s