Índice de conocimientos y materiales introductorios
Tabla de contenido
- Información común
- estructura de conocimiento
- Orden logarítmico
- Complejidad espacial: el espacio de memoria consumido por el algoritmo, denotado como S (n) = O (f (n))
- Análisis de complejidad del tiempo
- Análisis de complejidad espacial
- 1. Céntrese únicamente en el código con más ejecuciones de bucle
- 2. La regla de la suma: la complejidad total es igual a la complejidad del código de mayor magnitud.
- 3. La regla de la multiplicación: la complejidad del código anidado es igual al producto de la complejidad del código dentro y fuera del nido.
- 5 características principales del algoritmo
- complejidad del tiempo:
Información común
Complejidad del algoritmo
https://www.bigocheatsheet.com
Sitio de demostración dinámico
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
estructura de conocimiento
5 características principales del algoritmo
Finito, exacto, entrada, salida, factibilidad
complejidad del tiempo:
La carga de trabajo computacional requerida para ejecutar el algoritmo.
En términos generales, un algoritmo informático es una función del tamaño del problema n, por lo que f(n)
la complejidad del tiempo del algoritmo se registra comoT(n)=O(f(n))
Cuanto mayor es el problema, la tasa de crecimiento del tiempo de ejecución del algoritmo se relaciona positivamente con la tasa de crecimiento de f (n), que se denomina complejidad de tiempo asintomático (Complejidad de tiempo asimpótica)
Cálculo:
- 1. La fórmula para calcular el número de veces
1 + 2 + 3 + ... + n;
<? php $ suma = 0; para ($ i = 1; $ i <= $ n; $ i ++) { suma + = $ i; } ?>
Calcula n veces, la complejidad del tiempo es O (n)
- 2. Utilice la constante 1 para reemplazar todas las constantes de suma en todo momento. Por ejemplo, O (3) se registra como O (1)
<? prueba de función php ($ n) { echo $ n; echo $ n; echo $ n; } ?>
O (3) se registra como O (1)
- 3. En la función de número de operaciones modificado, solo
se retiene el elemento de orden más alto n ^ 2 + n + 1 , que se registra como O (n ^ 2) - 4. Si el orden más alto existe y no es 1, elimine la constante
2n ^ 2 + 3n + 1 multiplicada por este término y regístrelo como O (n ^ 2)
Orden constante: O (1) Orden lineal: O (n) Plano (Li) Orden cuadrado: O (n ^ 2), O (n ^ 3)
<? php $ suma = 0; para ($ i = 1; $ i <= $ n; $ i ++) { para ($ j = 1; $ j <= $ n; $ j ++) { $ suma + = $ j; } } ?>
Bucle de dos capas O (n ^ 2) Tres capas O (n ^ 3)
orden cuadrado especial: O (n ^ 2/2 + n / 2) -> O (n ^ 2)
para () { para () { } } para () { } echo $ a + $ b;
n^2+n+1->O(n^2)
Orden logarítmico
$ i = 1; $ n = 100; while ($ i <$ n) { $ i = $ i * 2; }
2 ^ x = n x = \ log_2 ^ n \ log_2 ^ n = \ log_2 ^ {10} \ log {n}
3 ^ x = n x = \ log_3 ^ n \ log_3 ^ n = \ log_3 ^ {10} * \ log {n}
Peor de caso: el tiempo de ejecución en el peor de los casos, una garantía, si no hay una descripción especial, la complejidad de tiempo mencionada es la complejidad de tiempo en el peor de los casos.
Caso promedio: tiempo de ejecución esperado
Complejidad espacial: el espacio de memoria consumido por el algoritmo, denotado como S (n) = O (f (n))
- Incluido el espacio ocupado por el código del programa
- El espacio ocupado por los datos de entrada y
- Espacio ocupado por variables auxiliares
Estos 3 aspectos
Los métodos de cálculo y representación son similares a la complejidad del tiempo, y generalmente están representados por la progresividad de la complejidad.
Análisis de complejidad del tiempo
1. Céntrese únicamente en el código con más ejecuciones de bucle
Big O Este método de representación de la complejidad solo muestra una tendencia de cambio.
Por lo general, ignoramos las constantes, el orden inferior y los coeficientes en la fórmula, y solo necesitamos registrar la magnitud del orden más grande. Entonces, cuando analizamos la complejidad temporal de un algoritmo o un fragmento de código, solo prestamos atención al fragmento de código que tiene la mayor cantidad de tiempos de ejecución de bucle.
C es una constante, ¿por qué se puede omitir C? Cn ^ 2 C (n + 1) ^ 2-Cn ^ 2 = C (2n + 1) (n + 1) ^ 2-n ^ 2 = 2n + 1
2. La regla de la suma: la complejidad total es igual a la complejidad del código de mayor magnitud.
3. La regla de la multiplicación: la complejidad del código anidado es igual al producto de la complejidad del código dentro y fuera del nido.
Análisis de complejidad espacial
El nombre completo de complejidad de tiempo es complejidad de tiempo progresiva , que representa la relación de crecimiento entre el tiempo de ejecución de un algoritmo y la escala de datos . Por analogía, el nombre completo de complejidad espacial es complejidad espacial asintótica (complejidad espacial asintótica), que representa la relación de crecimiento entre el espacio de almacenamiento de un algoritmo y la escala de datos .
impresión vacía (int n) { int i = 0; int [] a = nuevo int [n]; para (i; i <n; ++ i) { a [i] = i * i; } para (i = n-1; i> = 0; --i) { imprime un [i] } }
Al igual que el análisis de complejidad temporal, en la segunda línea de código, solicitamos un espacio para almacenar la variable i, pero es de orden constante y no tiene nada que ver con el tamaño de los datos n, por lo que podemos ignorarlo. La línea 3 se aplica a una matriz de tipo int de tamaño N. Además, el resto del código no ocupa más espacio, por lo que la complejidad de espacio de todo el código es O (n).
Imagen tomada de: https://time.geekbang.org/column/article/40036