Está en la página 1de 174

Calculando la Complejidad de Algoritmos

Análisis y Diseño de Algoritmos


Dra. Aurea Soriano Vargas

1
Lecturas Recomendadas

● Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,


Clifford Stein, Introduction to Algorithms, 3rd Edition, MIT Press
Capítulo 2.3, 3

● Jon Kleinberg, Éva Tardos, Algorithm Design,


Pearson/Addison-Wesley - Capítulo 2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 2


Recordando...

Crecimiento Lento
O(1)
O(log n)
O(n)
O(n log n)
O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 3
Recordando...

Crecimiento Lento
constante: O(1)
O(log n)
O(n)
O(n log n)
O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 4
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
O(n)
O(n log n)
O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 5
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
O(n log n)
O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 6
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
log-lineal: O(n log n)
O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 7
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
log-lineal: O(n log n)
cuadrática: O(n2)
O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 8
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
log-lineal: O(n log n)
cuadrática: O(n2)
exponencial: O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 9
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
log-lineal: O(n log n)
cuadrática: O(n2)
exponencial: O(cn) (c es una constante> 1)
Crecimiento Rápido
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 10
Recordando...

Crecimiento Lento
constante: O(1)
logarítmica: O(log n)
lineal: O(n)
log-lineal: O(n log n)
cuadrática: O(n2)
exponencial: O(cn) (c es una constante> 1)
Crecimiento Rápido
polinomial: O(nc) (c es una constante > 0)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 11
Recordando...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 12


¿Qué función domina?

n3 + 2n2 100n2 + 1000

n0.1 log n

5n5 n!

n-152n/100 1000n15

82log n 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 13


Round #1

n3 + 2n2 vs. 100n2 + 1000

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 14


Round #1

n3 + 2n2 vs. 100n2 + 1000

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 15


Round #1

n3 + 2n2 vs. 100n2 + 1000

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 16


¿Qué función domina?

n3 + 2n2 100n2 + 1000

n0.1 log n

5n5 n!

n-152n/100 1000n15

82log n 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 17


Round #2

n0.1 vs. log n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 18


Round #2

n0.1 vs. log n


sqrt(n,10)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 19


Round #2

n0.1 vs. log n


sqrt(n,10)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 20


Round #2

n0.1 vs. log n


sqrt(n,10)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 21


¿Qué función domina?

n3 + 2n2 100n2 + 1000

n0.1 log n

5n5 n!

n-152n/100 1000n15

82log n 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 22


Round #3

5n5 vs. n!

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 23


Round #3

5n5 vs. n!

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 24


Round #3

5n5 vs. n!

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 25


¿Qué función domina?

n3 + 2n2 100n2 + 1000

n0.1 log n

5n5 n!

n-152n/100 1000n15

82log n 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 26


Round #4

n-152n/100 vs. 1000n15

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 27


Round #4

n-152n/100 vs. 1000n15

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 28


Round #4

n-152n/100 vs. 1000n15

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 29


¿Qué función domina?

n3 + 2n2 100n2 + 1000

n0.1 log n

5n5 n!

n-152n/100 1000n15

82log n 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 30


Round #5

82log(n) vs. 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 31


Round #5

82log(n) vs. 3n7 + 7n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 32


Recordando...

f(n) = ………… = O(...)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 33


Recordando...

f(n) = ………… = O(...)

● Elimina los términos de bajo orden


● Eliminar coeficientes constantes

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 34


Recordando álgebra...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 35


Recordando álgebra...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 36


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 37


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 38


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 39


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 40


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 41


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 42


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 43


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 44


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 45


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 46


Ejemplo:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 47


Analizando código...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 48


Operaciones básicas:

Read a
Read x, y, z
x = y + z
Print x

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 49


Operaciones básicas:

O(1) u O(c)
Read a
Read x, y, z
x = y + z
Print x

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 50


Operaciones básicas:

O(1) u O(c)
Read a
Read x, y, z O(3) u O(c)

x = y + z
Print x

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 51


Operaciones básicas:

O(1) u O(c)
Read a
Read x, y, z O(3) u O(c)

O(2) u O(c)
x = y + z
Print x

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 52


Operaciones básicas:

O(1) u O(c)
Read a
Read x, y, z O(3) u O(c)

O(2) u O(c)
x = y + z
Print x O(1) u O(c)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 53


Operaciones básicas:

O(1) u O(c)
Read a
Read x, y, z O(3) u O(c)

O(2) u O(c)
x = y + z
Print x O(1) u O(c)

= O(7) u O(c) u O(1)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 54


Analizando código...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 55


