Preferiblemente, el peor de los casos, la complejidad promedio de tiempo amortizado

La preocupación pública número MageByte, puntuacion sistema de la estrella "mirada" es que creamos una buena cultura del poder. respuesta de fondo "además de grupo" en el grupo de intercambio técnico ganó el crecimiento más técnico. Este artículo escrito desde MageByte- Aoba

Hemos dicho último complejidad de tiempo y el grado de multiplexado espacial , citado un número de técnicas analíticas, así como algunos análisis común complejidad tal como O (1), O (log n ), O (n), O (nlogn), vamos a seguir bien hoy de la complejidad del tiempo.

1. El tiempo mejor de los casos la complejidad (mejor de los casos el tiempo de la complejidad)

2. El peor momento complejidad del caso (peor de los casos el tiempo de la complejidad)

3. El caso en que la complejidad del tiempo promedio (promedio de los casos el tiempo de la complejidad)

4. El tiempo de complejidad amortizado (amortizado complejidad del tiempo)

Análisis de la complejidad

public int findGirl(int[] girlArray, int number) {
  int i = 0;
  int pos = -1;
  int n = girlArray.lentgh();
  for (; i < n; ++i) {
    if (girlArray[i] == number) {
      pos = i;
      break;
    }
  }
  return pos;
}

lógica del código que debe ser muy fácil de ver, encontrar los números aparece ubicación en la matriz desordenada, si no se encuentra devuelve -1. "El coqueteo Académico" Yeh través de la matriz para encontrar el protagonista Académico por este método, porque en este momento no hemos aprendido una variedad de algoritmos de estilo, de principio a inspección del producto terminado no sólo es Académico, por lo que sólo a través de la matriz. array girlArray sostiene Scholar, Dong-Xiang, criada ...... codificación, ahora ligue seleccionando el número de si esta relación se codifica Scholar.

sin pública

El código en diferentes situaciones, la complejidad de tiempo no es lo mismo, por lo que con el fin de describir la complejidad del código en diferentes momentos en diferentes situaciones, hemos introducido == lo mejor, lo peor, la complejidad media hora ==. girlArray n = longitud de la matriz.

  1. Cuando, como un primer tiempo Scholar, la complejidad del código que es O (1).
  2. Cuando el último aumento en el equipo, que el código de tiempo es la complejidad de O (n).
  3. Cuando Académico, pero no en el primer equipo, ya no es la última, no se determina en las filas.
  4. Si los tramposos Washington, también ocupa el Académico no existe en absoluto, Tang Xu Bo también es necesario para el equipo de inspección completa uno aprendido que la complejidad del tiempo se convierte en O (n)

Mejor de los casos el tiempo la complejidad

En el mejor de los casos, el tiempo de ejecución de este código, es decir, "Flirting" el punto más rápido en Scholar. Si esta fila representa matriz chica girlArray, se codifica el número Académico variable. Si el primero es una niña, "Académico" y que la complejidad del tiempo es O (1).

El peor de los casos el tiempo la complejidad

En el peor de los casos, la complejidad del tiempo de ejecución de este código. Un cheque es verdadero a una matriz longitudinal de O (n).

La complejidad media hora caso

De hecho, el mejor y el peor de los casos es un caso extremo, la probabilidad no es muy grande. Por lo tanto, con el fin de representar con mayor precisión la complejidad del tiempo del caso medio, se introduce otro cambio: la complejidad media hora caso .

O el anterior código de "mirar Académico" para determinar la posición de codificación del número aparecerá en el bucle, hay == n + 1 == caso:

A 0 ~ n-1 y no la matriz en esta matriz. Hay n casos de la matriz, además de que no se encuentra en la matriz n + 1 plantados. El número de niñas que atravesar cada caso es diferente. Tenemos que encontrar en cada caso el número de chica acumulativa, y luego se divide por el número total de casos (n + 1), tenemos que atravesar para obtener el número promedio de veces. De Knock pizarra: la complejidad de las fórmulas es el número medio de elementos = cada traverse acumulación / el número de todos los casos

El grado medio de complejidad:

$$ \ frac {((1 + 2 + 3 ... + n) + n)} {(n + 1)} = \ frac {n (n + 3)} {2 (n + 1)} $$

derivación:

$$ \ porque 1 + 2 + 3 ... + n = n + (n-1) + (n-2) + ... 1 $$

$$ \ por lo tanto (1 2 + 3 ... + n) = \ frac {n (1 + n)} {2} $$

$$ \ por lo tanto, (1 + 2 + 3 + ... + n) + n = \ frac {n (3 + n)} {2} $$

