sábado, 3 de noviembre de 2018

Algoritmos de selección, definición y ejemplos.


Grupo 9: 
Thayris Navarro C. I.: 26.938.872; Ruben Farías C. I.: 27.719.360; Analis Caldera C. I.: 27.917.093

Definición:
En informática, es un algoritmo para encontrar el k-ésimo número más pequeño en una lista o un vector, este número se llama estadística de orden k. Esto incluye los casos de búsqueda de mínimo, máximo y mediana. El caso más simple de un algoritmo de selección consiste en encontrar el elemento mínimo (o máximo) por iteración en la lista, manteniendo un registro del mínimo (o máximo) en cada etapa de la iteración. 

Estos algoritmos sirven para ordenar  elementos de manera creciente o decreciente  en una lista de n elementos. Si hay n elementos que requieren ordenarse, se repetirá el proceso n-1 veces para conseguir el resultado deseado.  La mayoria de ellos, consisten en comparar los dos primeros elementos de una matriz e intercambiarlos si es necesario; luego se realiza la comparación con el primer y tercer término, se intercambian si se es requerido, y asi sucesivamente hasta comparar el primer y último término. Después se repite el mismo procedimiento con el segundo elemento, se compara este con cada uno de la matriz, y así con el resto de los elementos de la matriz dada.

Algoritmos de selección más usados:

- Selection sort: Este algoritmo de selección es el más fácil de implementar y recordar, pues es muy sencillo. Consiste en ordenar una matriz al encontrar repetidamente el elemento mínimo o maximo de la parte sin clasificar y colocarlo en su posición correcta en una matriz ordenada. Este algoritmo se basa en realizar comparaciones, y para que pueda hacer su trabajo, mantiene dos subarreglos en una matriz dada.

1) El sub-array que ya está ordenado.
2) Sub-array restante sin clasificar.



-Insertion sort: El orden de inserción funciona de una manera ligeramente diferente. Siempre mantiene una lista secundaria ordenada en las posiciones más bajas de la lista. Cada nuevo elemento se "inserta" de nuevo en la lista secundaria anterior, de modo que la lista secundaria ordenada es un elemento más grande. 


-Bubble sort: Es un algoritmo basado en la relación, en el que cada par de elementos adyacentes se compara y los elementos se intercambian si no están en orden.

 

-Shell sort: Este algoritmo utiliza la ordenación por inserción en elementos muy extendidos, primero para ordenarlos y luego clasifica los elementos menos espaciados. Este espaciado se denomina intervalo.


-Heapsort: implica construir una estructura de datos del montón a partir de la matriz dada y luego utilizar el montón para ordenar la matriz. Heapsort es una estructura de datos basada en árbol especial, que satisface las siguientes propiedades especiales del montón:

1. Propiedad de la forma: la estructura de los datos del montón es siempre un árbol binario completo, lo que significa que todos los niveles del árbol están completamente llenos.
2. Propiedad del montón: todos los nodos son mayores, iguales o menores que cada uno de sus hijos. Si los nodos principales son mayores que sus nodos secundarios, el montón se llama Max-Heap, y si los nodos principales son más pequeños que sus nodos secundarios, el montón se llama Min-Heap.


-Quicksort: es un algoritmo de dividir y conquistar. Selecciona un elemento como pivote y divide la matriz dada alrededor del pivote seleccionado. Hay muchas versiones diferentes de Quicksort que seleccionan pivote de diferentes maneras.


Ventajas y desventajas de los algoritmos de selección más usados:


         Ventajas
Desventajas
Selection sort
  • Es fácil su implementación
  • No requiere memoria adicional
  • Realiza pocos intercambios
  • Su rendimiento es constante
  • Es lento
  • Es poco eficiente cuando se usa en listas grandes o medianas
  • Realiza numerosa comparaciones
Insertion sort
  • Simple
  • Fácil de usar
  • Requerimiento mínimo de memoria
  • Eficiente en listas pequeñas
  • Presenta deficiencia en listas grandes
  • En algunos casos es lento
  • Realiza numerosas comparaciones
  •  No tiene buen  funcionamiento en comparación con otros algoritmos  de ordenamiento
Bubble sort
  • Es bastante sencillo
  • Es eficaz
  • Consumen  bastante tiempo en la computadora
  • Requiere muchas escrituras de memoria
Shell sort
  • No requiere memoria adicional
  • Mejor rendimiento que el método de Inserción clásico
  • 5 veces más rápido que Bubble sort
  • 2 veces más rápido que Insertion sort
  • Implementación algo confusa
  • Realiza numerosas comparaciones e intercambios
  • Es significativamente más lento  que Heapsort y Quicksort
