Vous êtes sur la page 1sur 33

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Captulo 1

Introduccin al anlisis de algoritmos

1.1 Objetivos del anlisis de algoritmos Los algoritmos se analizan con diversos fines: entenderlos, mejorarlos, o seleccionar el ms adecuado para resolver un problema. Estas acciones parten de un anlisis que revele criterios tales como: Correccin. Para determinar si un algoritmo es correcto se demuestran enunciados acerca de la relacin esperada entre la entrada y salida de un algoritmo. Las demostraciones formales parten de axiomas o de teoremas. Las pruebas de escritorio son demostraciones informales que simulan a mano el algoritmo en unos cuantos ejemplos pequeos. Eficiencia. El desempeo de un algoritmo se determina midiendo la cantidad de recursos requeridos en su ejecucin. La complejidad espacial del algoritmo cuantifica la cantidad de memoria ocupada. La complejidad temporal se refiere al tiempo de ejecucin del algoritmo. Cuando no se especifica que tipo de recurso se esta midiendo, se asume que es de tiempo. Sencillez. A menudo, el algoritmo ms sencillo no es el ms eficiente, pero se debe considerar, ya que facilita la escritura correcta, depuracin y modificacin. Si el algoritmo se va a usar con mucha frecuencia, la eficiencia es importante. Si los requerimientos son cambiantes, la sencillez puede ser ms importante Optimalidad. Un algoritmo es ptimo si no existe otro algoritmo, incluso los que todava no se descubren, capaz de resolver el mismo problema de manera ms eficiente. El estudio de la complejidad de un problema pretende determinar la cantidad mnima de trabajo que requiere efectuarse para resolver un problema mediante un algoritmo ptimo.

1.2 Anlisis terico vs. anlisis experimental Tradicionalmente el anlisis de complejidad de un algoritmo se ha efectuado de manera terica. La naturaleza de muchos problemas del mundo real ha llevado al desarrollo de algoritmos cuyo anlisis terico no es suficiente o no es posible de efectuar con las herramientas matemticas disponibles. La algoritmia experimental es un rea emergente que se revisa con profundidad en la unidad IV. En el anlisis terico se determina matemticamente la cantidad de recursos requeridos por cada algoritmo como una funcin cuya variable independiente es el tamao de la entrada. Este anlisis es independiente de los recursos de cmputo, implementacin y programador, facilitando la generalizacin del comportamiento algortmico.

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

En el anlisis emprico, las implementaciones de los algoritmos se ejecutan para diferentes entradas y se comparan en base a los recursos consumidos. Los resultados obtenidos son especficos de las entradas consideradas en el estudio.

1.3 Anlisis de complejidad considerando el tamao de la entrada La eficiencia terica de un algoritmo generalmente se determina mediante el anlisis de complejidad temporal. El anlisis temporal expresa en T(n) el nmero de operaciones bsicas que el algoritmo realiza para una entrada de tamao n. El nmero de operaciones bsicas debe ser proporcional al nmero total de operaciones que realizar el algoritmo, reflejando la esencia del algoritmo. Un ejemplo de operacin bsica es la comparacin de claves que se realiza en un algoritmo de ordenamiento. Para ejemplificar el anlisis de complejidad se utilizarn dos algoritmos que calculan el polinomio p ( x) = an 1 x n 1 + an 1 x n 1 + ... + a1 x + a0 dado el valor de x y el vector de coeficientes a de tamao n. Algoritmo polinomio2(x, a, n) Algoritmo polinomio1(x, a, n) p an-1; p a0; para i = n 2 hasta 0 hacer potx 1; para i = 1 hasta n 1 hacer p ai + p * x; devolver p; potx x * potx; p p + ai * potx; devolver p;

Si la operacin bsica es el nmero de multiplicaciones, el algoritmo polinomio2 es ms eficiente que el algoritmo polinomio1 ya que realiza un menor nmero de multiplicaciones. polinomio1: T ( n ) = 2 = 21 = 2(n 1) = 2n 2
i =1 i =1 n 1 n 1

polinomio2: T ( n ) = 1 = 1 = n 1
i =0 i =1

n2

n 1

En el ejemplo anterior, el tamao de la entrada (n) es el nico factor que influye en el anlisis. Pero existe otro factor que puede influir en la complejidad de un algoritmo: la naturaleza de la entrada. Esto nos lleva al anlisis de complejidad en tres casos: el mejor caso, el peor caso y el caso promedio.

1.4 Anlisis de complejidad considerando la naturaleza de la entrada La complejidad del mejor caso, denotada B(n) por el trmino en ingls Best, es el mnimo nmero de operaciones bsicas que realiza un algoritmo para una entrada de tamao n. Sea Dn el dominio o conjunto de entradas de tamao n para el problema en consideracin, y sea I una

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

instancia o elemento de Dn. Sea T(I) el nmero de operaciones bsicas que el algoritmo ejecuta con la entrada I. Definimos la funcin B con la expresin 1.1.

B (n) = min {T ( I ) I Dn }

(1.1)

La complejidad de peor caso, denotada W(n) por el trmino en ingls Worst, es el mximo nmero de operaciones bsicas que realiza un algoritmo para una entrada de tamao n. Definimos la funcin W con la expresin 1.2.

W (n) = max {T ( I ) I Dn }

(1.2)

La complejidad del caso promedio, denotada A(n) por el trmino en ingls Average, es el nmero promedio de operaciones bsicas de un algoritmo para una entrada n. Sea Pr(I) la probabilidad de que se presente la entrada I, la cual se determina por la experiencia, o en base en informacin especial acerca de la aplicacin que se piensa dar al algoritmo. Entonces, el comportamiento promedio del algoritmo, sobre todas las posibles entradas de tamao n se define con la expresin 1.3.

A(n) =

I Dn

Pr( I )T ( I )

(1.3)

