EDA Clase 2 An Lisis de Algoritmos
EDA Clase 2 An Lisis de Algoritmos
EDA Clase 2 An Lisis de Algoritmos
Luis Celedón
2021
1/36
Notación O
2/36
Notación O
3/36
Notación O
4/36
Notación O
5/36
Notación O
6/36
Notación O
7/36
Complejidad de algoritmos secuenciales e iterativos
Devolver C
8/36
Complejidad de algoritmos secuenciales e iterativos
9/36
Complejidad de algoritmos secuenciales e iterativos
10/36
Complejidad de algoritmos secuenciales e iterativos
11/36
Complejidad de algoritmos secuenciales e iterativos
x = 3 * ( 5 + x ) / ( - y - 6)
t0 = 5 + x
t1 = 3 * t0
t2 = -y
t3 = t2 - 6
x = t1 / t3
12/36
Complejidad de algoritmos secuenciales e iterativos
x != 3 && x < 8
0: si x != 3 saltar a 3
1: t0 = falso
2: saltar a 4
3: t0 = verdadero
4: si x < 8 saltar a 7
5: t1 = falso
6: saltar a 8
7: t1 = verdadero
8: t2 = t0 and t1
13/36
Complejidad de algoritmos secuenciales e iterativos
Ejemplo: factorial
I El factorial de un número natural n se define por la
multiplicación de números naturales sucesivos desde 1 hasta
n : n! = 1 · 2 · 3 · ... · n. Puede ser calculado iterativamente
como se muestra a continuación
Factorial ( n : entero ): entero
factorial = 1
Para i desde 2 hasta n hacer :
factorial = factorial * i
Devolver factorial
14/36
Complejidad de algoritmos secuenciales e iterativos
Ejemplo: factorial
I Asignación, tiempo constante
I Ciclo Para que se ejecuta n-1 veces
I Dentro del ciclo, asignación con tiempo constante
I Sentencia de retorno con tiempo constante
15/36
Complejidad de algoritmos secuenciales e iterativos
Ejemplo: factorial
I T (n) = c + c · (n − 1) + c = c · (n + 1)
I T (n) ∼ O(n)
16/36
Complejidad de algoritmos secuenciales e iterativos
17/36
Complejidad de algoritmos secuenciales e iterativos
18/36
Complejidad de algoritmos secuenciales e iterativos
19/36
Complejidad de algoritmos secuenciales e iterativos
20/36
Complejidad de algoritmos secuenciales e iterativos
21/36
Complejidad de algoritmos recursivos
¿Qué es recursión?
22/36
Complejidad de algoritmos recursivos
(
n · (n − 1)! n>1
Factorial(n) =
1 n = 0, 1
23/36
Complejidad de algoritmos recursivos
(
T (n − 1) + c n>1
T (n) =
c n = 0, 1
24/36
Complejidad de algoritmos recursivos
T (n) = T (n − 1) + c
T (n) = T (n − 2) + c + c = T (n − 2) + 2c
T (n) = T (n − 3) + c + c + c = T (n − 3) + 3c
...
T (n) = T (n − k) + kc
25/36
Complejidad de algoritmos recursivos
(
Fib(n − 1) + Fib(n − 2) n > 1
Fib(n) =
1 n = 0, 1
26/36
Complejidad de algoritmos recursivos
(
T (n − 1) + T (n − 2) n > 1
T (n) =
c n = 0, 1
27/36
Complejidad de algoritmos recursivos
T (n) ∼ O(n)
28/36
Complejidad de algoritmos recursivos
T (n) = aT (n − b) + O(nk ) si n ≥ b
29/36
Complejidad de algoritmos recursivos
k
n
a<1
O( ) = nk+1 a=1
bn
a a>1
30/36
Complejidad de algoritmos recursivos
31/36
Complejidad de algoritmos recursivos
T (n) = aT ( bn ) + O(nk ) si n ≥ b
32/36
Complejidad de algoritmos recursivos
k a < bk
n
O( ) = nk log n a = bk
logb a
n a > bk
33/36
Ejercicios
1. T (n) = 3T (n − 1)
2. T (n) = T (n − 1) + n(n − 1)
3. T (n) = 3T ( n2 ) + n2
4. T (n) = 2n T ( n2 ) + nn
5. T (n) = 3T ( n3 ) + n
2
34/36
Ejercicios
1. T (n) = 3T (n − 1) → O(3n )
2. T (n) = T (n − 1) + n(n − 1) → O(n3 )
3. T (n) = 3T ( n2 ) + n2 → O(n2 )
4. T (n) = 2n T ( n2 ) + nn → No aplica
5. T (n) = 3T ( n3 ) + n
2 → n log n
35/36
Preguntas?
36/36