¿Cómo calculamos la complejidad del espacio?

La complejidad espacial de un algoritmo o estructura de datos es la cantidad máxima de espacio utilizada en cualquier momento, ignorando el espacio utilizado por la entrada al algoritmo. La notación para la complejidad del espacio es exactamente la misma que la notación para la complejidad del tiempo.

Ejemplos:

La búsqueda binaria usa [math] \ Theta (1) [/ math] space *. El único espacio adicional utilizado es el número constante de índices.

La ordenación rápida usa [math] \ Theta (1) [/ math] space * si se realiza en el lugar (donde se modifica la matriz de entrada), pero tiene la complejidad de espacio [math] \ Theta (n) [/ math] de lo contrario (ya que debe construir una nueva lista de tamaño [math] n [/ math]).

El almacenamiento de un gráfico en forma de lista de adyacencia requiere espacio [matemático] \ Theta (V + E) [/ matemático] *. Para cada vértice, almacenamos una lista de sus bordes. Hay bordes [matemáticos] E [/ matemáticos], por lo que claramente usamos el espacio [matemático] \ Omega (E) [/ matemático]. Sin embargo, también necesitamos almacenar referencias [matemáticas] \ Omega (V) [/ matemáticas] en las listas.

El almacenamiento de un gráfico en forma de matriz requiere espacio [matemático] \ Theta (V ^ 2) [/ matemático]. Para cada par de vértices usamos el espacio [math] \ Theta (1) [/ math] para indicar si el borde entre ellos está presente o no.

* Esto realmente depende del modelo que especifique. En un modelo más formal, cualquier índice o puntero en una estructura de tamaño [math] n [/ math] requiere [math] \ Omega (\ log n) [/ math] bits, por lo que la complejidad del espacio será [math] \ Omega (\ log n) [/ math]. Por lo general, se utiliza un modelo más simple en el que se considera que los índices y los punteros toman espacio [matemática] \ Theta (1) [/ matemática].

También se hacen los mismos tipos de simplificaciones cuando se considera la complejidad del tiempo. Por lo general, se supone que agregar dos números es una operación [matemática] \ Theta (1) [/ matemática], pero agregar dos números de bit [matemática] n [/ matemática] necesariamente requiere [matemática] \ Omega (n) [/ matemática] hora.

La complejidad del espacio se refiere a la magnitud del espacio auxiliar que su programa necesita para procesar la entrada.

En términos generales, hay dos tipos de algoritmos para los que tenemos que calcular la complejidad del espacio:

  1. Algoritmos Iterativos

    Para algoritmos iterativos tenemos que considerar las variables y las estructuras de datos que declaramos en nuestro programa. Para ser más generales, si reservamos cualquier memoria aparte de la entrada, cuenta para la complejidad del espacio.

    Por ejemplo, declarar una matriz de tamaño n agregaría a la complejidad del espacio un factor de O (n), una matriz 2D agregaría a la complejidad del espacio un factor de O (n ^ 2) y así sucesivamente. Las variables simples agregan una complejidad espacial de O (1) ya que el tamaño de un tipo de datos en particular siempre es constante. Los casos más difíciles son los tipos de datos definidos por el usuario, sin embargo, en la mayoría de los casos, los algoritmos iterativos son fáciles de analizar en términos de complejidad espacial.

  2. Algoritmos Recursivos

    Estos algoritmos son más complicados porque además de ocuparse de las variables y las estructuras de datos (memoria reservada para operaciones en el montón), también tenemos que ocuparnos de la memoria de pila que se usa para llamadas recursivas.

    Por ejemplo, en el algoritmo de Fibonacci tenemos F (n) = F (n-1) + F (n-2), n> 2. Si rastreamos las llamadas recursivas, vemos que F (4) llama a F (3) y F (2). F (3) llama a F (2) y F (1) que devuelven casos base. Entonces, en un momento dado, vemos que el programa no ocupa más de n celdas en la memoria de la pila para una llamada de función de F (n). Esto será mucho más fácil de entender si dibuja las llamadas de función en un trozo de papel y empuja cada controlador a la pila antes de descender a un nivel más bajo de recursión.

    Por lo tanto, podemos afirmar con seguridad que para este algo en particular, tenemos una complejidad espacial de O (n) (suponiendo que cada celda en la pila reserva el mismo espacio).

complejidad espacial espacio máximo para ejecutar el programa. Por análisis asintótico

Es directamente proporcional al número de tamaño de marco de pila