La complejidad del mejor caso y del peor caso, nos dan una cota inferior-ajustada y superiorajustada, respectivamente, del nmero de operaciones bsicas que realiza un algoritmo para cualquier entrada de tamao n. Cuando no se especifica a que tipo de caso corresponde la complejidad de un algoritmo, se asume que es la del peor caso. Si tomamos los algoritmos polinomio1 y polinomio2, descritos anteriormente, observaremos que no dependen de la naturaleza de la entrada. En estos algoritmos, el nmero de operaciones a realizar en el peor caso, en el caso promedio y en el mejo casos son equivalentes. Para ejemplificar los tres casos de anlisis de complejidad, tomaremos el algoritmo buscar el cual, dado un vector V de tamao n, retorna la posicin en donde se encuentra la clave k. En este anlisis, la operacin bsica es la comparacin de claves.

Algoritmo buscar(V, n, k) para i = 0 hasta n 1 hacer si Vi = k entonces devolver i; devolver -1;

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

El mejor caso sucede cuando la clave se encuentra en la primera posicin del vector V, ya que el algoritmo slo realiza una comparacin.

B (n) = 1
El peor caso sucede cuando la clave se encuentra en la ltima posicin o no se encuentra, ya que el algoritmo realiza n comparaciones.

W ( n ) = 1 = n
i =0

n 1

El anlisis del caso promedio requiere ms especificaciones. Primero tenemos dos posibilidades, que la clave a buscar se encuentre o no en el vector. Si no se encuentra, el algoritmo realiza n comparaciones.

AkV ( n ) = 1 = n
i =0

n 1

Si la clave se encuentra en el vector, existe n posibles ubicaciones. En general, para cualquier entrada I, si la clave se encuentre en la posicin m, el algoritmo realizar m + 1 comparaciones; donde m va de 0 hasta n 1. Estableciendo el supuesto que es igualmente probable que la clave est en cualquier posicin m, entonces Pr(I)=1/n. Multiplicar esta probabilidad por el tiempo de ejecucin de cada tipo de entrada I, equivale a promediar el nmero de comparaciones de la n posibilidades. As, la complejidad promedio, si el elemento se encuentra en el vector, es (n + 1)/2.

AkV ( n ) =

1 n 1 1 n 1 ( n + 1) n n + 1 ( m + 1) = m = = n m=0 n m =1 2 2 n

La complejidad del caso promedio se obtiene promediando la complejidad de que la clave k este o no este en el vector V. Nuevamente se establece el supuesto que ambas condiciones son igualmente probables. La expresin obtenida indica que el algoritmo realiza, en el caso promedio, (3n + 1)/4 comparaciones.

A( n) =

AkV + AkV 3n + 1 = 2 4

1.5 Complejidad de algoritmos no-recursivos y recursivos

Para los algoritmos no-recursivos, como los anteriores, el anlisis de complejidad se realiza por medio de sumatorias. En los algoritmos recursivos, para obtener su complejidad se aplican ecuaciones en diferencia, tambin conocidas como ecuaciones de recurrencia. Un ejemplo clsico de un algoritmo recursivo, es el que se utiliza para obtener el n-esmo nmero de Fibonacci.

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Algoritmo Fibonacci(n) si n < 1 entonces devolver 0; sino si n = 1 entonces devolver 1; sino devolver Fibonacci(n-1) + Fibonacci (n-2)

El algoritmo Fibonacci no depende de la naturaleza de la entrada, solo de n, por lo que el anlisis del peor caso, mejor caso y caso promedio son equivalentes. El nmero de comparaciones que realiza al algoritmo esta dado por la siguiente ecuacin en diferencia.

1 si n < 1 T (n) = 2 si n = 1 T ( n 1) + T ( n 2 ) + 2 si n > 1

La solucin de la ecuacin en diferencia nos indica que el nmero de comparaciones que realiza el algoritmo crece exponencialmente con n.

3 + 5 1 + 5 3 5 1 5 T ( n) = 2 + 2 2 2 2
El captulo 4 aborda en ms detalle los algoritmos recursivos y presenta mtodos para la solucin de funciones de recurrencia que cuantifican el desempeo de este tipo de algoritmos.

1.6 Ejercicios resueltos

1.6.1

Da una frmula para el nmero total de operaciones de asignacin de la variable x, efectuadas por el algoritmo en los casos que apliquen (peor, mejor y promedio) ALGORITMO ANLISIS

a)

x x + 1

T ( n) = 1

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

b)

for i = 1 to n do x x + 1

ALGORITMO

ANLISIS T ( n ) = 1 = n 1 + 1 T ( n) = n
i =1 n

COMPROBACIN CON DERIVE


#1: #2: T(n) (1, i, 1, n) T(n) n

c)

for i = 0 to n do x x + 1

ALGORITMO

ANLISIS T ( n ) = 1 = n 0 + 1 T ( n) = n +1 COMPROBACIN CON DERIVE


i =0 n

#1: #2:

T(n) (1, i, 0, n) T(n) n + 1

d)

ALGORITMO
for i = 1 to n do for j = 1 to n do for k = 1 to n do x x + 1

ANLISIS
n n n n n n n T ( n ) = 1 = n = n 1 i =1 j =1 k =1 i =1 j =1 i =1 j =1 n n = ( nn ) = n 2 1 = n 2 n i =1 i =1

T ( n ) = n3

COMPROBACIN CON DERIVE


#1: #2: T(n) (((1, k, 1, n), j, 1, n), i, 1, n) 3 T(n) n

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

e)

if n mod 2 == 0 then x x + 1 for i = 1 to n do x x + 1 else x x + 1

ALGORITMO

ANLISIS Caso Promedio Si n es divisible entre 2 (n mod 2 == 0)

Adiv ( n ) = 1 + 1 = 1 + n
i =1

Si n no es divisible entre 2 (n mod 2 0) Anodiv ( n ) = 1


A ( n ) = Pdiv Adiv ( n ) + Pnodiv Anodiv ( n ) = A(n) = 1+ n 2
1 2

