You are on page 1of 3

Facultad de Informtica a Metodolog y Tecnolog de la Programacin a a o

Clara Segura, Alberto Verdejo, Octubre 2003

Anlisis de la complejidad de algoritmos a


Ejercicio 1 (a) (b) (c) (d) Comparar con respecto a O y los siguientes pares de funciones: 2n+1 , 2n . (n + 1)!, n!. log n, n. Para cualquier a R+ , log n, na . Demostrar o refutar las siguientes armaciones: 2n + n99 O(n99 ). 2n + n99 (n99 ). 2n + n99 (n99 ). Si f (n) = n2 , entonces f (n)3 O(n5 ). Si f (n) O(n2 ) y g(n) O(n), entonces f (n)/g(n) O(n). Si f (n) = n2 , entonces 3f (n) + 2n (f (n)). Si f (n) = n2 y g(n) = n3 , entonces f (n)g(n) O(n6 ). Si f O(n) entonces 2f (n) O(2n ). Cuntas multiplicaciones realiza el siguiente algoritmo para calcular potencias? a

Ejercicio 2 (a) (b) (c) (d) (e) (f) (g) (h)

Ejercicio 3

fun potencia1(y : nat, z : nat) dev p : nat p := 1 mientras z > 0 hacer p := p y ; z := z 1 fmientras un Ejercicio 4 Cuntas multiplicaciones realiza el siguiente algoritmo en el caso peor? a

fun potencia2(y : nat, z : nat) dev p : nat p := 1 mientras z > 0 hacer si impar(z) entonces p := p y fsi z := z div 2 y := y y fmientras un Ejercicio 5 Calcular la complejidad del siguiente algoritmo considerando como operacin bsica la suma. o a

fun mult(y, z : nat) dev m : nat si z = 1 entonces m := y si no si par(z) entonces m := mult(2 y, z div 2) si no m := mult(2 y, z div 2) + y fsi fsi un 1

Ejercicio 6

Cuntas multiplicaciones realizan los algoritmos siguientes para calcular el factorial? a fun fact-rec(y : nat) dev x : nat si y 1 entonces x := 1 si no x := y fact-rec(y 1) fsi un

fun fact-it(y : nat) dev x : nat x := 1 mientras y > 1 hacer x := x y y := y 1 fmientras un Ejercicio 7

Calcular la complejidad de los algoritmos siguientes en trminos de n. e fun funcin2(n : nat) dev r : nat o r := 0 k := 10 para i = 1 hasta k hacer para j = i hasta n hacer r := r + 1 fpara fpara un

fun funcin1(n : nat) dev r : nat o r := 0 para i = 1 hasta n 1 hacer para j = i + 1 hasta n hacer para k = 1 hasta j hacer r := r + 1 fpara fpara fpara un Ejercicio 8

Calcular la complejidad temporal en los casos mejor y peor de los siguientes algoritmos:

(a) Clculo del producto de dos matrices de dimensiones n n: a fun producto(a[1..n, 1..n], b[1..n, 1..n] de nm) dev c[1..n, 1..n] de nm u u i := 1 mientras i n hacer j := 1 mientras j n hacer k := 1 s := 0 mientras k n hacer s := s + a[i, k] b[k, j] k := k + 1 fmientras c[i, j] := s j := j + 1 fmientras i := i + 1 fmientras un (b) Ordenacin de un vector a[1..n] con n 0 por el mtodo de insercin: o e o proc ord-insercin(a[1..n] de nm) o u para i = 2 hasta n hacer p := i ; x := a[i] ; seguir := cierto mientras p > 1 seguir hacer si x < a[p 1] entonces a[p] := a[p 1] si no seguir := falso fsi p := p 1 fmientras a[p] := x

fpara fproc (c) El siguiente programa averigua si una matriz es simtrica: e fun simtrica(v[1..n, 1..n] de nm) dev b : bool e u b := cierto ; i := 1 mientras i n b hacer j := i + 1 mientras j n b hacer b := b (v[i, j] == v[j, i]) j := j + 1 fmientras i := i + 1 fmientras un Ejercicio 9 Hallar la solucin exacta de las siguientes recurrencias: o

(b) T (1) = 1, y para toda potencia de 2 n 2, T (n) = 2T (n/2) + 6n 1. (d) T (1) = 1, y para todo n 2, T (n) = (c) T (1) = 1, T (2) = 6, y para todo n 3, T (n) = T (n 2) + 3n + 4.
n1 i=1 T (i) + 1. n1 i=1 T (n i)

(a) T (1) = 1, y para todo n 2, T (n) = 2T (n 1) + n 1.

(e) T (1) = 1, y para todo n 2, T (n) = 2

+ 1.

(f) T (1) = 1, y para toda potencia de 2 n 2, T (n) = 2T (n/2) + n log n.

Ejercicio 10 Supongamos que el siguiente algoritmo se ejecuta sobre un nmero natural n que es potencia u de 5. Dar una relacin de recurrencia para el nmero exacto de divisiones que se realizan en funcin o u o de n y resolverla de forma exacta. proc mickey(n : nat) si n = 1 entonces seguir si no mouse := n/5 para i = 1 hasta 4 hacer mickey(mouse) fpara fsi fproc

Resultados que son necesarios:


n

i2 =
i=1

n(n + 1)(2n + 1) 6

n i=1

2i i = (n 1)2n+1 + 2

Bibliograf a
[1] G. Brassard, P. Bratley. Fundamentos de algoritmia. Prentice Hall, 1997. [2] T. H. Cormen, C. E. Leiserson y R. L. Rivest. Introduction to Algorithms. The MIT Press/McGraw-Hill, 1990. [3] R. Neapolitan, K. Naimipour. Foundations of algorithms using C++ pseudocode. Jones and Bartlett, 1997 [4] R. Pea Mar Diseo de programas. Formalismo y abstraccin. Prentice Hall, 1998. n . n o