¿Cuáles son los usos de diferentes algoritmos de clasificación como burbuja, selección, inserción, shell, fusión, montón, rápido, árbol, raíz, conteo y clasificación de cubetas en escenarios de la vida real?

Una clave importante para el diseño de algoritmos es usar la clasificación como un elemento básico, porque una vez que se ordena un conjunto de elementos, muchos otros problemas se vuelven fáciles. Considere las siguientes aplicaciones del mundo real.

Aplicaciones comunes de clasificación:

  • Búsqueda : la búsqueda binaria le permite probar si un elemento está en un diccionario en el tiempo O (lg n), una vez que todas las claves están ordenadas. El preprocesamiento de búsqueda es quizás la aplicación más importante de clasificación.
  • Par más cercano : dado un conjunto de n números, ¿cómo encuentra el par de números que tienen la menor diferencia entre ellos? Después de ordenar los números, el par de números más cercano se ubicará uno al lado del otro en algún lugar en orden ordenado.
  • Unicidad del elemento : ¿hay duplicados en un conjunto dado de n elementos? El algoritmo más eficiente es ordenarlos y luego hacer un escaneo lineal a través de ellos, verificando todos los pares adyacentes.
  • Distribución de frecuencia : dado un conjunto de n elementos, ¿qué elemento aparece la mayor cantidad de veces en el conjunto? Si los elementos están ordenados, podemos barrer de izquierda a derecha y contarlos, ya que todos los elementos idénticos se agruparán durante la clasificación.
  • Selección : ¿Cuál es el elemento más grande del conjunto? Si las claves se colocan en orden ordenado en una matriz, la k ésima más grande se puede encontrar en tiempo constante simplemente mirando la posición k de la matriz.
  • Cascos convexos : dados n puntos en dos dimensiones, ¿cuál es el polígono del área más pequeña que los contiene a todos? El casco convexo es como una banda elástica que se extiende sobre los puntos del avión y luego se suelta. Pero, ¿cómo podemos usar la clasificación para construir el casco convexo? Una vez que haya ordenado los puntos por la coordenada x , los puntos se pueden insertar de izquierda a derecha en el casco. Como el punto más a la derecha siempre está en el límite, sabemos que se insertará en el casco. Agregar este nuevo punto más a la derecha puede hacer que se eliminen otros, pero podemos identificar rápidamente estos puntos porque se encuentran dentro del polígono formado al agregar el nuevo punto. Estos puntos a eliminar serán vecinos del punto anterior que insertamos, por lo que serán fáciles de encontrar. El tiempo total es lineal después de que se haya realizado la clasificación.

Si bien algunos de estos problemas (en particular, la mediana y la selección) se pueden resolver en tiempo lineal utilizando algoritmos más sofisticados, la clasificación proporciona soluciones rápidas y fáciles a todos estos problemas. Es una aplicación rara cuya complejidad de tiempo es tal que la clasificación demuestra ser el cuello de botella, especialmente un cuello de botella que de otro modo podría haberse eliminado utilizando algoritmos más inteligentes.

Aplicaciones del mundo real de clasificación:

  • Clasificación de fusión: las bases de datos utilizan una clasificación de fusión externa para ordenar conjuntos de datos que son demasiado grandes para cargarlos completamente en la memoria. El factor determinante en este tipo es la reducción en el número de E / S de disco.
  • Clasificación de burbujas: La clasificación de burbujas se utiliza en la programación del control remoto de TV para clasificar canales en función de un tiempo de visualización más prolongado.
  • Clasificación de pila: la clasificación de pila se utiliza para leer códigos de barras en tarjetas de plástico. El servicio permite comunicarse con la base de datos para realizar comprobaciones constantemente para asegurarse de que todos estén en línea y tengan que informar constantemente estadísticas sobre qué lectores tuvieron el peor desempeño, cuáles obtuvieron la mayor / menor actividad del usuario, etc.
  • Clasificación rápida: los puntajes deportivos se organizan por clasificación rápida en función de la proporción de victorias y derrotas.
  • Clasificación de radix: eBay le permite ordenar los listados por el monto actual de la oferta aprovechando la clasificación de radix.
  • Selección de selección: el portal educativo K12 permite ordenar alfabéticamente la lista de alumnos mediante la selección de selección.