(1 + n ) + 1 2 (1)

Peor Caso W ( n ) = Adiv ( n ) = 1 + n Mejor Caso B ( n ) = Anodiv ( n ) = 1 COMPROBACIN CON DERIVE


#1: #2: #3: #4: #5 #6: #7: W(n) 1 + (1, i, 1, n) W(n) n + 1 Anodiv(n) 1 A(n) 1/2Adiv(n) + 1/2Anodiv(n) n + 2 A(n) 2 Adiv(n) 1 + (1, i, 1, n) Adiv(n) n + 1

f)

for i = 1 to n do for j = 1 to I do x x + 1

ALGORITMO**

ANLISIS

T ( n ) = 1 = i
i =1 j =1 i =1

n ( n + 1) T ( n) = 2 COMPROBACIN CON DERIVE

#1: #2:

T(n)

((1, j, 1, i), i, 1, n) n(n + 1) T(n) 2

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

g)

ALGORITMO
x 2 while x n do x x + 2

EJEMPLIFICACIN
Par: n=10
Asignaciones = 6 Impar: n= 9 Asignaciones =5 (x = 2; 2 + 2; 4 + 2; 6 + 2; 8 + 2; 10 + 2) (x = 2; 2 + 2; 4 + 2; 6 + 2; 8 + 2)

n 10 Asignaciones = 1 + 1 + = 6 ; 2 2 9 1+ = 5 2 ANLISIS

T ( n) = 1+ 1
i =1

n 2

n T ( n) = 1+ 2 COMPROBACIN CON DERIVE


#1: #2: T(n) 1 + (1, i, 1, n/2) n T(n) FLOOR + 1 2

h)

for i = 1 to n do for j = 1 to I do x x + 1

ALGORITMO**

ANLISIS

T ( n ) = 1 = i
i =1 j =1 i =1

n ( n + 1) T ( n) = 2 COMPROBACIN CON DERIVE

#1: #2:

T(n)

((1, j, 1, i), i, 1, n) n(n + 1) T(n) 2

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

i)

ALGORITMO
x 1 while x < n do x 2 * x |

EJEMPLIFICACIN n=8 x = 1; 1 * 2; 2 * 2; 4 * 2 = 8 No. asignaciones = 4


n=15 x = 1; 1 * 2; 2* 2; 4 * 2; 8*2= 16 No. asignaciones =5 No. asignaciones = 1+ log 2 n 1+ log 2 (8) =4; 1+ log 2 (15) =5

ANLISIS
T ( n) = 1+
log 2 n

i =1

T ( n) = 1+ log 2 n

COMPROBACIN CON DERIVE


#1: #2: T(n) 1 + (1, i, 1, LOG(n, 2)) LN(n) T(n) FLOOR + 1 LN(2)

1.6.2

Calcula el tiempo que requieren los siguientes algoritmos en funcin de n. Exprese su respuesta en notacin O, de la forma ms sencilla posible. Considere slo las sumas sobre la variable s.
a) s 0; for i = 1 to n do for j = 1 to n2 do for k = 1 to n3 do s s + 1;

Solucin
s 0; for i = 1 to n for j = 1 to for k = 1 s s do...... ......................................n n2 do..........................................n2 to n3 do.......................................n3 + 1;.......................................n*n2*n3

La complejidad del algoritmo es: T ( n) = ( n n 2 n 3 ) = n 6

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: #2: T(n) (((1, k, 1, n^3), j, 1, n^2), i, 1, n) T(n) n 6

Por lo tanto, el tiempo del algoritmo es del orden (n 6 ) , es decir:


T ( n) = ( n 6 )
b) s 0; for i = 1 to n do for j = 1 to i do for k = j to n do s s + 1;

Solucin

La instruccin s s + 1 se ejecuta el siguiente nmero de veces:


= 1 = (n j + 1) = n j + 1
i =1 j =1 k = j n i =1 j =1 i =1 j =1 i =1 j =1 i =1 j =1 n i n n i n i n i n i

= ni
i =1 i =1

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

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

2n + 1 n 1 n 2 2n + 1 n(n + 1) 1 2n3 + 3n 2 + n ( i ) (i ) = 2 2 2 i =1 6 2 2 i =1 (2n + 1)(n(n + 1)) 2n3 + 3n 2 + n (2n + 1)(n 2 + n) 2n3 + 3n 2 + n = 4 12 4 12 3(2n3 + 2n 2 + n 2 + n) 2n3 3n 2 n 6n3 + 6n 2 + 3n 2 + 3n 2n3 3n 2 n = 12 12 4n 3 + 6n 2 + 2n n 3 n 2 n = + + 12 3 2 6

= = =

10

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

La instruccin s 0 se ejecuta una vez, por lo tanto:


T ( n) = 1 + n3 n 2 n + + 3 2 6

Al resolver la sumatoria se obtiene que el trmino dominante es cbico, por tanto: El algoritmo requiere un tiempo no mayor de ( n )
3

COMPROBACIN CON DERIVE


#1: #2: #3: T(n) T(n) (((1, k, j, n), j, 1, i), i, 1, n) n(n + 1)(2n + 1) T(n) 6 3 2 n n n + + 3 2 6

#4:

1.6.3

** Simplifique las siguientes sumatorias de manera que su lmite inferior inicie con el valor de 1.

a)

j = i +1

j = i +1

j = (i + 1) + (i + 2) + (i + 3) + ... + (n) = (i + 1) + (i + 2) + (i + 3) + ... + (i + n i )

j j j Identificacin de patrn: i + j b) No cambia: i c) Si cambia: j Inicio: j= 1 Fin: j= n-i

= (i + j ) = i + j
j =1 j =1 j =1

n i

n i

n i

11

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: #2: #3: (j, j, i + 1, n) = (i, j, 1, n - i) + (j, j, 1, n - i) 2 i + i - n(n + 1) (n - i)(i + n + 1) - = 2 2 true

