Comprensión profunda de la complejidad temporal de los algoritmos.

Definición de complejidad del tiempo

La complejidad del tiempo es una medida utilizada para describir el tiempo de ejecución requerido por un algoritmo cuando aumenta el tamaño de entrada, es decir, describe la velocidad a la que aumenta el tiempo de ejecución del algoritmo a medida que aumenta el tamaño del problema. Es una estimación del límite superior del algoritmo. tiempo de ejecución, generalmente a través de la representación del símbolo O. La complejidad del tiempo describe la eficiencia y la velocidad de ejecución de un algoritmo y puede usarse para comparar el rendimiento de diferentes algoritmos.

Notas:
1. La complejidad del tiempo describe el tiempo de ejecución del algoritmo en el peor de los casos. Esto se debe a que la complejidad temporal del peor de los casos es una estimación del límite superior del rendimiento del algoritmo, lo que garantiza que el algoritmo se puede completar dentro de ese rango de tiempo bajo cualquier circunstancia.
2. En el análisis de algoritmos real, generalmente también se considera la complejidad temporal del mejor caso y del caso promedio. El mejor caso se refiere a la complejidad del tiempo en la situación de entrada más ideal, y el caso promedio es una estimación de la complejidad del tiempo promedio en todas las situaciones de entrada posibles.

Clasificación de la complejidad del tiempo.

La complejidad del tiempo se divide aproximadamente en dos categorías: magnitud polinómica y magnitud no polinómica.
Solo hay dos magnitudes no polinómicas,
O ( 2 n ) y O ( n ! ) O (2 ^ n) y O (n!)O ( 2norte )yO(norte!)

El tiempo de ejecución de los algoritmos de magnitud no polinómica aumentará drásticamente a medida que aumente el tamaño de la entrada, lo que los convertirá en algoritmos muy ineficientes.
La complejidad de nivel polinomial no es común y va desde orden bajo hasta orden alto (cuanto mayor es la complejidad del tiempo, menor es la eficiencia de ejecución):

O ( 1 ) < O ( logn ) < O ( n ) < O ( nlogn ) < O ( n 2 ) O(1) < O(logn) < O(n) < O(nlogn) < O(n^2 )o ( 1 )<O ( iniciar sesión ) _ _<O ( n )<O ( nlogn ) _ _ _ _<O ( n.2 )

El gráfico de curva correspondiente se muestra a continuación:
Insertar descripción de la imagen aquí

Análisis de complejidad del tiempo.

1. Cuando analizamos la complejidad temporal de un algoritmo o un fragmento de código, solo debemos prestar atención al fragmento de código con el mayor número de ejecuciones de bucle, que representa la complejidad temporal del algoritmo.
2. Regla de suma: cuando se utilizan varios algoritmos secuencialmente, la complejidad total es igual a la complejidad del código con la mayor magnitud 3.
Regla de multiplicación: la complejidad del código anidado es igual al producto de la complejidad del código interno y código exterior.

Complejidad temporal de estructuras de datos y algoritmos comunes.

Estructuras de datos comunes

1.matriz

  • Acceso al índice: O(1)
  • Busca en)
  • Inserción/Eliminación (fin): O(1)
  • Inserción/eliminación (mitad o inicio): O(n)

2. Lista enlazada

  • Acceso: O(n)
  • Busca en)
  • Inserción/eliminación (en la cabecera): O(1)
  • Inserción/eliminación (realizada en el medio o al final): O(1) (si se conoce la posición), O(n) (si es necesario buscar la posición)

3. pila

  • Inserción/eliminación (en la parte superior): O(1)
  • Acceso, búsqueda: O(n)

4.Cola

  • Inserción/eliminación (al principio o al final): O(1)
  • Acceso: O(n)

5. Tabla hash:

  • Inserción/eliminación/acceso (caso promedio): O(1)
  • El peor de los casos podría ser O(n), dependiendo del número de colisiones hash.

Algoritmos comunes

1.Búsqueda lineal

  • Complejidad del tiempo: O (n)

2.Búsqueda binaria

  • Complejidad del tiempo: O (logn)

3. Clasificación de burbujas

  • Caso promedio y peor caso: O(n^2)

4.Clasificación rápida

  • Caso promedio: O (nlogn)
  • Peor caso: O(n^2)

5.Combinar orden

  • Mejor caso, caso promedio y peor caso: O(nlogn)

6.Clasificación del montón

  • Caso promedio y peor caso: O(nlogn)

Descripción de algoritmos de clasificación comunes.

