Entrada de algoritmo para dominar la complejidad del algoritmo de la serie 2 (1)

Entrada de algoritmo para dominar la complejidad del algoritmo de la serie 2 (1)

# Series Serie de algoritmos

1. Descripción general

La complejidad del algoritmo se divide en complejidad de tiempo y complejidad de espacio. Esta sección presenta principalmente la complejidad del tiempo. La complejidad del tiempo representa el tiempo requerido para que una computadora ejecute un algoritmo. Para las computadoras, el algoritmo que resuelve el mismo problema es diferente, cuanto menos tiempo se necesita, mejor es el algoritmo (sin considerar el problema del espacio), por lo que la complejidad del tiempo es uno de los indicadores para medir la calidad de un algoritmo.

Segundo, el gran símbolo O

El "gran símbolo O" se usa generalmente para medir la complejidad del tiempo. ¿Cuál es el gran símbolo O? Necesitamos mirar primero algunos conocimientos matemáticos: funciones y límites.

2.1 Ejemplos matemáticos:

1. Función cuadrática unaria f (x) = 2x ^ 2 + 2x + 2;
2. Cuando x tiende al infinito, se escribe como x—> ∞.
3. x-> ∞, f (x) = 2x ^ 2 + 2x + 2 = 2x ^ 2.
En el tercer elemento anterior, cuando x es infinito, 2x ^ 2 + 2x + 2 es aproximadamente igual a 2x ^ 2, que puede entenderse como 2x ^ 2 + 2x + 2 = 2x ^ 2 en el pensamiento límite (análisis de algoritmo). Las razones son las siguientes:
Cuando x = 5:
2x ^ 2 + 2x + 2 = 62.
2x ^ 2 = 50.
Cuando x = 500:
2x ^ 2 + 2x + 2 = 501002
2x ^ 2 = 250000.
A través de lo anterior Por ejemplo, continúe aumentando el valor de x, incluso en el infinito, el término 2x + 2 en la función f (x) puede ignorarse. Entonces, cuando x-> ∞, (2x ^ 2 + 2x + 2) es aproximadamente igual a (2x ^ 2), o (2x ^ 2 + 2x + 2) = (2x ^ 2). Y en el pensamiento límite, el coeficiente 2 antes de 2x ^ 2 también se puede omitir. En otras palabras, cuando x-> ∞, 2x ^ 2 ~ x ^ 2.
A través de la idea de límite, funcionaremos f (x) = 2x ^ 2 + 2x + 2, omitiendo el término restante como x ^ 2. En otras palabras, cuando x-> ∞, f (x) = 2x ^ 2 + 2x + 2 = x ^ 2; use el símbolo O grande para indicar: x-> infinito, f (x) = O (x ^ 2).

2.2 Concepto

Big O se utiliza para caracterizar los términos restantes de series infinitas truncadas, especialmente series asintóticas. El gran símbolo O indica el límite superior progresivo de la función. Al igual que el ejemplo matemático anterior, la función f (x) = 2x ^ 2 + 2x + 2 El término restante de la serie progresiva es x ^ 2, denotado como O (x ^ 2). En otras palabras, O (x ^ 2) es el límite superior progresivo de f (x).

3. Complejidad del tiempo

Título: Encuentra la suma de 1 + 2 + 3 + ... + n. (Algoritmo gaussiano)

  • Código del programador junior:
… …
    for (int i = 1; i <= n; i++) {
        sum+=i;
    }
… …

Análisis:
1. ¿Cuántas veces se ejecuta la suma + = 1 en el código anterior? Respuesta: n veces.
2. Int i = 1 se ejecuta una vez.
3. i <= n se ejecuta n + 1 veces. (Debido a que el orden de la ejecución del bucle for, el bucle se detendrá solo cuando i sea mayor que n, de modo que cuando i = n + 1, i <= n se juzgará nuevamente, por lo que se ejecutará una vez más en comparación)
4. i ++ se ejecuta n veces.
Para resumir, el código anterior se ejecuta n + 1 + n + 1 + n = 3n + 2 veces.
Si usa el pensamiento extremo, n-> ∞, 3n + 2 ~ 3n ~ n; denotado como O (n). O (n) es la complejidad temporal del código anterior.

  • Código para programadores senior:
… …
(1+n)*n/2
… …

Como anteriormente, el mismo cálculo de 1 se agrega a n, y el algoritmo gaussiano es mucho más simple. El código anterior solo debe ejecutarse una vez, sin un bucle. Entonces la complejidad del tiempo es O (1).

  • Resumen
    ¿Cuál es la diferencia entre O (1) y O (n) es? Cuando la variable n en el "código de programador junior" y el "código de programador avanzado" anteriores aumentan, la complejidad temporal del algoritmo gaussiano permanece básicamente sin cambios, u O (1). Pero la complejidad temporal del "código de programador junior" aumentará.
    Para las computadoras, la velocidad de cálculo del algoritmo gaussiano para resolver 1 agregado continuamente a n es mucho más rápida que la velocidad del bucle for. Cuanto más rápida sea la velocidad, mejor será el rendimiento del sistema.
    Inserte la descripción de la imagen aquí

Resumen

1. O (1) y O (n) son representaciones de la complejidad del tiempo. Simplemente entienda que 1 representa una unidad de tiempo yn representa n unidades de tiempo.
2. Debido a que el hardware de la computadora es diferente, el mismo algoritmo puede tener un tiempo diferente, pero la complejidad de tiempo de ejecutar el mismo algoritmo en la misma computadora de hardware es la misma, porque la diferencia de tiempo causada por un hardware diferente, unidad tan comúnmente utilizada El término "tiempo", no los 1s o 2s específicos.
3. Los símbolos y conceptos utilizados en el cálculo de la complejidad del tiempo implican el conocimiento de las funciones y límites matemáticos. Si olvida a sus compañeros de clase, puede revisarlo.

93 artículos originales publicados · Me gusta 115 · Visita 230,000+

Supongo que te gusta

Origin blog.csdn.net/muyi_amen/article/details/105584125
Recomendado
Clasificación