d)
i+ j

(i + j k )
k= j

i+ j

(i + j k ) = (i + j ( j )) + (i + j ( j + 1)) + (i + j ( j + 2)) + ... + (i + j (i + j ))


k= j

= (i 0) + (i 1) + (i 2) + ... + (i i )
k k Identificacin de patrn: i - k a. No cambia: i b. Si cambia: k Inicio: k= 0 Fin: k= i
i+ j i

= (i + j k ) = (i k ) = i + (i k )
k= j k =0 k =1

= i + i k
k =1 k =1

COMPROBACIN CON DERIVE


#1: #2: #3: (i + j - k, k, j, i + j) = i + (i, k, 1, i) - (k, k, 1, i) i(i + 1) i(i + 1) = 2 2 true

e)

j = i +1

(n i j + 2)
12

n i

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS


n i

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

j = i +1

(n i j + 2) = (n i (i + 1) + 2) + (n i (i + 2) + 2) + ... + (n i (n i) + 2)
= (n 2i 1 + 2) + (n 2i 2 + 2) + ... + (n i n + i + 2) n-i -n+i+2- i+i n-2i-(n-2i)+2 -n+2i = -(n-2i)

= (n 2i 1 + 2) + (n 2i 2 + 2) + ... + (n 2i (n 2i ) + 2)
j Identificacin de patrn: n 2i j + 2 c. No cambia: n 2i +2 d. Si cambia: j Inicio: j= 1 Fin: j= n-2i j j

j = i +1

n i

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

n 2i

COMPROBACIN CON DERIVE


#1: (n - i - j + 2, j, i + 1, n - i) = (n - 2i - j + 2, j, 1, n - 2i) 2 2 2 2 4i - 2i(2n + 3) + n + 3n 4i - 2i(2n + 3) + n + 3n = 2 2 true

#2: #3:

f)
i+ j

k
k= j

i+ j

k = ( j ) + ( j + 1) + ( j + 2) + ... + (i + j )
k= j

= ( j + 0) + ( j + 1) + ( j + 2) + ... + ( j + i )
k k k Identificacin de patrn: j + k e. No cambia: j f. Si cambia: k Inicio: k= 0 Fin: k=i k

13

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos


i

= k = ( j + k ) = j + ( j + k )
k= j k =0 k =1

i+ j

= j + j + k
k =1 k =1

COMPROBACIN CON DERIVE


#1: (k, k, j, i + j) = j + (j, k, 1, i) + (k, k, 1, i) 2 2 i + i(2j + 1) + 2j i + i(2j + 1) + 2j = 2 2 true

#2: #3:

1.6.4

** Determine la complejidad de los casos peor y mejor. Exprese tambin los resultados en notacin asinttica.
if n > 100 for i = 0 to n for j = 0 to i for k = j to i x x + 1 else x x + 1

La complejidad del mejor caso se presenta cuando n es menor que 100, slo se hace una asignacin:

B (n) = 1 = O(1)
W (n) = 1 = (i j + 1)
i =0 j =0 k = j i =0 j =0 n i i i n i (i + 1) = i 1 j + 1 = i (i + 1) + i + 1 2 i =0 j =0 j =0 j =0 i =0 n i i n i

= i2 + i i
i =0

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

n n n n(n + 1)(2n + 1) 3n( n + 1) = 1 i 2 + 3 i + 21 = 1 + + 2(n + 1) 2 i =0 2 6 2 i =0 i =0 2 2 (n + 1)(2n + 9n + n + 12) (n + 1)(2n + 10n + n) = = 12 12 2 (n + 1)(n + 5n + 6) = 6 3 W ( n) = O ( n )

14

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: W(n) (((1, k, j, i), j, 0, i), i, 0, n) 2 (n + 1)(n + 5n + 6) W(n) 6

#2:

1.6.5

** Resuelva la siguiente sumatoria correspondiente a una funcin de complejidad algortmica.


log 4 n 1

T ( n) = n

i =0

3 log 4 n +3 4

Serie geomtrica
r k +1 1 i = ar a i =0 r 1 ( 3 )log 4 n 1+1 1 + 3log 4 n T ( n) = n 4 3 ( ) 1 4 ( 3 )log 4 n 1 + 3log 4 n T ( n) = n 4 1 4 T (n) = 4n(( 3 )log 4 n 1) + 3log 4 n 4 log 4 3/ 4 T (n) = 4n(n 1) + n log 4 3
k

T (n) = 4n(n 0.207518 1) + n 0.792481 T (n) = 4n 0.792481 + 4n + n 0.792481 T (n) = 3n 0.792481 + 4n T (n) 3n + 4n T ( n) = O ( n) *x logb y = y logb x **log c x = (log b x) /(log b c) **

15

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: #2: n Integer T(n) n((3/4)^, , 0, LOG(n, 4) - 1) + 3^LOG(n, 4) 2 LN(3/4)FLOOR(LN(n)/(2LN(2))) LN(3)/(2LN(2)) T(n) - 2 ne + n + 4n x Integer t(x) T(4^x) 2(x + 1) #6: #7: #8: #9: t(x) 2 T(n) t(LOG(n, 4)) T(n) 4n - 3n LN(3)/(2LN(2)) 0.7924812503 - 3 x + 1

#3: #4: #5:

T(n) 4n - 3n

1.6.6

D una frmula para el nmero total de operaciones efectuadas por el algoritmo Bsqueda Secuencial en el peor caso con un arreglo de n entradas. Cuente las comparaciones de k con elemento del arreglo, las comparaciones con la variable cuenta, las sumas y las asignaciones a ndice.
Algorithm busquedaSecuencial (E, n, k) 1 respuesta -1; 2 for indice = 0 to n 1 do if k == Eindice then 3 4 respuesta indice; break; 5 6 return respuesta;