Analizando código...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 56


While

get n
set count to 0
while n is greater than 1
decrease n by 1
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 57


While

O(1)
get n
set count to 0
while n is greater than 1
decrease n by 1
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 58


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1


decrease n by 1
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 59


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1 O(1)


decrease n by 1
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 60


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1 O(1)


decrease n by 1 O(1)

Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 61


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1 O(1)


decrease n by 1 O(1)
O(1)
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 62


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1 O(1)


O(1) n
decrease n by 1
O(1)
Increase count by 1
end

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 63


While

O(1)
get n
set count to 0 O(1)

while n is greater than 1 O(1)


O(1) n
decrease n by 1
O(1)
Increase count by 1
end

= O(1) + O(1) + n O(3)


= O(1) + O(1) + O(3n) = O(3n) = O(n)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 64


Condicionales...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 65


While

SET X = 1
FOR I FROM 1 TO N:
PRINT X
SET X = X * 2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 66


While

O(1)
SET X = 1
FOR I FROM 1 TO N: O(1)

PRINT X O(1)
SET X = X * 2 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 67


While

O(1)
SET X = 1
FOR I FROM 1 TO N: O(1)

PRINT X O(1)
SET X = X * 2 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 68


While

O(1)
SET X = 1
FOR I FROM 1 TO N: O(1)

PRINT X O(1) n
SET X = X * 2 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 69


For

O(1)
SET X = 1
FOR I FROM 1 TO N: O(1)

PRINT X O(1) n
SET X = X * 2 O(2)

= O(1) + n*O(4)
= O(1) + O(4n)
= O(4n) = O(n)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 70


Condicionales...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 71


Condicionales

if C then
S1
else
S2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 72


Condicionales

if C then O(1)
S1 O(S1)
else O(S2)
S2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 73


Condicionales

if C then O(1)
S1 O(S1)
else O(S2)
S2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 74


Condicionales

if C then O(1)
S1 O(S1) O(max(S1, S2))
else O(S2)
S2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 75


Condicionales

if C then O(1)
S1 O(S1) Ω(min(O(S1), O(S2))
else O(S2)
S2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 76


Analizando código...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 77


Bloque

if C then O(1)
S1 O(S1) O(max(S1, S2))
else O(S2)
S2
SET X = 1
O(1)
FOR I FROM 1 TO N: O(1)
PRINT X O(1) n
O(2)
SET X = X * 2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 78


Bloque

if C then O(1)
S1 O(S1) O(max(S1, S2))
else O(S2)
S2
SET X = 1
O(1)
FOR I FROM 1 TO N: O(1)
PRINT X O(1) n
O(2)
SET X = X * 2

O(max(s1,s2) + 1 + 4n)=
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 79
Bloque

if C then O(1)
S1 O(S1) O(max(S1, S2))
else O(S2)
S2
SET X = 1
O(1)
FOR I FROM 1 TO N: O(1)
PRINT X O(1) n
O(2)
SET X = X * 2

O(max(s1,s2) + 1 + 4n)=
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) O(max(max(s1,s2), 1, 4n)) 80
Empezamos el viaje...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 81


Empezamos el viaje...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 82


Loops anidados

for i = 1 to n do
for j = 1 to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 83


Loops anidados

for i = 1 to n do
for j = 1 to n do
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 84


Loops anidados

for i = 1 to n do
for j = 1 to n do O(1)
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 85


Loops anidados

for i = 1 to n do
for j = 1 to n do O(1)
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 86


Loops anidados

for i = 1 to n do
for j = 1 to n do O(1)
n
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 87


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 88


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 89


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)
n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 90


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)
n

= ((O(3) * n) + O(1)) *n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 91


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)
n

= ((O(3) * n) + O(1)) *n
= (O(3n) +O(1))*n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 92


Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)
n

= ((O(3) * n) + O(1)) *n
= (O(3n) +O(1))*n
= O(n) * n
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 93
Loops anidados

for i = 1 to n do O(1)

for j = 1 to n do O(1)
n
sum = sum + 1 O(2)
n

= ((O(3) * n) + O(1)) *n
= (O(3n) +O(1))*n
= O(n) * n
= O(n2)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 94
Recordando series importantes:

• Suma de cuadrados:

• Suma de exponentes:

• Series geométricas:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 95


Loops anidados

for i = 1 to n do
for j = 1 to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 96


Loops anidados

for i = 1 to n do
for j = 1 to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 97


Loops anidados

for i = 1 to n do
for j = 1 to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 98


Loops anidados dependientes

for i = 1 to n do
for j = i to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 99


Loops anidados dependientes