De acuerdo con nuestra anterior estudios de complejidad del tiempo y el espacio de la multiplexación de la notación O grande, omitiendo los coeficientes, los operadores de tierra, constantes, por lo que la complejidad media hora caso es O (n) .

complejidad hora prevista

El tiempo de complejidad superior a la media de los casos se deriva sin tener en cuenta la probabilidad de ocurrencia de cada caso, n-un caso + 1, donde, en cada caso, la probabilidad de ocurrencia no es la misma, por lo que también se reintroducen en la probabilidad de ocurrencia de cada análisis específico.

Sobretensión o en el número de números 0 ~ n-1, o no está en 0 ~ n-1, por lo que su probabilidad $ \ frac {1} {2} $.

El número de probabilidad conjunta 0 ~ n-1 es la misma que las posiciones respectivas de 1 / n. La ley de probabilidad de la multiplicación, número en el 0 ~ n-1 es la probabilidad de que una posición arbitraria $$ \ frac {1} {2n} $$.

Por lo tanto, en base a la derivación previa de la probabilidad de ocurrencia de cada caso y luego se tiene en cuenta, se calcularía como la complejidad media hora caso es:

Teniendo en cuenta la probabilidad media de Complejidad:

$$ (1 \ frac {1} {2n} + 2 \ frac {1} {2n} + 3 \ frac {1} {2n} ... + n \ frac {n} {2n}) + n \ frac {1 } {2} = \ frac {3n + 1} {4} $$

Esta es la teoría de probabilidad media ponderada, también llamado el valor esperado, el tiempo de complejidad media nombre completo: la complejidad de tiempo promedio ponderado o de tiempo expectativas complejidad .

Después de la introducción, y la complejidad media se convierte en O ($$ \ frac con 3N +. 1 {{}}. 4 $$) , e ignorando coeficientes constantes, el tiempo medio ponderado de la complejidad resultante es O (n). Por último análisis para derivar terminado, los estudiantes pueden relajarse.

nota:

En la mayoría de los casos, no es necesario distinguir entre el mejor y el peor, la complejidad media hora caso . Sólo la misma pieza de código en el tiempo la complejidad de situaciones diferentes tienen del orden de la brecha , vamos a distinguir tres casos, con el fin de más describir con eficacia la complejidad de tiempo del código.

complejidad del tiempo amortizado de la situación

Por último, un hueso duro a la comprensión de lo anterior, más la probabilidad de que el tiempo de espera que vistazo a la complejidad de esto mucho más fácil. Amortizado complejidad del tiempo, con el tiempo promedio que suena un poco como la complejidad.

complejidad amortizado es un concepto más avanzado, es un caso especial, la aplicación de escenas especiales y más limitado.

análisis correspondiente se llama: amortización análisis o análisis amortizado.

// array 表示一个长度为 n 的数组
// 代码中的 array.length 就等于 n
 int[] array = new int[n];
 int count = 0;

public void insert(int val) {
    if (count == array.length) {
       int sum = 0;
       for (int i = 0; i < array.length; ++i) {
          sum = sum + array[i];
       }
       array[0] = sum;
       count = 1;
    }

    array[count] = val;
    ++count;
 }

lógica de código: insertar en una matriz de datos, cuando la matriz es cuenta llena array.lenth ==, resumió a través de la matriz, la suma del valor de la suma después de la primera posición en la matriz, y luego se inserta el nuevo datos. Pero si la matriz de inicio de espacio libre, insertar directamente los datos en una matriz. Los datos que aquí está lleno: se puede leer y escribir en repetidas ocasiones al espacio de almacenamiento, los usuarios piensan que está vacío está vacío. Si se define una reescritura completa se pone a 0 o un valor que puede ser! Los usuarios sólo se preocupan por el nuevo valor que se almacena!

El análisis de la complejidad del tiempo de lo anterior:

  1. El caso ideal, el espacio libre puede ser insertado directamente en la posición de recuento de subíndice de matriz. Así es O (1).
  2. El peor de los casos, la matriz hay espacio libre, uno tiene que hacer primero bucle a través de la suma, a continuación, insertar. complejidad Tiempo de O (n).

La complejidad del tiempo promedio

Matriz de longitud n, puede ser insertado como una posición diferente, el caso en el que hay n, cada complejidad es O (1).

También hay un caso especial, cuando no se inserta ningún espacio libre, la complejidad es O (n), n + 1 es el total de casos, y la probabilidad de cada caso son $$ \ frac {1} {n + 1} $ $. Por lo tanto, de acuerdo con el método de cálculo de la media ponderada, la complejidad promedio de tiempo:

$$ (1 \ frac {1} {n + 1} + 1 \ frac {1} {n + 1} + 1 \ frac {1} {n + 1} ... + 1 \ frac {1} {n + 1 }) + n \ frac {1} {n + 1} = \ frac {2n} {n + 1} $$

Cuando se omiten las constantes y coeficientes, la complejidad tiempo promedio es O (1).

De hecho, no necesitamos que ser tan complicado, con el método de contraste findGirl inserción.

  1. En casos extremos findGirl complejidad de O (1), y de inserción de la situación básica es O (1). Sólo cuando el arsenal completo es O (n).
  2. Para la función de inserción (), O tiempo complejidad (1) de inserción y O (n) la complejidad momento de la inserción, la frecuencia de aparición es muy regular, y antes y después de un cierto relación de temporización, un generalmente O después (n) se inserta, seguido por el n-1 O (1) operación de inserción, el ciclo.

El análisis de amortización

Análisis medio complejidad del ejemplo anterior no necesita tan complejo, sin introducir el conocimiento de la teoría de la probabilidad.

Como puede verse mediante el análisis de la muestra para la mayoría de código de complejidad O (1), sólo la extrema complejidad de mayor O (n). Al mismo tiempo la complejidad de los seguir ciertas reglas, típicamente un O (n), y n número de O (1). Utilizar un método más simple para el análisis de una escena en particular: análisis de amortización .

La amortización obtenido por la complejidad de tiempo de análisis se amortiza complejidad de tiempo .

La idea general: Cada vez O (n) será seguido por n veces O (1), de manera que la complejidad que consume tiempo compartido igualmente baja consume tiempo complejidad . Obtenido complejidad de tiempo amortizado es O (1).

escenarios de aplicación : complejidad de tiempo amortizado y amortización escenarios de análisis más especiales, los datos para una operación continua, en la mayoría de los casos, la complejidad de tiempo es muy baja, solamente complejidad de tiempo de los casos individuales más altas. Este conjunto de operaciones que existen relación de temporización coherente.

Esta vez vamos a poner este conjunto de acciones analizada en conjunto, el alto grado de complejidad al resto a partes iguales de baja complejidad , que generalmente se amortiza complejidad del tiempo es equivalente al tiempo mejor de los casos complejidad.

Nota: amortizados complejidad del tiempo es (usando un escenarios de aplicación especiales) un tipo especial de complejidad media, la forma en que puede dominar el análisis.

Amortizado complejidad del tiempo es un tipo especial de complejidad promedio de tiempo , no es necesario gastar demasiado esfuerzo para distinguir entre ellos. Debe tener la mayor parte de su análisis el análisis, la amortización. Como resultado del análisis se llama o se llamaba compartida por igual término medio, esto es sólo una declaración, no importa.

El final de la frase, pensamiento

Por último, dejar una pregunta para todo el mundo, con el estudio de este artículo justo por debajo del análisis de código, "mejor", "el peor" complejidad del tiempo "reparte por igual."

/ 全局变量,大小为 10 的数组 array,长度 len,下标 i。
int array[] = new int[10];
int len = 10;
int i = 0;

// 往数组中添加一个元素
void add(int element) {
   if (i >= len) { // 数组空间不够了
     // 重新申请一个 2 倍大小的数组空间
     int new_array[] = new int[len*2];
     // 把原来 array 数组中的数据依次 copy 到 new_array
     for (int j = 0; j < len; ++j) {
       new_array[j] = array[j];
     }
     // new_array 复制给 array,array 现在大小就是 2 倍 len 了
     array = new_array;
     len = 2 * len;
   }
   // 将 element 放到下标为 i 的位置,下标 i 加一
   array[i] = element;
   ++i;
}

El significado general es añadir un elemento a la matriz, cuando el espacio no es suficiente tiempo para regenerar una sensación de espacio y el doble de la matriz original con el fin de copiar la matriz de datos original a la nueva matriz.

De hecho, los estudiantes aquí también se puede extender a la ampliación de la capacidad de HashMap, cuando los elementos espada factor de capacidad de carga de 0,75, el doble de capacidad de HashMap requiere la extensión de los originales y re-elementos en la nueva matriz. A continuación, la complejidad del tiempo es ¿cuánto?

Nº MageByte la atención del público detrás del escenario respuesta "añadir" para obtener respuestas a este tema, también puede responder "además de grupo" tecnología para unirse al grupo para compartir con nosotros sus pensamientos juntos, somos la primera información en tiempo.

MageByte

Referencias: "Estructuras de Datos y Algoritmos de belleza"

Supongo que te gusta

Origin blog.51cto.com/14745561/2478783
Recomendado
Clasificación