Operaciones bsicas: a) Comparaciones de k con elementos del arreglo E


n 1

W ( n )k =

indice = 0

1 = n 1 0 +1 = n

b) Comparaciones con la variable ndice

W ( n )indice =

indice = 0

1 = n +1

16

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

c) Sumas

W ( n ) sumas =

indice = 0

n 1

1= n

d) Asignaciones a la variable ndice

W ( n )asignaciones =

indice = 0

1 = n +1

Total de operaciones de comparacin, sumas y asignacin sobre las variables k e ndice


W ( n ) = W ( n )k + W ( n )indices + W ( n ) sumas + W ( n ) asignaciones W ( n ) = n + ( n + 1) + n + ( n + 1) W ( n ) = 4n + 2

COMPROBACIN CON DERIVE


#1: #2: #3: #4: #5: #6: #7: #8: #9: #10: Windice(n) (1, i, 0, n) Windice(n) n + 1 Wsumas(n) (1, i, 0, n - 1) Wsumas(n) n Wasignaciones(n) (1, i, 0, n) Wasignaciones(n) n + 1 Wa(n) Wk(n) + Windice(n) + Wsumas(n) + Wasignaciones(n) Wa(n) 4n + 2 Wk(n) (1, i, 0, n - 1) Wk(n) n

1.6.7

** La mediana de un conjunto ordenado es un elemento tal que el nmero de elementos menores que la mediana difiere en cuando ms 1 del nmero de elementos que son mayores, suponiendo que no hay empates.

a) Escriba un algoritmo para hallar la mediana de tres enteros distintos a, b y c.

17

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Algorithm medianaEstrategia1 (a, b, c) 1 if a < b then if b < c then 2 3 mediana b; // a < b < c else 4 if a < c then 5 6 mediana c; // a < c < b else 7 8 mediana a; // c < a < b 9 else if b > c then 10 11 mediana b; // c < b < a else 12 if a > c then 13 14 mediana c; // b < c < a else 15 16 mediana a; // b < a < c 17 return mediana; Algorithm medianaEstrategia2 1 if a > b then if a < c 2 3 mediana a // else 4 if b < c then 5 6 mediana c // else 7 8 mediana b // 9 else if a > c then 10 11 mediana a // else then 12 if b > c then 13 14 mediana c // else 15 16 mediana b // 17 return mediana; (a, b, c)

b < a < c

b < c

<a

c < b < a

c < a < b

a < c < b a < b < c

b) Describa D, el conjunto de entradas del algoritmo, a la luz de la explicacin de la seccin 1.4.3 que sigue al ejemplo 1.9.
medianaEstrategia2

D = {ordenados} {desordenados}

Por ejemplo: D = {( 3,5,8 ) , ( 8,5,3)} {( 3,8,5 ) , ( 5,3,8 ) , ( 5,8,3) , ( 8,3,5 )}

18

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

D = {inicia _ mediana} {no _ inicia _ mediana}


Por ejemplo: D = {( 5,3,8 ) , ( 5,8,3)} {( 3,5,8 ) , ( 3,8,5 ) , ( 8,5,3) , ( 8,3,5 )} c) Cuantas comparaciones efecta su algoritmo en los casos mejor, peor y en promedio.
medianaEstrategia1

medianaEstrategia2

W ( n ) = A ( n )desordenados = 3 B ( n ) = A ( n )ordenados = 2 A( n) = 1
#1: #2: #3: #4:

A ( n ) = P ( ordenados ) A ( n )ordenados + P ( desordenados ) A ( n )desordenados 2( 2) + 1 2( 3) = 5 = 2 1 2 2 COMPROBACIN CON DERIVE

W (n) 3 B (n) 2 A (n) 1/2 W (n) + 1/2 B (n) 5 A (n) 2 medianaEstrategia2

W ( n ) = A ( n )no _ inicia _ mediana = 3 B ( n ) = A ( n )inicia _ mediana = 2

A ( n ) = P ( inicia _ mediana ) A ( n )inicia _ mediana + P ( no _ inicia _ mediana ) A ( n )no _ inicia _ mediana A( n) = 1


#1: #2: #3: #4:

2(

2) + 1

2(

W(n) 3 B(n) 2

3) = 5 = 2 1 2 2 COMPROBACIN CON DERIVE

A(n) 1/2 W(n) + 1/2 B(n) 5 A2(n) 2

d) Cuantas comparaciones son necesarias en el peor caso para hallar la mediana de tres nmeros. Justifique su respuesta.

19

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Los posibles algoritmos para calcular la mediana de tres nmeros, son diferentes en el orden de sus comparaciones. En cualquiera de ellos, el peor caso ocurre cuando se deben comparar todos los elementos entre s. Entonces

W ( n) = 3
1.6.8 Escriba un algoritmo para hallar el segundo elemento ms grande de un conjunto que contiene n elementos diferentes. Cuantas comparaciones de elementos efecta su algoritmo en el peor caso (Es posible hacer menos de 2n-3?; consideraremos otra vez este problema ms adelante).
Algorithm encuentraSegundo (A, n) 1 if A1 < A0 then 2 primero A1; 3 segundo A0; 4 else 5 primero A0; 6 segundo A1; 7 for i = 2 to n 1 do if Ai > segundo then 8 if Ai > primero then 9 10 segundo primero; 11 primero Ai; else 12 13 segundo Ai; 14 return segundo;

ESTRATEGIA GENERAL
Ai

ESTRATEGIA GENERAL
primero segundo Ai > segundo Ai < primero Ai

primero segundo

Ai > segundo Ai > primero

El nmero de operaciones bsicas es igual al nmero de comparaciones:

20

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

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

n 1

COMPROBACIN CON DERIVE


#1: #2: W(n) 1 + (2, i, 2, n - 1) W(n) 2n - 3

1.6.9