Espero que ya no te aburras estudiando los algoritmos de clasificación …

¡¡¡Disfruta aprendiendo!!!

Consulte este sitio para conocer el tiempo de ejecución de diferentes algoritmos de clasificación.
Big-O Algorithm Complexity Cheat Sheet
Ahora déjame señalarte la diferencia entre algunos algoritmos.
Si está teniendo una clase con 100 estudiantes y desea ordenar sus nombres, entonces la clasificación de burbujas será una elección eficiente, en comparación con las demás.
Ahora, si está creando un sitio web que almacena nombres de personas de diferentes lugares. Asegúrese de que esta lista sea enorme. Ahora no puede elegir el tipo de burbuja, ya que consume más tiempo ordenar la lista. Por lo tanto, su sitio puede volverse lento para consultas rápidas ( si se basa en el resultado de la ordenación).
En este caso, la ordenación por fusión o la ordenación rápida funciona bien. También existe una diferencia. La ordenación por fusión consume una cantidad adicional de espacio, mientras que la ordenación rápida no necesita memoria adicional.
De esta manera, diferentes algoritmos encajan en diferentes lugares.
Pero los más utilizados son la fusión y la clasificación rápida, debido a su eficiencia de tiempo.

Editar:
Como se señaló en el comentario, la ordenación por inserción es mejor para todos los tamaños de matriz dinámica cuando se da prioridad a la eficiencia del espacio. Cada sistema tiene un inconveniente similar, el tipo de inserción no es mejor cuando la complejidad del tiempo es una prioridad. Hoy en día las personas se centran más en el tiempo que en el espacio. Es por eso que el tipo de fusión es ampliamente utilizado.
Además, la complejidad temporal de la ordenación por inserción depende de la estructura de datos que utilice. (Matriz, listas vinculadas, … etc.).

Para la clasificación en el núcleo, el ordenamiento rápido es el más común, porque casi siempre es O (N log N) y el bucle interno es muy simple y rápido.

Cuando solo hay unos pocos cientos de elementos, la ordenación por inserción está bien. Pero la ordenación de shell es solo unas pocas líneas adicionales de código, y se escala considerablemente mejor.

La ordenación por fusión se vuelve más útil como parte de una ordenación fuera del núcleo: escriba una gran cantidad de archivos ordenados utilizando su ordenación por núcleo favorita, luego combínelos en un solo archivo ordenado.

La clasificación de Trie y radix es fantástica si sus claves son enteros no demasiado anchos, y aún mejor si la distribución de claves está agrupada.

En las máquinas modernas, generalmente soy un fanático de la clasificación de distribución en lugar de la fusión: en un tipo de distribución, los accesos aleatorios son escrituras, y las CPU modernas son excelentes para ocultar la latencia de escritura; En una combinación, los accesos aleatorios son lecturas, que tienen muchas más probabilidades de ralentizarlo.

El tipo de burbuja nunca debe usarse para nada.

Ordenación por inserción: ofrece factores constantes bajos y es bueno para ordenar listas pequeñas, también aparece como casos base para combinar y ordenar rápidamente cuando el tamaño de un subcampo es pequeño.

Selección de selección: útil para la instrucción ya que este podría ser el algoritmo de clasificación más intuitivo.

Quicksort: rápido en la práctica con datos aleatorios, pero carece del buen rendimiento en el peor de los casos de otros tipos. Los árboles de búsqueda binarios ingenuos (desequilibrados) son solo una versión de transmisión rápida (es decir, acomodando nuevos elementos a medida que llegan), muy útil para comprender los BST también.

Mergesort: aunque requiere un poco de espacio extra, este es un tipo rápido que también tiene variantes como Timsort que naturalmente pueden aprovechar la estructura preexistente en la entrada, como si su entrada está casi ordenada.

Heapsort: todavía relativamente rápido mientras está en su lugar.

Tipo de burbuja: inútil, por lo que puedo ver.

Tipo de shell: no se ve mucho uso hoy, pero se usó más históricamente.

Orden de conteo: se ordena en tiempo lineal cuando todos los valores son enteros en un rango pequeño, por ejemplo, 1-K para algunos K

Clasificación de radix: para los tipos enteros donde los números enteros pueden estar en un rango mayor que el que funcionaría con el orden de conteo. En muchas circunstancias, puede superar los tipos basados ​​en comparación para grandes conjuntos de datos.

