Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Métodos
Cuantitativos
1. Algoritmos
2. Complejidad de un Algoritmo
3. Notación Asintótica
4. Cálculo de la Complejidad
Índice de contenidos
1. Algoritmos
Definición
Características de un Algoritmo
2. Complejidad de un Algoritmo
3. Notación Asintótica
4. Cálculo de la Complejidad
Características de un algoritmo
Índice de contenidos
1. Algoritmos
2. Complejidad de un Algoritmo
Complejidad
Factores
Enfoques
3. Notación Asintótica
4. Cálculo de la Complejidad
Definición
El cálculo de la eficiencia o complejidad de un algoritmo consiste
en la evaluación de los recursos necesarios para su ejecución, de
forma que para un determinado problema podamos elegir el mejor
algoritmo.
Enfoques en la evaluación
Enfoques
Empírico o a
Teórico o a priori Híbrido
posteriori
Índice de contenidos
1. Algoritmos
2. Complejidad de un Algoritmo
3. Notación Asintótica
Definición
Notación Orden de f (n) (O())
Notación Omega de f (n) (Ω())
Notación Orden Exacto de f (n) (Θ())
Propiedades de la Notación Orden O()
Jerarquía de los Órdenes de Complejidad
4. Cálculo de la Complejidad
Definición
O expresado de otra forma: decimos que una función T (n) es O(f (n))
si existen constantes n0 y c tales que T (n) ≤ cf (n) para todo
n ≥ n0 .
Resumiendo, se dice que T (n) es del orden de f (n) cuando está aco-
tada superiormente por f (n) para valores suficientemente grandes
de n y haciendo abstracción de posibles constantes multiplicativas.
O expresado de otra forma: decimos que una función T (n) es Ω(f (n))
si existen constantes n0 y c tales que T (n) ≥ cf (n) para todo
n ≥ n0 .
Propiedades de O()
Nº Expresión
1 Reflexiva: f (n) ∈ O(f (n)).
2 Transitiva: Si f (n) ∈ O(g(n)) y g(n) ∈ O(h(n)) → f (n) ∈ O(h(n)).
3 Si g(n) ∈ O(f (n)) y f (n) ∈ O(g(n)) → O(f (n)) ∈ O(g(n)).
4 ∀c ∈ R+ O(cf (n)) = O(f (n)).
5 Si a, b > 1 → O(loga n) = O(logb n) = O(log n).
6 Regla del máximo o suma: O(f (n) + g(n)) = O(máx(f (n), g(n))).
Regla del límite:
f (n)
1. Si lı́m ∈ R+ → f (n) ∈ O(g(n)) y g(n) ∈ O(f (n))
n→∞ g(n)
7 f (n)
2. Si lı́m = 0 → f (n) ∈ O(g(n)) y g(n) ∈
/ O(f (n))
n→∞ g(n)
f (n)
3. Si lı́m = ∞ → f (n) ∈
/ O(g(n)) y g(n) ∈ O(f (n))
n→∞ g(n)
O(1) ⊂ O(log n) ⊂ O(n) ⊂ O(n log n) ⊂ O(n2 ) ⊂ O(n3 ) ⊂ O(nk ) ⊂ O(2n ) ⊂ O(n!)
Comparativa gráfica
Comparativa analítica
Consideraciones importantes
Ejercicio 1
Índice de contenidos
1. Algoritmos
2. Complejidad de un Algoritmo
3. Notación Asintótica
4. Cálculo de la Complejidad
Introducción
Algoritmos No Recursivos
Algoritmos Recursivos
Cálculo de la complejidad
Sentencias simples
Secuencia de instrucciones
El tiempo de ejecución es igual a la suma de los tiempos de eje-
cución de cada una de las sentencias del bloque.
s1;
s2;
...
sk;
Sentencias condicionales
El tiempo de ejecución es igual a la suma del tiempo de evaluación
Tg (n) más el máximo de los tiempos del consecuente Ts1 (n) y la
alternativa Ts2 (n).
Tif (n) = Tg (n) + máx(Ts1 (n), Ts2 (n)).
Su orden, aplicando la regla de la suma, es:
O(Tif (n)) = O(máx(Tg (n), Ts1 (n), Ts2 (n))).
if(g) {
s1;
}
else{
s2;
}
Sentencias iterativas
while(g){
s;
}
Llamada a funciones
Ejercicio 2
Algoritmos recursivos
Métodos
Expansión de recurrencias
Expansión de recurrencias
Expansión de recurrencias
Expansión de recurrencias
Expandimos la función:
(
1 si n ≤ 1
T (n) =
T (n − 1) + 3 si n > 1
T (n) = T (n − 1) + 3
T (n) = T (n − 2) + 3 + 3
T (n) = T (n − 3) + 3 + 3 + 3
···
T (n) = T (n − k) + 3k
Expansión de recurrencias
T (n) = T (n − k) + 3k
O(T (n)) = n
Ejercicio 3 (1/3)
Dados los siguientes algoritmos:
a) Calcular la función de recurrencia de T (n).
b) Calcular el orden de complejidad.
1 int Recursiva(int n)
1 int Recursiva(int n)
2 {
2 {
3 if(n<=1)
3 if(n<=1)
4 {
4 {
5 return 1;
5 return 1;
6 }
6 }
7 else
7 else
8 {
8 {
9 return (Recursiva(n-1) +
9 return (2*Recursiva(n-1));
Recursiva(n-1));
10 }
10 }
11 }
11 }
Ejercicio 3 (2/3)
Dados los siguientes algoritmos:
a) Calcular la función de recurrencia de T (n).
b) Calcular el orden de complejidad.
1 int Recursiva(int n, int x)
1 int Recursiva(int n) 2 {
2 { 3 if(n<=1)
3 if(n<=1) 4 {
4 { 5 return 1;
5 return 1; 6 }
6 } 7 else{
7 else 8 for(int i=1; i<=n; i++){
8 { 9 x = x + 1;
9 return (2*Recursiva(n/2)); 10 }
10 } 11 return Recursiva(n-1,x);
11 } 12 }
13 }
Ejercicio 3 (3/3)
• Suma de cuadrados:
n
n(n + 1)(2n + 1)
i2 =
X
.
i=1
6
Ejercicio 4
Obtener el orden de complejidad de los siguientes algoritmos:
a) Método de la burbuja recursivo:
(
1 si n = 1
T (n) =
T (n − 1) + (n − 1) si n > 1
Recursos electrónicos
• cppreference. (2020). Referencia C++:
https://en.cppreference.com/w/.
• Goalkicker.com (2018). C++: Note for Professionals.
• Goalkicker.com (2018). Algorithms: Notes for Professionals.
• Joyanes, L. (2000). Programación en C++: Algoritmos, Estruc-
turas de datos y Objetos.
Libros:
• Brassard, G., Bratley, P. (1997). Fundamentos de Algoritmia.
• Guerequeta, R., Vallecillo, A. (1998). Técnicas de diseño de
algoritmos.
• Joyanes, L. (2008). Fundamentos de programación: algoritmos,
estructura de datos y objetos.
• Knuth, D. (2011). The Art of Computer Programming, Volu-
mes 1-4. Third Edition.
• Martí, N., Ortega, Y., Verdejo, J.A. (2003). Estructuras de da-
tos y métodos algorítmicos: Ejercicios resueltos.
• Parker, A. Algorithms and Data Structures in C++. CRC Press.