Escriba un algoritmo para hallar ambos elementos, el ms pequeo y el ms grande, de un conjunto de n elementos. Trate de encontrar un mtodo que efecte alrededor de 1.5n comparaciones de elementos en el peor caso.

Solucin 1 a) Algoritmo de Solucin


Algorithm maxmin1 (A, n) 1 min A0; 2 max A0; 3 for j =1 to n 1 do if Aj < min then 4 5 min Aj; else 6 if Aj < min then 7 8 max Aj; 9 return max, min;

b) Anlisis de Peor caso. En el peor caso, los elementos del arreglo se encuentran ordenados ascendentemente:
11 22 35 48 50 0 1 2 3 4 Ejecutando por pasos el algoritmo:
min= 11; max=11 i= 1 A1 < min i= 2 A2 < min i= 3 A3 < min i= 4 A4 < min i= 5 A5 < min i= 6 A6 < min i= 7 A7 < min A1 A2 A3 A4 A5 A6 A7 > > > > > > > max max max max max max max

64 5

69 6

81 7

max max max max max max max

= = = = = = =

22 35 48 50 64 69 81

21

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Nmero de comparaciones siguiendo el algoritmo: W ( 8 ) = 14 Nmero de comparaciones por frmula W ( n ) = 2 = ( n 1) 2 = 2n 2 W (8) = 2 ( 8 ) 2 = 14


i =1 n 1

COMPROBACIN CON DERIVE


#1: #2: W1(n) (2, i, 1, n - 1) W1(n) 2n - 2

Solucin 2 a) Algoritmo de Solucin.


Algorithm maxmin2 (A, n) 1 min A0; 2 max A0; 3 for i = 1 to n/2 do if Ai > An i then 4 if Ai] > max then 5 6 max Ai if Aj < min then 7 8 min An i else 3 if Ai < min then 4 5 min Ai if Aj > max then 6 7 max An I; 8 return max, min;

b) Anlisis de Peor caso.


W ( n) =
n / 2

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

W (8) = 3 8 / 2 = 12

COMPROBACIN CON DERIVE


#1: #2: W2(n) (1 + 2, i, 1, n/2) n W2(n) 3FLOOR 2

22

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

1.6.10 Calcular el nmero de operaciones de asignacin sobre la variable r en el peor caso y expresar este resultado en notacin . Indique tambin el valor regresado como una funcin de n. a) Function mystery.
Algorithm mystery (n) 1 r 0; 2 for i = 1 to n-1 do for j = i+1 to n do 3 for k = 1 to j do 4 5 r r + 1; 6 return r;

Sumatorias del ciclo:

1
i =1 j = i +1 k =1

n 1

j = i +1

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

j = i +1

( i + j )
i =1 j =1 n i n i i + j i =1 j =1 j =1 n 1 n i n i 1 i + j i =1 j =1 j =1 n 1

n 1 n i

23

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS


n 1 i =1

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

i (n i) +

2 n 1 n 2 2in + i 2 + n i 2 in i + 2 i =1 2 2 2 n 1 n 2in + i + n i 2in 2i + 2 2 i =1 2 2 2 n 1 i + n + n i 2 i =1 1 i 2 (


i =1 n 1 i =1 n 1 2

( n i )( n i + 1)

+ n2 + n i )
2

1 1

2 2

i2 + 1 i2 + n
i =1 n 1

n2 + 1
i =1

n 1

n 1
i =1

n 1

2 i =1
n 1

n 1

1 + n
i =1

n 1

1 1
i =1

n 1

2 i =1

2 ( n 1)3 + 3 ( n 1)2 + n 1 2 ( n 1) n 1 + n ( n 1) + n ( n 1) 1 2 2 2 2 6 2 1 2 ( n3 3n 2 + 3n 1) + 3 ( n 2 2n + 1) + n 1 + 1 ( n3 n 2 ) + 1 ( n 2 n ) 1 ( n 2 n ) 12 2 2 4 3 2 2 3 2 2 1 ( 2n 6 n + 6n 2 + 3n 6n + 3 + n 1) + 1 ( n n ) + 1 ( n n ) 1 ( n 2 n ) 12 2 2 4 3 2 3 2 2 2 1 ( 2n 3 n + n ) + 1 ( n n ) + 1 ( n n ) 1 ( n n ) 12 2 2 4 3 2 3 2 2 2 n n n n n n n n n + + + + 6 4 12 2 2 2 2 4 4

n 1

i =1 j = i +1 k =1

1 =

n3 n 3

Nmero de operaciones de asignacin sobre la variable r .


T ( n) = 1+ n3 - n 3

3 T ( n ) = ( n 3 ) , r = n n 3

24

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: r (((1, k, 1, j), j, i + 1, n), i, 1, n - 1) 2 n(n - 1) r 3 T(n) 1 + r 3 n - n + 3 T(n) 3

#2: #3:

#4:

b) Function pesky.
Algorithm pesky (n) 1 r 0; 2 for i = 1 to n do for j = 1 to i do 3 for k = j to i + 1 do 4 5 r r + 1; 6 return r;

Sumatorias del ciclo:


n i n i i n 2 1 ( i 1) i 1 = + = + = i + i i =1 j =1 k = j i =1 j =1 i =1 j =1 j =1 i =1 n i i+ j n n 2n3 + 3n 2 + n n(n + 1) = i2 + i = + 2 6 i =1 i =1 3 2 2n + 3n + n + 3n( n + 1) = 6 3 2 2n + 3n + n + 3n 2 + 3n n3 + 3n 2 + 2n = = 6 3

Nmero de operaciones de asignacin sobre la variable r.


n3 + 3n2 + 2n T ( n) = 1+ 3

T (n) = (n3 )

r=

n3 + 3n2 + 2n 3

25

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

COMPROBACIN CON DERIVE


#1: #2: #3: T(n) 1 + r 3 2 n + 3n + 2n + 3 T(n) 3 r (((1, k, j, i + j), j, 1, i), i, 1, n) n(n + 1)(n + 2) r 3

