¿Cuál es el significado de la complejidad en el algoritmo?

La complejidad de un algoritmo es una función f (n) que mide el tiempo y el espacio utilizados por un algoritmo en términos de tamaño de entrada n.

En informática, la complejidad de un algoritmo es una forma de clasificar qué tan eficiente es un algoritmo, en comparación con otros algoritmos. La atención se centra en cómo aumenta el tiempo de ejecución con el conjunto de datos a procesar. La complejidad computacional y la implementación eficiente del algoritmo son importantes en la computación, y esto depende de estructuras de datos adecuadas.

¿Qué efectos tiene el tiempo de ejecución de un algoritmo?

(a) computadora utilizada, la plataforma de hardware
(b) representación de tipos de datos abstractos (ADT)
(c) eficiencia del compilador
(d) competencia del implementador (habilidades de programación)
(e) complejidad del algoritmo subyacente
(f) tamaño de la entrada

Mostraremos que de los anteriores (e) y (f) son generalmente los más significativos.

Tiempo para que un algoritmo ejecute t (n)

Una función de entrada. Sin embargo, intentaremos caracterizar esto por el tamaño de la entrada. Intentaremos estimar el PEOR CASO, y a veces el MEJOR CASO, y muy raramente el CASO PROMEDIO.

¿Qué medimos?

Al analizar un algoritmo, en lugar de un fragmento de código, intentaremos predecir el número de veces que se realiza “la actividad principal” de ese algoritmo. Por ejemplo, si estamos analizando un algoritmo de clasificación, podríamos contar la cantidad de comparaciones realizadas, y si es un algoritmo para encontrar una solución óptima, la cantidad de veces que evalúa una solución. Si se trata de un algoritmo de coloración de gráficos, podríamos contar la cantidad de veces que verificamos que un nodo coloreado sea compatible con sus vecinos.

Peor de los casos

… es el tiempo de ejecución máximo, sobre todas las entradas de tamaño n, ignorando los efectos (a) a (d) anteriores. Es decir, solo consideramos el “número de veces que se realiza la actividad principal de ese algoritmo”.

Mejor caso

En este caso nos fijamos en instancias específicas de entrada de tamaño n. Por ejemplo, podríamos obtener el mejor comportamiento de un algoritmo de ordenación si la entrada ya está ordenada.

Caso promedio

Podría decirse que el caso promedio es la medida más útil. Es posible que el peor de los casos sea patológico y extremadamente raro, y que nos preocupe más cómo funciona el algoritmo en el caso general.

Lamentablemente, esto suele ser algo muy difícil de medir . En primer lugar, debemos ser capaces de definir de alguna manera por lo que queremos decir como la “entrada promedio de tamaño n”. Necesitaríamos saber mucho sobre la distribución de casos en todos los conjuntos de datos de tamaño n. Alternativamente, podríamos hacer una suposición posiblemente peligrosa de que todos los conjuntos de datos de tamaño n son igualmente probables.

Fuente: Introducción al algoritmo por Thomas H. Cormen

More Interesting

Cómo resolver / pensar en funciones recursivas complejas

Cómo insertar un valor al final de una lista vinculada

¿Cuándo es conveniente resolver un problema usando un algoritmo codicioso?

¿Por qué el algoritmo ikj es más rápido que el algoritmo ijk para la multiplicación de matrices?

¿Desde dónde debemos comenzar a aprender IA, aprendizaje automático y algoritmos?

¿Qué algoritmo debo usar para la generación de código para mi AST?

Quiero desarrollar un software profesional, ¿qué debo hacer?

¿Cuáles son los algoritmos de detección de spam social de última generación?

¿Por qué me cuesta entender la recursividad?

¿BFS es más rápido y más eficiente que DFS?

¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?

Cómo escribir una matriz para un libro de calificaciones que acepte 10 entradas y no requiera usarlas todas

¿Cómo pueden uno y qué algoritmos podrían usarse para entrenar una red neuronal profunda con una cantidad limitada de datos desaprender sus representaciones mal aprendidas?

¿Cuál es el enfoque algorítmico para encontrar el primer entero positivo que falta si se proporciona una matriz entera sin clasificar en O (n) complejidad de tiempo y espacio constante?

¿Puedes pensar en dos situaciones en las que usarías listas vinculadas?