Quick sort
  • Requiere pocos recursos en comparación a otros algoritmos de ordenamientos
  • No se requiere de espacio adicional durante ejecución
  • Un simple error en la implementación puede pasar sin detección , lo que provocaría un rendimiento pésimo
  • No es útil para las aplicaciones de entrada dinámica, donde se requiere reordenar una lista de elementos con nuevos valores
Heap sort
  • Funciona mejor con datos desordenados
  • Se desempeña tan bien como el Quicksort  y se comporta mejor que este último en los peores casos
  • No utiliza memoria adicional
  • No es estable ,ya que se comporta de manera ineficaz con datos del mismo valor
  • Método complejo











2 comentarios:

  1. Grupo: Argenis Chacon (28139550), Selena Velásquez (27.243.082) y José Suarez (24.591.130)

    ¡Excelente trabajo!, nos ha parecido instructivo, muy preciso y con claros ejemplos. En cuanto a los algoritmos de selección solo nos resta decir que:

    A diferencia de los algoritmos secuenciales (En los que una instrucción se ejecutaba una a continuación de la otra), los algoritmos de selección operan de acuerdo a una toma de decisiones por selección, como su nombre lo indica. Muchos algoritmos de selección son derivados por generalización de algún algoritmo de ordenación, y recíprocamente algunos algoritmos de ordenación pueden derivarse de repetidas aplicaciones de selección. El caso más sencillo de un algoritmo de selección es encontrar el mínimo (o máximo) elemento por iteración a través de la lista, manteniendo un registro del mínimo (o máximo) en cada paso de la iteración, y puede verse conexo al selection sort. Por el contrario, el caso que presenta más dificultad de un algoritmo de selección es hallar la mediana, y este necesariamente necesita n/2 memoria.

    Ordenando la lista o vector y luego seleccionando el elemento elegido, la selección puede ser reducido a la ordenación. Este método es ineficaz para seleccionar un único elemento, pero es eficiente cuando se realizan múltiples selecciones del vector, en este caso solo es necesario una ordenación costosa inicial, seguida por muchas operaciones poco costosas de selección – O(1) para un vector, aunque la selección es O(n) en una lista, incluso si está ordenada, debido a la falta de acceso aleatorio. En general, ordenar requiere O(n log n) tiempo, donde n es la longitud de la lista, aunque se conoce que un lower bound es posible con algoritmos de ordenación no comparativos como radix sort y counting sort. En vez de ordenar la lista completa o el vector, se puede utilizar ordenación parcial para seleccionar los k menores o k mayores elementos. Esto es mucho más efectivo que realizar un ordenando completo.

    Desde los inicios de la computación, el problema del ordenamiento ha atraído gran cantidad de investigación, tal vez debido a la complejidad de resolverlo eficientemente a pesar de su planteamiento simple y familiar. Por ejemplo, Bubble Sort fue analizado desde 1956. Aunque muchos puedan tomarlo como un problema resuelto, nuevos y útiles algoritmos de ordenamiento se siguen inventado hasta el día de hoy (por ejemplo, el ordenamiento de biblioteca se publicó por primera vez en el 2004). Los algoritmos de ordenamiento son comunes en las clases introductorias a la computación, donde la abundancia de algoritmos para el problema proporciona una gentil introducción a la variedad de conceptos núcleo de los algoritmos, como notación de O mayúscula, algoritmos divide y vencerás, estructuras de datos, análisis de los casos peor, mejor, y promedio, y límites inferiores.

    ResponderBorrar
  2. Gilmar Aray, Jesus Diaz y Maria Centeno

    Excelente publicación, bastante completa.

    como grupo nos gustaría aportar al tema un poco sobre las estructuras algorítmicas selectivas; sabemos que las estructuras lógicas selectivas se encuentran en el resultado algorítmico de casi todo tipo de problema. Las usamos cuando en la elaboración de la solución de un problema debemos tomar una decisión, para estipular un método o indicar una ruta alterna a proseguir.
    Esta toma de decisión comúnmente reflejada con un paralelogramo se basa en la evaluación de una o más exigencias que nos indicaran como opción o resultado, la rama a seguir.
    Hay momentos en que la toma de decisiones se ejecuta en cascada. Esto quiere decir que se toma una decisión, se define la rama respectiva a seguir se vuelve a tomar otra decisión y así sucesivamente. Por lo que para llegar a la solución de este problema debemos asignar prácticamente un árbol de decisión.
    Las organizaciones algorítmicas selectivas que se usan para la toma de decisiones lógicas las podemos catalogar de la siguiente manera : SI ENTONCES, cuando se habla de una estructura simple; SI ENTONCES/ SINO, cuando es una estructura selectiva doble; y por ultimo SI MULTIPLE cuando hablamos de una estructura selectiva como su nombre lo dice multiple.

    Cabe destacar que cuando a las estructuras selectivas las desarrollamos en cascada, podemos emplear una mezcla de las estructuras indicadas anteriormente en la clasificación.

    ResponderBorrar