#4:

c) Funcin pestiferous.
Algorithm pestiferous (n) 1 r 0; 2 for i = 1 to n do for j = 1 to i do 3 for k = j to i + j do 4 for l = 1 to i + j k do 5 6 r r + 1; 7 return r;

Sumatorias del ciclo:

1 = (i + j k ) = i + j k
i =1 j =1 k = j l =1 i =1 j =1 k = j i =1 j =1

i+ j i+ j k

i+ j

i+ j

i+ j

i+ j

k= j

k= j

k= j

k = ( j ) + ( j + 1) + ( j + 2) + ... + (i + j ) = ( j ) + ( j + 1) + ( j + 2) + ... + ( j + i) =
k= j

i+ j

= ( j + k) = j + ( j + k)
k =0 k =1

i+ j i i i i+ j n i = i 1 + j 1 j + ( j + k ) = i (i + 1) + j (i + 1) j j 1 k = i =1 j =1 k = j k= j k =1 k =1 k =1 i =1 j =1 n i n i i (i + 1) n i 2 i2 i i i ij j j ij = i 2 + i + ij + j j ij = + + + = 2 2 2 i =1 j =1 i =1 j =1

26

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

n i i2 i n i i2 i i n i2 i i i n i3 i 2 = + = + = 1 + 1 = + = 2 i =1 j =1 2 j =1 2 i =1 2 j =1 2 j =1 i =1 2 2 i =1 j =1 2

= =

1 n 3 2 1 n 3 n 2 1 n4 n3 n2 2n3 + 3n2 + n i + i = 2 i + i = 2 4 + 2 + 4 + 2 i =1 6 i =1 i =1 3n4 + 6n3 + 3n2 + 4n3 + 6n2 + 2n 3n4 + 10n3 + 9n2 + 2n = 24 24

Nmero de operaciones de asignacin sobre la variable r.


T (n) = 1+ 3n 4 + 10n3 + 9n 2 + 2n 3n 4 + 10n3 + 9n 2 + 2n + 24 = 24 24

T ( n) = n 4
3n 4 + 10n3 + 9n 2 + 2n r= 24

COMPROBACIN CON DERIVE


#1: r ((((1, l, 1, i + j - k), k, j, i + j), j, 1, i), i, 1, n) 2 n(n + 1)(3n + 7n + 2) r 24 T(n) 1 + r 4 3 2 3n + 10n + 9n + 2n + 24 T(n) 24

#2: #3:

#4:

d) Funcin conundruin
Algorithm conundruin (n) 1 r 0; 2 for i = 1 to n do for j = i + 1 to n do 3 for k = i + j 1 to n do 4 6 r r + 1; 7 return r;

Sumatorias del ciclo:

27

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS


n n n n n

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos


j = i +1

i =1 j =i +1 k =i + j 1

1 =
i =1

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

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


j =1

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

j =

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

n n 2 in + n in + i 2 i = n 2 2in + i 2 + 2n 2i in + i 2 = 2 i =1 n n 2 in n in i 2 i = n 2 2in + i 2 + 2n 2i in + i 2 + + = 2 2 2 2 2 2 i =1 n n n2 3i 2 3n 3i n n 2 n 3i 2 n 3n n 3i = 2in + + = 2in + + = 2 2 2 i =1 2 i =1 i =1 2 i =1 2 i =1 2 i =1 2

= = =

n 3 n 3n 3 n n2 n 2n i + i 2 + n i = 2 i =1 2 2 i =1 2 i =1 3 2 2 n3 n(n + 1) 3 2n + 3n + n 3n 3 n(n + 1) 2n + + 2 2 2 = 2 6 2 2

n3 n3 3n 2 n 3n 2 3n 2 3n n 2 n n3 n 2 + + + + = = 2 2 4 4 2 4 4 2 2 2 n n = 2

Nmero de operaciones de asignacin sobre la variable r.


2 T( n ) = 1 + n n 2

28

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

T ( n) = ( n 2 )

r=

n2 n 2
COMPROBACIN CON DERIVE

#1: #2: #3:

r (((1, k, i + j - 1, n), j, i + 1, n), i, 1, n) n(n - 1) r 2 T(n) 1 + r 2 n - n + 2 T(n) 2

#4:

1.6.11 Analice el algoritmo de suma Cuntas sumas realiza (cuantas veces se ejecuta la lnea 3) en el peor caso?
Algorithm suma (A, n) 1 s 0; 2 for i = 0 to n 1 do 3 s s + Ai ; 4 return s;

Numero de sumas en cada iteracin del ciclo: 1 Por lo tanto el nmero de sumas que realiza en el peor caso es:

W (n) = 1 = n 1 0 + 1 = n sumas
i =0

n 1

COMPROBACIN CON DERIVE


#1: #2: W(n) (1, i, 0, n -1 ) W(n) n

1.6.12 Analice el algoritmo para encontrar el mximo valor de un arreglo. Cuntas comparaciones realiza (es decir cuantas veces es ejecutada la lnea 4) en el peor caso?
Algorithm max (A, n) 1 m A0 ; 2 for i = 1 to n 1 do if Ai > m then 3 4 m Ai ; 5 return m;

29

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Solucin, para encontrar el valor mximo se necesita evaluar todos los elementos del arreglo, es decir:
W ( n ) = 1 = (n 1 1 + 1) = n 1 W (n) = (n)
i =1 n 1

COMPROBACIN CON DERIVE


#1: #2: W(n) (1, i, 2, n) W(n) n - 1