La razón por la que aprende tantos algoritmos de clasificación diferentes en la escuela es porque son excelentes ejemplos de enseñanza. No requieren mucho código para implementar, por lo que realmente puede comprenderlos en profundidad, y puede ver que pequeños cambios en un algoritmo pueden tener un gran impacto en el rendimiento. También puede ver la diferencia entre un algoritmo O (n ^ 2) y O (n log (n)).

En escenarios de la vida real, la mayoría de las personas terminan clasificando los datos usando cualquier función de clasificación de la biblioteca que viene con el lenguaje que están utilizando (por ejemplo, qsort () en C.) En general, ni siquiera saben qué algoritmo es, y solo confían en que es bueno (volviendo a qsort (), podría pensar que es una ordenación rápida, y alguna vez lo fue, pero ahora es más complejo).

Buenas respuestas para esta pregunta de tipo escolar. Al comparar, considere el uso de la memoria, el uso del procesador, el número de comparaciones y si tiene que mover datos para la inserción (inserte entre los elementos 4 y 5 en una matriz) o simplemente puede agregar un elemento (ajuste los enlaces para incluir ahora el nuevo elemento). Los escenarios de la vida real dados hicieron selecciones basadas en estos parámetros (quizás adicionales).

Ver estos algoritmos de clasificación tienen diferentes tiempos de ejecución. Entonces, según el requisito, utilizan diferentes algoritmos de clasificación.
Normalmente van con el más rápido que, si mal no recuerdo, es ordenar por cubeta o por fusión. Pero si tiene que ordenar una matriz que va con un cubo, es un desperdicio.
Entonces, ahí es donde se usan otros como clasificación rápida.

Bubble es el algoritmo más simple y solo se usa para una cantidad muy pequeña de datos y durante los estudios. Quicksort se usa ampliamente, aunque su rendimiento puede disminuir drásticamente en ciertos tipos de datos. La clasificación de índice y la clasificación de inserción se utilizan en motores de base de datos. Y por último, encadenamiento y b-tree se utilizan en sistemas de archivos.

En mi único trabajo real, me encargaron crear una función de búsqueda y clasificación para el software de inventario que estábamos creando. Dificultad: no estaba usando Javascript, que por supuesto tiene sort () y RegEx y todas las otras herramientas muy útiles para que esto suceda. Estaba usando Actionscript … versión 2.

Entonces, cuando tiene que encontrar SU código para ordenar datos ese día , es útil saber al menos qué es eso y por qué uno es mejor que el otro.

More Interesting

¿Pueden algunos explicarme la lógica detrás del siguiente problema El oso hambriento?

¿Qué algoritmo se puede usar para la predicción de pasajes aéreos?

¿Hay algún proyecto de aprendizaje automático de finanzas que pueda ejercer con Python?

¿Vale la pena tomar el curso de Algoritmos de Udacity?

¿Podría alguien explicar las etapas de un algoritmo recursivo que muestra cómo se alcanza la condición de terminación?

¿Qué bibliotecas o marcos de Python, C son buenos para las pruebas de diagnóstico en estadísticas?

¿Cómo debo usar el libro Introducción a los algoritmos de Cormen de manera efectiva? ¿Es mejor elegir un tema que haya encontrado en algún lugar de la programación competitiva y leer un algoritmo relacionado con eso o revisarlo de principio a fin?

¿Cuáles son los algoritmos de vanguardia para las características de textura eficientes para la recuperación de imágenes?

¿Cómo se puede resolver el coeficiente binomial usando programación dinámica y tabla hash?

¿Es posible hacer un programa algorítmico de intercambio oscilante?

¿Los mismos algoritmos dan resultados diferentes en diferentes paquetes / idiomas?

¿Qué tecnología utiliza X ?: ¿Cómo implementan las empresas de análisis (Mixpanel, KISSMetrics, etc.) el análisis de embudos?

¿Cuál es el número mínimo y máximo de materias que ofrece un estudiante en una escuela secundaria estadounidense?

¿Por qué el cifrado de la función Algoritmo de hash no puede transformar el texto cifrado en texto sin formato?

¿Hay disponible una implementación de Python del algoritmo de descomposición LDL ('ldl' en Matlab)?