for i = 1 to n do
for j = i to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 100


Loops anidados dependientes

for i = 1 to n do
for j = i to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 101


Recordando series importantes:

• Suma de cuadrados:

• Suma de exponentes:

• Series geométricas:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 102


Recordando series importantes:

• Series
aritméticas:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 103


Loops anidados dependientes

for i = 1 to n do
for j = i to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 104


Loops anidados dependientes

for i = 1 to n do
for j = i to n do
sum = sum + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 105


Evaluando xn

P = x
k = 1
While k < n
P = P * x
k = k + 1
Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 106


Evaluando xn

P = x O(1)

k = 1
While k < n
P = P * x
k = k + 1
Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 107


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n
P = P * x
k = k + 1
Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 108


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n O(1)

P = P * x
k = k + 1
Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 109


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n O(1)

P = P * x O(2)

k = k + 1
Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 110


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n O(1)

P = P * x O(2)

k = k + 1 O(2)

Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 111


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n O(1)

P = P * x O(2)

k = k + 1 O(2)

Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 112


Evaluando xn

P = x O(1)

k = 1 O(1)

While k < n O(1)

P = P * x O(2)
n-1
k = k + 1 O(2)

Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 113


Evaluando xn

P = x O(1)

k = 1 O(1)

O(1) n
While k < n
P = P * x O(2)
n-1
k = k + 1 O(2)

Print P

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 114


Evaluando xn

P = x O(1)

k = 1 O(1)

O(1) n
While k < n
P = P * x O(2)
n-1
k = k + 1 O(2)

Print P O(1)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 115


Evaluando xn

P = x O(1)

k = 1 O(1)

O(1) n
While k < n
P = P * x O(2)
n-1
k = k + 1 O(2)

Print P O(1)

Total = 2 + n + 4(n-1) +1 =

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 116


Evaluando xn

P = x O(1)

k = 1 O(1)

O(1) n
While k < n
P = P * x O(2)
n-1
k = k + 1 O(2)

Print P O(1)

Total = 2 + n + 4(n-1) +1 = 4n+n -4+3=

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 117


Evaluando xn

P = x O(1)

k = 1 O(1)

O(1) n
While k < n
P = P * x O(2)
n-1
k = k + 1 O(2)

Print P O(1)

Total = 2 + n + 4(n-1) +1 = 4n+n -4+3= 5n -1= O(n)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 118


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 119


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an
S = a0 , k = 1
while k <=n
S = S + a k xk
k = k+ 1
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 120


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n
S = S + a k xk
k = k+ 1
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 121


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1)

S = S + a k xk
k = k+ 1
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 122


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + a k xk
k = k+ 1
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 123


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + a k xk
k = k+ 1 O(2)
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 124


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+...
k = k+ 1 O(2)
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 125


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
k = k+ 1 O(2)
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 126


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
k = k+ 1 O(2)
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 127


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 128


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S O(1)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 129


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S O(1)

=2 + (n+1) + n(2+5k+2) +1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 130


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S O(1)

=2 + (n+1) + n(2+5k+2) +1
= 4 + n + 2n + 5kn + 2n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 131


Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S O(1)

=2 + (n+1) + n(2+5k+2) +1
= 4 + n + 2n + 5kn + 2n
= 5kn + 5n + 4
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 132
Evaluando un polinomio

P(x) = anxn + an-1xn-1 + … +a1x + a0


Given values for n, x, a0,
a1,…an O(2)
S = a0 , k = 1
while k <=n O(1) (n+1)

S = S + ak x k 2+1+5k-1
(n)
k = k+ 1 O(2)
Print S O(1)

=2 + (n+1) + n(2+5k+2) +1
= 4 + n + 2n + 5kn + 2n k-> n
= 5kn + 5n + 4
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 133
Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 134


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj| O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 135


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj| O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 136


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj| O(max(3,0))
O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 137


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj| O(max(3,0))
O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 138


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then O(n)
m := |ai – aj| O(max(3,0))
O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 139


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then O(n)
m := |ai – aj| O(max(3,0))
O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 140


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n n
if |ai – aj| > m then O(n)
m := |ai – aj| O(max(3,0))
O(3)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 141


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n n
if |ai – aj| > m then O(n)
m := |ai – aj| O(max(3,0))
O(3)

= n* n *3 =

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 142


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n n
if |ai – aj| > m then O(n)
m := |ai – aj| O(max(3,0))
O(3)

