complejidad Lite tiempo y la complejidad del espacio (cinco minutos a maestro)

prefacio

La calidad de los pros y los contras de un algoritmo determinará el tiempo que un programa se ejecuta, y el espacio. Tal vez cuando una pequeña cantidad de datos cuando este efecto no es evidente, pero cuando hay una gran cantidad de datos, el algoritmo es bueno o malo diferencia de rendimiento va a llevar a cabo los malos días para hacerlo. Se puede decir directamente afecta a la altura y anchura de un producto. Cada programador quiere usar el mejor algoritmo para resolver el problema, esperamos a escribir su propio código es simple y eficiente. Pero la manera de juzgar la calidad de un algoritmo de tareas pendientes? complejidad del tiempo y la complejidad del espacio es un estándar bien.

1. Tiempo complejidad

1.1 concepto

esfuerzo computacional requerido para la ejecución del algoritmo

1.2 básica tiempos de ejecución T (n)

Se obtiene el algoritmo de cálculo cuando la cantidad de datos de entrada es n, el número de implementación real

1.3 Complejidad de tiempo

La complejidad de tiempo del número progresivo de ejecuciones obtenidos eliminar sustancialmente coeficiente, el término constante y similares. Notación con una gran O. Es decir, como la cantidad de datos de sobretensiones, diversos coeficientes y término constante ha sido en general no puede afectar sustancialmente el número de veces de ejecución del algoritmo. El cálculo de coeficientes y término constante para el sentido complejidad del tiempo

1.4 ilustra

  1. T (n) = 2: Esta función se lleva a cabo un total de dos estados, la realización de la frecuencia básica es 2;
    la complejidad de tiempo es O (1): La función básica del número de veces de realización de sólo el término constante, la complejidad de tiempo es O (1)
void test(int n)
{
    int a;
    a = 10;
}
  1. T (n) = 2n: La función de ciclo total n veces, cada ejecución de la declaración 2, los tiempos de ejecución de sustancialmente 2n. Tiempo coeficiente complejidad descartado como O (n)
void test(int n)
{
    int cnt;
    for (cnt = 0; cnt < n; cnt++) {
        int a;
        a= 10;
    }
}
  1. T (n-) = 2 * (. 3. 1 + 2 + ... + n- + +. 4). 1 + =
    2 * (n- +. 1) n- * / ^ n-2 +. 1 = n-2 + +. 1. Debido a la ejecución total (1 + 2 + 3 + 4 + ... + n) ciclos, cada declaración de ejecución del ciclo 2, después de todos los ciclos, y finalmente una instrucción ejecutada, el recuento de ejecución anteriormente; complejidad de tiempo es O (n ^ 2), porque el término constante 1 y n es ignorado, cuando la cantidad de datos que el fuerte aumento, el número de ejecuciones para la curva es casi ningún efecto
void test(int n)
{
    int cnt1, cnt2;
    for (cnt1 = 0; cnt1 < n; cnt1++) {
        for (cnt2 = cnt1; cnt2 < n; cnt2++) {
            int a;
            a = 10;            
        }
    }
    a = 11;
}
  1. T (n) = 2 * logn ya que cada bucle se ejecuta la instrucción 2, ciclos totales realizaron logn; complejidad de tiempo es O (log n), factor ignorado 2
void test(int n)
{
    int cnt;
    for (cnt = 1; cnt < n; cnt *= 2) {
        int a;
        a = 10;
    }
}
  1. T (n) = n * log n * 2 ya que cada ciclo de estado 2, un total de n * ciclos de ejecución logn; complejidad de tiempo de O (nlogn), ignorado factor de 2
void test(int n)
{
    int cnt1, cnt2;
    for (cnt1 = 0; cnt1 < n; cnt1++) {
        for (cnt2 = 1; cnt2 < n; cnt2 *= 2) {
            int a;
            a = 10;
        }
    }
}
  1. T (n) = 2 * n ^ 3, ya que cada ciclo de estado 2, n ^ 3 ciclos totales de ejecución; complejidad de tiempo de O (n ^ 3), el coeficiente ignorado 2
void test(int n)
{
    int cnt1, cnt2, cnt3;
    for (cnt1 = 0; cnt1 < n; cnt1++) {
        for (cnt2 = 0; cnt2 < n; cnt2++) {
            for (cnt3 = 0; cnt3 < n; cnt3++) {
                int a;
                a = 10;
            }
        }
    }
}
  1. número de Fibonacci de la implementación recursiva, cada llamada a la función se descomponen, y luego de nuevo dos veces para llamar a la función. Por lo tanto, la complejidad de tiempo es O (2 ^ n)
int test(int n)
{
    if (n == 0 || n == 1) {
        return 1;
    }
    return (test(n-1) + test(n-2));
}

1.5 Comparación de la complejidad de tiempo

O (1) <O (log2N) <O (n) <O (nlog2n) <O (n ^ 2) <O (n ^ 3) <O (2 ^ n) <O (n!) <O (n ^ n)

2. complejidad espacial

2.1 Conceptos

Un algoritmo ocupa el espacio incluyen:

  • El espacio ocupado por el propio programa
  • espacio de entrada variable de salida ocupada
  • espacio temporal asignada dinámicamente, por lo general las variables auxiliares

huella de datos de entrada depende sólo del problema en sí, y el algoritmo independiente. Que llamamos espacio complejidad del algoritmo es una medida de ocupación temporal del tamaño del espacio de almacenamiento durante el funcionamiento, el tercer término. En general, siempre que el algoritmo no está relacionado con la distribución espacial y la dinámica recursiva espacio requerido complejidad espacio de pila es normalmente 0 (1).

2.2 ilustra

  1. S (n) = O (1). Complejidad espacial es O (1), porque sólo a, b, c, cuatro variable temporal cnt. Independientemente del número y tamaño de las variables temporales y datos de entrada.
int test(int n)
{
    int a, b, c;
    int cnt;
    for (cnt = 0; cnt < n; cnt++) {
        a += cnt;
        b += a;
        c += b;
    }
}
  1. S (n) = O (n). Complejidad espacial es O (n), debido a que cada recursiva crea una nueva variable de un temporal. Y co-recursiva n veces.
int test(int n)
{
    int a = 1;
    if (n == 0) {
        return 1;
    }
    n -= a;
    return test(n);
}

3. Referencias

4. PostScript

Gracias por leer, recomiendan gustos Cada uno satisface punto de ayuda. Detrás continuará el contenido emocionante, así que estad atentos!


PRECAUCIÓN:

Este artículo original, la bienvenida al aprendizaje reimpresión _

Reproduce, por favor indicar en un lugar destacado:

Bloggers ID: CrazyCatJack

Bowen dirección del enlace original: https://www.cnblogs.com/CrazyCatJack/p/12652242.html


CrazyCatJack

Supongo que te gusta

Origin www.cnblogs.com/CrazyCatJack/p/12652242.html
Recomendado
Clasificación