Nota: La estabilidad del algoritmo de clasificación se refiere a la propiedad de que durante el proceso de clasificación, el orden relativo de los elementos con valores clave iguales permanece sin cambios en el resultado ordenado. La estabilidad es una propiedad importante en los algoritmos de clasificación, porque en algunos escenarios de aplicación queremos mantener sin cambios el orden relativo de elementos iguales. El beneficio de la estabilidad es que puede garantizar la corrección del algoritmo de clasificación en circunstancias específicas, especialmente cuando se trata de ciertos problemas que dependen del orden. Sin embargo, no todos los algoritmos de clasificación son estables y algunos algoritmos de clasificación pueden cambiar el orden relativo de los elementos con valores clave iguales. Por lo tanto, al seleccionar un algoritmo de clasificación, se deben considerar los requisitos de estabilidad del algoritmo de clasificación en función de escenarios de aplicación específicos.

Ordenamiento de burbuja

Principio: la clasificación de burbujas atraviesa la matriz varias veces, compara los tamaños de los elementos adyacentes e intercambia posiciones hasta que se completa la clasificación. Cada iteración "hace burbujas" en el elemento más grande hasta el final.
Características: La clasificación de burbujas es un algoritmo de clasificación relativamente simple, fácil de entender cuando se implementa, pero de baja eficiencia. Su complejidad temporal es O (n^2) y es adecuada para la clasificación de datos a pequeña escala.
Problemas adecuados para resolver: la clasificación de burbujas es adecuada para ordenar datos de menor escala, pero no es adecuada para procesar datos de gran escala.

Ordenación rápida

Principio: la clasificación rápida se basa en la idea de dividir y conquistar. Primero selecciona un elemento de referencia (generalmente un elemento en la matriz) y luego divide la matriz en dos subsecuencias, donde los elementos de una subsecuencia son menores o iguales que el elemento de referencia y los elementos de la otra subsecuencia son mayores que o igual al elemento de referencia. Luego, las dos subsecuencias se clasifican rápidamente de forma recursiva.
Características: La clasificación rápida es un algoritmo de clasificación basado en comparaciones y su complejidad de tiempo promedio es O (nlogn). Tiene las características de clasificación e inestabilidad in situ.
Problemas adecuados para resolver: la clasificación rápida es adecuada para clasificar datos a gran escala y es rápida. En la práctica, se utiliza ampliamente en diversos escenarios de clasificación.

Combinar ordenar

Principio: la ordenación por fusión también se basa en la idea de dividir y conquistar. Divide continuamente la matriz en submatrices más pequeñas y luego combina estas submatrices una por una hasta que se completa la clasificación.
Características: La complejidad temporal de la ordenación por fusión es O (nlogn) y tiene las características de estabilidad y confiabilidad. Requiere espacio adicional para almacenar la matriz temporal de resultados intermedios.
Problemas adecuados para resolver: Merge sort es adecuado para ordenar datos a gran escala. Su estabilidad y confiabilidad lo hacen adecuado para escenarios donde es necesario mantener el mismo orden de elementos.

Ordenar montón

Principio: la clasificación del montón se basa en una estructura de montón binaria completa. Crea la matriz que se ordenará en un montón máximo (o montón mínimo) y luego elimina continuamente los elementos superiores del montón máximo y ajusta el montón hasta que todos los elementos estén ordenados.
Características: La complejidad temporal de la clasificación del montón es O (nlogn), es un algoritmo de clasificación in situ y no requiere espacio adicional. Pero la clasificación en montón no es un algoritmo de clasificación estable.
Problemas adecuados para resolver: la clasificación en montón es adecuada para clasificar datos a gran escala, especialmente para escenarios donde solo es necesario retener parte de los elementos más grandes (o más pequeños). Es ampliamente utilizado en colas de prioridad y problemas de TopK.

Estos algoritmos de clasificación tienen sus propios escenarios de aplicación y limitaciones en aplicaciones prácticas. La elección del algoritmo de clasificación correcto depende de factores como el tamaño de los datos, los requisitos de estabilidad, los requisitos de complejidad del espacio y los requisitos de rendimiento.
La clasificación por burbujas tiene un rendimiento deficiente y rara vez se utiliza en proyectos prácticos.
Cuando existen requisitos de velocidad y complejidad espacial pero no de estabilidad, el algoritmo de clasificación elige la clasificación rápida; cuando existen
requisitos de estabilidad pero no de complejidad espacial, el algoritmo de clasificación elige la clasificación por fusión;
cuando solo el máximo / En el escenario de aplicación de el elemento más pequeño, se utiliza la clasificación de montón.

Supongo que te gusta

Origin blog.csdn.net/yang1fei2/article/details/133042777
Recomendado
Clasificación