= n* n *3 = 3n2= O(n2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 143


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 144


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Comparaciones: n-1 + n-2 + n-3 + … + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 145


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Comparaciones: n-1 + n-2 + n-3 + … + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 146


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Comparaciones: n-1 + n-2 + n-3 + … + 1


= (n – 1)n/2 = 0.5n2 – 0.5

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 147


Evaluando una función

procedure who_knows(a1, a2, …, an: integers)


//m is the maximum difference between any two numbers in the input sequence
m := 0
for i := 1 to n-1
for j := i + 1 to n
if |ai – aj| > m then
m := |ai – aj|

Comparaciones: n-1 + n-2 + n-3 + … + 1


= (n – 1)n/2 = 0.5n2 – 0.5
= O(n2)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 148
Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1
max := a1
for i := 2 to n
if ai < min then
min := ai
else if ai > max then
max := ai
m := max - min

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 149


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 150


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
n-2
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 151


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
n-2
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min
2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 152


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
n-2
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min
2

=2 + (n-2) *(1+1) + 2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 153


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
n-2
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min
2

=2 + (n-2) *(1+1) + 2
= 4 + 2n -4

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 154


Evaluando una función

procedure max_diff(a1, a2, …, an: integers)


min := a1 1
max := a1 1
for i := 2 to n 1
if ai < min then
n-2
min := ai O(max(1, max(1,0))= O(1)
else if ai > max then
max := ai
m := max - min
1

=2 + (n-2) *(1+1) + 1
= 4 + 2n -4 = 2n = O(n)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 155


Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; for(i=0; i<N; i++)


arr[1] = 0; arr[i] = 0;
arr[2] = 0;
...
arr[N-1] = 0;

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 156


Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++)


arr[1] = 0; (1) arr[i] = 0;
arr[2] = 0; (1)
...
arr[N-1] = 0; (1)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 157


Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++)


arr[1] = 0; (1) arr[i] = 0;
arr[2] = 0; (1)
...
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 158
Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++) (2)

arr[1] = 0; (1) arr[i] = 0; (1)

arr[2] = 0; (1)
...
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 159
Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++) (2)


N
arr[1] = 0; (1) arr[i] = 0; (1)

arr[2] = 0; (1)
...
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 160
Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++) (2)


N
arr[1] = 0; (1) arr[i] = 0; (1)

arr[2] = 0; (1)
...
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 161
Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++) (2)


N
arr[1] = 0; (1) arr[i] = 0; (1)

arr[2] = 0; (1)
...
= N(2+1) = 3N = O(N)
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 162
Versus de dos funciones

Algoritmo 1 Algoritmo 2

arr[0] = 0; (1) for(i=0; i<N; i++) (2)


N
arr[1] = 0; (1) arr[i] = 0; (1)

arr[2] = 0; (1)
...
= N(2+1) = 3N = O(N)
arr[N-1] = 0; (1)
= N * 1= O(N)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 163
Un algoritmo

● Datos de entrada

● Datos resultantes

● Condiciones previas: especifica restricciones sobre los datos de


entrada

● Postcondiciones: especifica cuál es el resultado

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 164


Un algoritmo

● Datos de entrada

● Datos resultantes

● Condiciones previas: especifica restricciones sobre los datos de


entrada

● Postcondiciones: especifica cuál es el resultado

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 165


Demostrar que un algoritmo es totalmente correcto significa:

a. para cualquier entrada de datos correcta:


i. termina y
ii. produce una salida correcta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 166


Ejemplo: un algoritmo secuencial

Swap1(x,y):
aux := x
x := y
y := aux

Precondición:
x = a y y = b
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 167


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y
y := aux

Precondición:
x = a y y = b
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 168


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y 1. Precondición:
y := aux x = a y y = b

Precondición:
x = a y y = b
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 169


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y 1. Precondición:
y := aux x = a y y = b
2. aux := x => aux = a
Precondición:
x = a y y = b
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 170


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y 1. Precondición:
y := aux x = a y y = b
2. aux := x => aux = a
Precondición: 3. x : = y => x = b
x = a y y = b
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 171


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y 1. Precondición:
y := aux x = a y y = b
2. aux := x => aux = a
Precondición: 3. x : = y => x = b
x = a y y = b 4. y := aux => y = a
Postcondición:
x = b y y = a

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 172


Ejemplo: un algoritmo secuencial

Swap1(x,y): Prueba: la lista de acciones aplicadas a la


condición previa implica la condición
aux := x posterior
x := y 1. Precondición:
y := aux x = a y y = b
2. aux := x => aux = a
Precondición: 3. x : = y => x = b
x = a y y = b 4. y := aux => y = a
Postcondición: 5. x = b y y = a es la
x = b y y = a Postcondición

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 173


iGracias!

174

También podría gustarte