Directorio de artículos
Prefacio
El algoritmo de clasificación es uno de los algoritmos más básicos en "Estructuras y algoritmos de datos".
Los algoritmos de clasificación se pueden dividir en clasificación interna y clasificación externa . La clasificación interna consiste en ordenar registros de datos en la memoria, mientras que la clasificación externa se debe a que los datos ordenados son muy grandes y no pueden acomodar todos los registros ordenados al mismo tiempo durante el proceso de clasificación. Es necesario acceder a la memoria.
Al estudiar los 11 artículos anteriores, tenemos una comprensión profunda de los diez algoritmos de clasificación clásicos. Este artículo resumirá, comparará y analizará estos diez algoritmos clásicos.
1. Clasificación de los diez mejores algoritmos de clasificación clásicos.
Diez algoritmos de clasificación comunes se pueden dividir en dos categorías amplias :
Clasificación de comparación de tiempo no lineal : determine el orden relativo entre elementos mediante comparación, porque su complejidad temporal no puede exceder O (nlogn) O (nlogn)O ( n l o g n ) , por lo que se denomina clasificación por comparación de tiempo no lineal.
Clasificación sin comparación en tiempo lineal : no determina el orden relativo entre elementos mediante comparación. Puede superar el límite inferior de tiempo de la clasificación basada en comparación y ejecutarse en tiempo lineal , por lo que se denomina clasificación sin comparación en tiempo lineal. .
2. Conceptos relacionados
- Estable : si a está originalmente delante de b y a = b, a seguirá estando delante de b después de la clasificación;
- Inestable : si a está originalmente delante de b y a = b, a puede aparecer después de b después de la clasificación;
- Clasificación interna : todas las operaciones de clasificación se completan en la memoria;
- Clasificación externa : debido a que los datos son demasiado grandes, los datos se colocan en el disco y la clasificación solo se puede realizar mediante la transmisión de datos entre el disco y la memoria;
- ** Complejidad del tiempo: ** La complejidad del tiempo significa que el cálculo de la complejidad del tiempo no calcula el tiempo de ejecución específico del programa, sino la cantidad de veces que el algoritmo ejecuta declaraciones.
- Complejidad del espacio : la complejidad del espacio es una medida de la cantidad de espacio de almacenamiento que ocupa temporalmente un algoritmo durante la operación.
3. Resumen de los diez algoritmos clásicos principales.
Glosario :
- n: tamaño de datos
- k: el número de “cubos”
- In situ: ocupa memoria constante y no ocupa memoria adicional
- Fuera de lugar: ocupa memoria adicional
4. Contenido complementario
4.1 La diferencia entre clasificación por comparación y clasificación sin comparación
-
La clasificación rápida común , la clasificación por combinación, la clasificación por montón, la clasificación por burbujas, etc. pertenecen a la clasificación por comparación . En el resultado final de la clasificación, el orden entre los elementos depende de la comparación entre ellos. Cada número debe compararse con otros números para determinar su posición.
En la clasificación como la clasificación de burbujas , el tamaño del problema es n, y debido a que se requieren n veces de comparación, la complejidad del tiempo promedio es O (n 2) O(n^2)En2 ). Enclasificaciones comola clasificación por combinación y la clasificación rápidase reduce ainiciar sesiónel método divide y conquistaráslogn , por lo que la complejidad del tiempo promedio es O ( nlogn ) O(nlogn)O ( nlogn ) .La ventaja de la clasificación comparativa es que es adecuada para datos de todos los tamaños y se puede ordenar independientemente de la distribución de los datos. Se puede decir que la clasificación por comparación es adecuada para todas las situaciones que requieren clasificación.
-
La clasificación por conteo, la clasificación por base y la clasificación por cubo son clasificaciones no comparativas . La clasificación no comparativa ordena determinando cuántos elementos deben preceder a cada elemento. Para la matriz arr, calcule cuántos elementos hay antes de arr [i], luego la posición de arr [i] en la matriz ordenada se determina de forma única.
La clasificación no comparativa solo necesita determinar la cantidad de elementos existentes antes de cada elemento, y todo se puede resolver de un solo recorrido. Complejidad del tiempo del algoritmo O ( n ) O (n)En ) .La clasificación no comparativa tiene la menor complejidad temporal, pero ocupa espacio para determinar la posición única. Por lo tanto, existen ciertos requisitos para la escala y la distribución de los datos.
4.2 ¿Son realmente estables los algoritmos estables?
La idea del algoritmo en sí es independiente del lenguaje de programación, por lo que cuando escribe código para implementar el algoritmo, muchos detalles se pueden manejar de manera diferente. Usar un algoritmo inestable No importa cómo escriba el código durante una implementación específica, la posición final del mismo elemento siempre es incierta (puede que no cambie o que cambie).
El algoritmo de clasificación estable será estable si maneja bien los detalles durante la implementación específica , pero los resultados obtenidos si no se manejan algunos detalles siguen siendo inestables.
4.3 El significado de estabilidad
Si sólo estamos tratando con una clasificación numérica simple, entonces la estabilidad realmente no significa mucho. Por ejemplo, en la secuencia de 1 2 3 3 4, si las posiciones de los primeros 3 y los segundos 3 cambian repetidamente después de que el método de clasificación se ejecuta repetidamente, pero para la aplicación anterior que llama al método de clasificación para obtener el resultado de la clasificación, el resultado sigue siendo 1 2 3 3 4, en cuanto al orden de 3, no importa.
Si el contenido ordenado es solo un determinado atributo numérico de un objeto complejo, entonces la estabilidad seguirá sin tener sentido (el costo de la llamada operación de intercambio ya está incluido en el costo del algoritmo. Si no le gusta este costo, es mejor utilizar el algoritmo de conversión?)
Si el contenido ordenado son múltiples propiedades numéricas de un objeto complejo, pero el orden original no tiene sentido, entonces la estabilidad seguirá sin tener sentido.
Entonces, ¿bajo qué circunstancias la "estabilidad" del algoritmo de clasificación se vuelve significativa?
Por ejemplo, los estudiantes de una clase se han ordenado según sus ID de estudiante. Ahora quiero que se clasifiquen de menor a mayor por edad. Si tienen la misma edad, deben ordenarse en orden ascendente por su ID de estudiante. Entonces, aquí surge la pregunta: si el método de clasificación por edad que elige es inestable, ¿ se estropeará el número de estudiantes de un grupo de estudiantes con la misma edad después de la clasificación ? a sus números de estudiantes. Si es un algoritmo de clasificación estable, solo necesito ordenar por edad.
(Ordene a partir de una clave y luego ordene a partir de otra clave. El resultado de la primera clasificación por clave se puede utilizar para la segunda clasificación por clave. El contenido que se va a ordenar son múltiples atributos numéricos de un objeto complejo, y su original El orden inicial tiene significado, entonces debemos mantener el significado de la clasificación original sobre la base de la clasificación secundaria, y luego debemos usar un algoritmo estable).
¿Qué significa la "estabilidad" de un algoritmo de clasificación? Esto todavía depende del escenario de la aplicación. En muchos casos de uso, no tiene un significado real, pero en algunos casos tiene un significado muy importante.
Hay muchos algoritmos que pueden parecerle insignificantes ahora, pero su estabilidad es muy importante cuando se los coloca en las condiciones de la computación en la nube de big data. Por ejemplo, al clasificar productos en Taobao según el volumen de ventas, el precio y otras condiciones, su servidor de datos tiene una gran cantidad de datos. Por lo tanto, cuando se encuentra, se utiliza un algoritmo de clasificación con poca estabilidad, como la clasificación en montón. En el peor de los casos, el efecto de clasificación será muy deficiente, lo que afectará gravemente el rendimiento del servidor y la experiencia del usuario.
4.4 Suplemento a la complejidad del tiempo
La complejidad del tiempo generalmente discutida es la complejidad del tiempo en el peor de los casos. La razón de esto es: la complejidad del tiempo en el peor de los casos es un límite superior en el tiempo que el algoritmo se ejecutará en cualquier instancia de entrada, lo que garantiza que el algoritmo no se ejecutará por más tiempo que cualquier otro .
La complejidad del tiempo promedio se refiere al tiempo de ejecución esperado de un algoritmo si todas las instancias de entrada posibles ocurren con la misma probabilidad . Sea la probabilidad de cada situación pi pip i , la complejidad temporal promedio essum (pi ∗ f (n)) sum(pi*f(n))suma ( p i∗(f ( n ))。
4.5 Suplemento de complejidad espacial
Utilizando la complejidad espacial del programa, puede tener una estimación previa de la memoria necesaria para ejecutar el programa. El espacio de almacenamiento requerido durante la ejecución del programa incluye las dos partes siguientes:
(1) Parte fija: el tamaño de esta parte del espacio no tiene nada que ver con el número y el valor de los datos de entrada/salida. Incluye principalmente el espacio ocupado por el espacio de instrucciones (es decir, el espacio de código), el espacio de datos (constantes, variables simples), etc. Esta parte es un espacio estático.
(2) Espacio variable: esta parte del espacio incluye principalmente el espacio asignado dinámicamente y el espacio requerido para la pila recursiva. El tamaño de esta parte del espacio está relacionado con el algoritmo.
La complejidad espacial considera la parte espacial variable .
Conclusión
¡El intercambio de hoy termina aquí! Si crees que el artículo es bueno, puedes apoyarlo tres veces .
¡También puedes prestar atención para evitar no encontrarme en el futuro!
Hay muchos artículos interesantes en la página de inicio de Crossoads . Los amigos pueden comentar. ¡Su apoyo es la motivación para que el autor siga adelante!
Permítame brindarle una comprensión preliminar del algoritmo de clasificación: https://blog.csdn.net/2301_80191662/article/details/142211265
Clasificación por inserción directa: https://blog.csdn.net/2301_80191662/article/details/142300973
Clasificación en colinas: https://blog.csdn.net/2301_80191662/article/details/142302553
Clasificación por selección directa: https://blog.csdn.net/2301_80191662/article/details/142312028
Clasificación en montón: https://blog. csdn.net/ 2301_80191662/article/details/142312338
Clasificación de burbujas: https://blog.csdn.net/2301_80191662/article/details/142324131
Clasificación rápida: https://blog.csdn.net/2301_80191662/article/details/ 142324307
Clasificación por combinación: https://blog.csdn.net/2301_80191662/article/details/142350640
Clasificación por recuento: https://blog.csdn.net/2301_80191662/article/details/142350741
Clasificación por depósitos: https://blog. csdn.net /2301_80191662/article/details/142375338
Clasificación por base: https://blog.csdn.net/2301_80191662/article/details/142375592
Resumen y análisis de los diez algoritmos de clasificación clásicos principales: https://blog.csdn. net/2301_80191662/article /details/142211564
Contenido de referencia: Si le pregunto: ¿Cuál es el significado de "estabilidad" de un algoritmo de clasificación? ¿Cómo respondes? (qq.com)