1.6.13 Analice el algoritmo de multiplicacin de matrices Cuntas multiplicaciones realiza (esto es, cuantas veces se ejecuta la lnea 5) en el peor caso?
Algorithm max (mat1, mat2) 1 for i = 0 to n 1 do for j = 0 to n 1 do 2 3 matrizi,j 0 for k = 0 to n 1 do 4 5 matrizi,j mat1i,j * mat2j,k + matrizi,j; 6 return matriz;
n 1 n 1 n 1 n 1 n 1 n 1 n 1 n 1 n 1 n 1 n 1 W ( n ) = 1 = ( n 1 0 + 1) = n = n 1 = n n = n 2 1 = n 2 n i =0 j =0 k =0 i =0 j =0 i =0 j =0 i=0 j =0 i=0 i=0 3 W ( n ) = n multiplicaciones

COMPROBACIN CON DERIVE


#1: #2: W(n) (((1, k, 0, n - 1), j, 0, n - 1), i, 0, n - 1) W(n) n 3

1.7 Ejercicios propuestos

1.7.1

Analizar el algoritmo de burbuja. Cuntas comparaciones se hacen en el peor de los casos?

30

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

Algorithm bubbleSort (A, n) 1 for i = n - 2 to 0 do for j = 0 to i do 2 if Aj > Aj + 1 do 3 4 swap(A, j, j+1)

1.7.2

Analice el algoritmo multisuma. Cuntas veces se ejecuta la lnea 3?


Algorithm multisuma(A, n, x) 1 v 0; 2 for i = n - 1 to 0 do 3 v Ai + v * x; 4 return v;

1.7.3

n n 1 **Dado el polinomio p ( x) = an x + an 1 x + ... + a1 x + a0 , suponga que se usa el algoritmo siguiente para evaluarlo.

Algorithm polinomio (a, n, x) 1 p a0 ; 2 potenciax = 1; 3 for i = 1 to n 1 do 4 potenciax = x * potenciax; 5 p p + ai * potenciax; 6 return p;

a) Cuntas multiplicaciones se efectan en el peor caso? Cuntas sumas? b) Cuntas multiplicaciones se efectan en promedio? c) Puede mejorar este algoritmo? Ayuda: cuando n = 4 el polinomio se puede expresar p ( x) = a0 + x(a1 + x(a2 + x(a3 + x(a4 )))) , requiriendo un total de 4 multiplicaciones que es la mitad de las obtenidas por el algoritmo anterior. 1.7.4 Sea S un conjunto de m enteros. Sea E un arreglo de n enteros distintos (n m). Sea K un elemento al azar de S. En promedio, cuntas comparaciones efectuar Bsqueda Binaria con E, n 1 y K como entradas? Expresa su respuesta en funcin de n y m. ** Usted tiene 70 monedas que supuestamente son de oro y tiene el mismo peso, pero sabe que una de ellas es falsa y pesa menos que las otras. Usted tiene una balanza, y puede colocar cualquier cantidad de monedas en cada plato de la balanza en cada ocasin para saber si los dos lados pesan lo mismo o una pesa menos que el otro. Bosqueja un algoritmo para encontrar la moneda falsa. Cuntas pesadas efectuar?

1.7.5

31

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

1.7.6

** Cmo podra modificar el algoritmo de Bsqueda Binaria para eliminar trabajo innecesario si se tiene certeza de que K est en arreglo? Dibuje un rbol de decisin para el algoritmo modificado con n = 7. Efecte anlisis de comportamiento promedio y peor caso. (Para el promedio, puede suponerse que n = 2k 1 para alguna K).
Algorithm busquedaBinaria (E, primero, ultimo, K) 1 if ultimo < primero then 2 indice -1; 3 else 4 medio floor((primero + ultimo)/2); if K == Emedio then 5 6 indice medio; else 7 if K < Emedio then 8 9 indice busquedaBinaria (E, primero, medio 1, K); else 10 11 indice busquedaBinaria (E, medio + 1, ultimo, K); 12 return indice;

1.7.7

** Sea S un conjunto de m enteros. Sea E un arreglo de n enteros distintos (n m). Sea K un elemento al azar de S. En promedio, cuntas comparaciones efectuar Bsqueda Binaria con E, n 1 y K como entradas? Expresa su respuesta en funcin de n y m. ** Usted tiene 70 monedas que supuestamente son de oro y tiene el mismo peso, pero sabe que una de ellas es falsa y pesa menos que las otras. Usted tiene una balanza, y puede colocar cualquier cantidad de monedas en cada plato de la balanza en cada ocasin para saber si los dos lados pesan lo mismo o una pesa menos que el otro. Bosqueja un algoritmo para encontrar la moneda falsa. Cuntas pesadas efectuar? Calcule la complejidad del peor caso de los siguientes algoritmos. Tambin exprese su respuesta utilizando la notacin a) Calcular iterativamente el n-esimo nmero de Fibonacci.:
Algorithm fibonacci (n) 1 if n 1 then 2 fib 1; 3 else 4 fibMayor 1; 5 fibMenor 1; for i = 2 to n do 6 7 aux fibMenor; 8 fibMenor fibMayor; 9 fibMayor aux + fibMayor; 10 fib fibMayor; 11 return fib;

1.7.8

1.7.9

32

Instituto Tecnolgico de Ciudad Madero Unidad I COMPLEJIDAD DE ALGORITMOS

Dra. Laura Cruz Reyes Captulo 1 Introduccin al anlisis de algoritmos

b) Calcular iterativamente el factorial de un nmero:


Algorithm factorial (n) 1 fact 1; 2 if n > 0 then for i = 1 to n do 3 4 fact fact * i 5 return fact;

c) Calcular el nmero combinatorio:


n n! = m m !(n m)!

Bibliografa

1. CormenT.H., LeisersonC.E., RivestR.L: Introduction to Algorithms, MIT Press 1990. 2. Sara Basse, Allen Van Gelder. Algoritmos Computacionales: Introduccin al anlisis y
diseo. Tercera Edicin. AddisonWesley. 2002.

3. Ian Parberry, William Gasarch. Problems on Algorithms. Prentice Hall, 1994. (Libro electrnico en: www.eng.unt.edu/ian/books/free/poa.pdf)

33

Vous aimerez peut-être aussi