para la ordenación de burbujas, la complejidad del espacio es O (1), ya que hay un marco de pila significa que no hay regresión.

para el orden de selección, complejidad de espacio O (1), ya que hay un marco de pila significa que no hay regresión.

para ordenación rápida, complejidad de espacio O (logn), desde logn stack frame

pero fusionar el orden, el espacio es la complejidad O (logn) para la versión de la lista, pero en la versión de matriz es N porque se combina muy bien el nuevo tamaño de matriz de n creado que domina sobre el tamaño de la pila logn.

Del mismo modo, la complejidad del espacio de ordenación del montón O (1) ya que no es recursiva.

En cualquier momento, el espacio máximo utilizado por el algoritmo es la complejidad del espacio.
Exprese eso en términos de la función de su tamaño de entrada, como lo hace en complejidad de tiempo. Y luego conviértalo a las mismas notaciones que usa para la complejidad del tiempo.

Las anotaciones asintóticas como [matemáticas] O (f (n)) [/ matemáticas] y [matemáticas] \ Theta (f (n)) [/ matemáticas] miden la tasa de crecimiento de las funciones de valor real sobre los números naturales y surgieron en teoría de números varias décadas antes de que se usaran en teoría computacional.

La complejidad espacial de un algoritmo es una función de valor real del tamaño de la entrada. Por supuesto, también se puede usar la notación asintótica como se usa en el estudio de la complejidad del tiempo en el estudio de la complejidad del espacio.

Otra pregunta es la de estimar la complejidad espacial de un algoritmo. En el caso de las máquinas de Turing, me resulta útil dibujar una representación gráfica de la cinta y especificar cómo se usa esta parte de la cinta durante un cálculo.

La complejidad espacial puede definirse como el espacio máximo utilizado por nuestro algoritmo en cualquier punto del tiempo.

Calculamos la complejidad del espacio como max (input, Extra)

donde extra se refiere al espacio utilizado en forma de pila, variables de programa, algunas estructuras de datos adicionales, como la matriz utilizada durante el tiempo de ejecución del algoritmo.

Deje S (n) denotar la complejidad espacial de nuestro algoritmo entonces

S (n) = i / p + extra

A continuación se muestran las complejidades espaciales del algoritmo Merge Sort.

Ordenar fusión: –

S (n) = i / p + extra

S (n) = O (n) + Tamaño de pila + Matriz adicional utilizada

S (n) = O (n) + O (logn) + (n)

S (n) = O (n).

La complejidad del espacio se mide con respecto al tamaño de entrada para una instancia dada de un problema. Si las unidades de medida son relevantes, normalmente está en bits (por ejemplo, O (log (n)) bits) con respecto al tamaño de entrada.

Calcule de manera similar a la complejidad del tiempo, pero cuente el número de n entradas de algún tamaño my tenga en cuenta las funciones de bloqueo, etc. Luego resuma todo en el límite máximo posible del espacio de memoria recableado: esta es la complejidad del espacio. http://www.google.by/url?q=https

More Interesting

¿Puedo unirme a un montón de computadoras y crear un dispositivo de alto rendimiento? Si puedo, ¿cómo?

¿Cuál fue la colocación promedio para CSE en la Universidad de Thapar en 2014, 2013 y 2012?

¿Cuál es la mejor demostración de Machine Learning realizada en R para sorprenderlo?

¿Vale la pena sobresalir con un título de CS si solo quieres una habilidad comercial flexible que pagará las facturas mientras haces lo que realmente quieres?

¿Cuál es el procedimiento para publicar un artículo de informática?

¿Por qué MS Excel 2007 y posterior terminan en la columna XFD (16384 columnas o 2 ^ 14)?

¿Para qué suelen usar las personas la computación en la nube?

¿Cuáles son muchas cosas que la gente no sabe que no puedes hacer en una computadora o en Internet?

¿Qué debe hacer cuando su computadora hace un volcado de memoria?

¿Cuáles son las ventajas de usar la utilidad 'screen' de Unix sobre múltiples pestañas de terminal?

Como informático con concentración en seguridad de la información, ¿qué trabajos me esperan?

¿Por qué la mayoría de las universidades de informática no están al día con las tendencias de la industria?

Dado un lenguaje con una función de pliegue (ala Haskell) garantizada para terminar, ¿cuán necesario sería la integridad de Turing para que el resto de este lenguaje sea útil?

¿Cuál es la diferencia entre un megabyte y un mebibyte?

¿Por qué la búsqueda aleatoria es mejor que la búsqueda de cuadrícula para la optimización de hiperparámetros?