¿Qué es la complejidad del algoritmo?

La complejidad de cualquier algoritmo le indica cuántos recursos utilizará la ejecución en algún tamaño de entrada n.

La complejidad del tiempo se puede ver como la medida de qué tan rápido o lento funcionará un algoritmo para el tamaño de entrada. La complejidad del tiempo siempre se da con respecto a algún tamaño de entrada (digamos n). Aquí hay un ejemplo para borrar el texto:

11 personas están paradas en una fila en orden ascendente con respecto a sus alturas. Ahora se le pide que informe a la mediana de sus alturas. Tienes 2 métodos para hacerlo:

  1. A partir de la primera persona (la más pequeña), registra la altura de cada persona en la línea y luego calcula la mediana de los datos. Observe que, en este método, pedimos (calcule) las alturas de los 11 hombres. Eso significa que hicimos el trabajo que se nos dio en el orden del total de hombres parados en la fila. ¿Y si hubiera n hombres? entonces nuestro cálculo habría sido n. Entonces podemos decir que la complejidad del tiempo está directamente relacionada con n u O (n).
  2. Actúas inteligentemente esta vez. Sabías que todos están parados en orden ascendente, por lo que no es necesario que vayan a cada persona. Luego vas a la persona parada en la sexta posición y le preguntas su altura. Él te dice su altura y tú declaras la respuesta. En este enfoque, no importaba si había 10 o 100 hombres, simplemente iría a la persona intermedia y obtendría la respuesta. Así que aquí tuvo que trabajar solo una vez, o podemos decir que la complejidad del tiempo es independiente del tamaño de entrada y puede escribirse como O (1).

Entonces, ¿qué método preferirías? Claramente el segundo.


La complejidad del espacio puede verse como la cantidad de memoria adicional que necesita para ejecutar su algoritmo. Al igual que la complejidad del tiempo, también se proporciona con respecto a algún tamaño de entrada (n). Otro ejemplo :

Se deben transportar 10 bolsas de un sitio a otro. De nuevo tienes dos opciones.

  1. Usted elige un vehículo pequeño que tiene un solo asiento y no puede mantener más de una bolsa en el asiento. Entonces tomas una bolsa y la transportas. Realiza 10 viajes (complejidad de tiempo) pero solo un asiento (complejidad de espacio). Del mismo modo, si tenía n bolsas y tiene la intención de transportarlas con el mismo medio, también necesitará un solo asiento. Por lo tanto, puede decir que la complejidad del espacio para esta solución será constante o independiente del tamaño de entrada (número de bolsas) u O (1).
  2. Ahora estaba harto de hacer muchos viajes entre los dos sitios. Usted elige un autobús con exactamente los mismos asientos que el número de maletas. Mantiene una bolsa por asiento en el autobús. Aquí, tenemos que hacer un solo viaje (complejidad de tiempo) pero hemos usado 10 asientos (complejidad de espacio). Aquí puede decir que el número de asientos (memoria adicional) es directamente proporcional al tamaño de entrada (número de bolsas). Entonces la complejidad del espacio es O (n).

Puede observar el intercambio espacio-tiempo en este ejemplo.


Nota: Hay muchas anotaciones para especificar la complejidad de un algoritmo, aquí he usado el límite superior o la notación Big Oh.

En pocas palabras, es una forma de medir la cantidad de veces que se ejecutan los pasos principales de un algoritmo para completar la tarea para la que fue diseñado.

Intentamos hacer esto con una función de tiempo o espacio. Hacer esto solo no es suficiente, ya que todos sabemos que no podemos medir la complejidad con segundos o bytes utilizados, ya que es absurdo y este valor cambiará a medida que las entradas varían para cada problema. Además, su implementación (incluido el lenguaje de implementación) afectaría en gran medida este valor. Entonces, lo que terminamos haciendo es tratar de predecir cuántas veces se ejecuta la parte principal del código.

El análisis de algoritmos es la determinación de la cantidad de recursos (como tiempo y almacenamiento) necesarios para ejecutarlos. La mayoría de los algoritmos están diseñados para trabajar con entradas de longitud arbitraria. Por lo general, la eficiencia o el tiempo de ejecución de un algoritmo se establece como una función que relaciona la longitud de entrada con el número de pasos (complejidad de tiempo) o ubicaciones de almacenamiento (complejidad de espacio).

El análisis de algoritmos es una parte importante de una teoría de la complejidad computacional más amplia, que proporciona estimaciones teóricas de los recursos necesarios para cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones proporcionan una idea de las direcciones razonables de búsqueda de algoritmos eficientes.

El número mínimo de adiciones que necesita hacer para resolver un problema es la complejidad del problema. Pero como este número mínimo obviamente será una función f (n) del tamaño del problema n. Por lo tanto, la familia de todas las funciones que se acerca a f (n) con una gran n da el manejo adecuado para la complejidad del problema en el dominio de las matemáticas. Esta fue la complejidad del tiempo.
La complejidad del espacio es la cantidad de memoria necesaria para resolver ese problema. Y la definición matemática es similar a la complejidad del tiempo.
Estas son dos medidas básicas de complejidad para cualquier problema.

More Interesting

¿Qué es el "peso" en el algoritmo de Facebook?

Cómo encontrar la cantidad mínima de pasos necesarios para eliminar todos los peones del tablero de ajedrez

¿Qué es un algoritmo para una solución aproximada al problema del vendedor ambulante?

Programación competitiva: ¿Se pueden resolver todos los problemas de Fenwick Tree con Segment Tree?

¿Cuál es un problema que no se puede resolver en tiempo de EXP pero se puede resolver en tiempo de Tetración?

Si un gráfico G contiene un puente, e, ¿es posible construir un árbol de expansión que no incluya este borde?

Cómo elegir un elemento único de una lista dentro de un bucle en R

Cuando trato de entender una técnica como la memorización o lo que sea, me enfrento a muchos dolores y no lo entiendo de inmediato. Necesito intentarlo varias veces. ¿Es normal o debo obtener algoritmos y técnicas con al menos uno o 2 aciertos?

¿Cuáles son los problemas de toma de decisiones?

Cómo resolver el problema de 'La lista negra' en un CodeSprint reciente de HackerRank

¿Qué es 600 en forma binaria?

Un hombre llega a su oficina en 2 horas y regresa en 3 horas. La ruta a su oficina incluye un sendero inclinado hacia arriba, 8 km y senderos inclinados hacia abajo. Cada vez que viaja hacia arriba, su velocidad es de 60 km / h, mientras que en un plano de 80 km / h, y cubre hacia abajo a una velocidad de 100 km / h. ¿A qué distancia está su oficina?

Cómo mejorar la estructura de datos Graph en la programación competitiva

Además de la programación competitiva, ¿cómo aprender algoritmos?

¿Qué algoritmos funcionan detrás de los botones de seguir de Quora e Instagram?