Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos
Unidad 1
Notación Asintótica
¿Por qué el análisis de algoritmos?
• Determinar tiempos de respuesta (runtime).
• Determinar recursos computacionales.
Aproximación teórica
• Generaliza el número de operaciones que requiere un algoritmo para
encontrar la solución a un problema.
Análisis de algoritmos
Facilidad de
Mantenibilidad Extensibilidad
uso
Corrección
Ventajas Desventajas
• Elección de algoritmos eficientes para • Para muchos casos, en análisis no es trivial
resolver problemas específicos
• No depende de lenguajes de programación
ni de hardware
Para realizar el análisis de un algoritmo
es necesario:
Determinar el
número de
Conocer la operaciones a
dimensión de la realizar
Conocer la entrada
complejidad (número de
del problema elementos)
que resuelve el
algoritmo
• La complejidad de un algoritmo se representa a través de una función matemática
• Solución: No medir tiempo (segundos, por ejemplo), sino el número de operaciones elementales
ejecutadas.
• Operación Elemental: Toda operación que tarda un tiempo constante en cualquier procesador
razonable.
• Típicamente, se consideran elementales las asignaciones, operaciones aritméticas y relacionales
con tipos de datos de tamaño fijo, acceso a arrays.
• En general se cuenta sólo un tipo de operación concreta (la más relevante para la eficiencia del
algoritmo)
• Conociendo el número de operaciones y lo que tarda cada una en un procesador concreto, se puede
hallar el tiempo para ese procesador.
• Medida independiente del procesador.
Tamaño de la entrada
• Definición estricta: El mínimo número de bits necesario para representar la parte no pre -
calculable de la entrada del algoritmo.
• Definición útil: Uno o más valores relacionados con los datos de entrada que sirven de parámetros
para expresar las funciones que miden el uso de recursos del algoritmo.
• En el caso de algoritmos que trabajan sobre colecciones de datos, suele ser el número de datos
que contienen.
• Para algoritmos de cálculo con enteros de tamaño arbitrario, se suele usar el número de bits de
esos enteros (se tratan como arrays de bits).
• El tamaño de la entrada puede indicarse por más de un valor (siempre enteros positivos).
Dependencia con el tamaño
• Solución: Expresar la complejidad no mediante un valor sino por una función cuyo parámetro(s) es
el tamaño de la entrada.
• El tamaño de la entrada, si es un único valor, se suele denominar n.
• La complejidad temporal se denominará mediante la función T(n), y la espacial por E(n).
• De esa función interesa, más que su forma concreta, su ritmo de crecimiento.
• Nos da la idea de como escala un algoritmo: Cómo crece su complejidad cuando aumenta el
tamaño de la entrada.
Dependencia con los valores
• El tiempo que requiere un algoritmo para dar una respuesta, se divide generalmente en
3 casos
• Peor Caso: caso más extremo, donde se considera el tiempo máximo para solucionar un
problema
• Caso promedio: caso en el cual, bajo ciertas restricciones, se realiza un análisis del
algoritmo
• Mejor caso: caso ideal en el cual el algoritmo tomará el menor tiempo para dar una
respuesta
• Por ejemplo, ¿Cuál es el peor y mejor caso de el algoritmo de ordenamiento
“burbuja”?
Operación elemental
Es aquella operación cuyo tiempo de ejecución se puede acotar superiormente por una constante que
solamente dependerá de la implementación particular usada.
• No depende de parámetros
• No depende de la dimensión de los datos de entrada
Crecimiento de Funciones
g(n)
n0 n
Ejemplos
⚫ ¿3·n2 O(n2)?
⚫ Aplicando la definición se debe cumplir:
⚫ ¿3·n2 O(n2)? Si
⚫ Aplicando la definición se debe cumplir:
o Por tanto, se propone una g(n) = n2 de tal forma que se demostrará si f(n) O(n2)
Ejemplo
o f(n) = (g(n)), c2g(n) y c1g(n) son las cotas asintóticas de f(n) tanto superior como inferior
respectivamente
o Diremos que f(n) (g(n)) si f(n) pertenece tanto a
Teorema