Académique Documents
Professionnel Documents
Culture Documents
Captulo 1
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.
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
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.
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
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.
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.
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.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
b)
for i = 1 to n do x x + 1
ALGORITMO
ANLISIS T ( n ) = 1 = n 1 + 1 T ( n) = n
i =1 n
c)
for i = 0 to n do x x + 1
ALGORITMO
#1: #2:
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
e)
ALGORITMO
Adiv ( n ) = 1 + 1 = 1 + n
i =1
(1 + n ) + 1 2 (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
#1: #2:
T(n)
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
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
#1: #2:
T(n)
i)
ALGORITMO
x 1 while x < n do x 2 * x |
ANLISIS
T ( n) = 1+
log 2 n
i =1
T ( n) = 1+ log 2 n
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
Solucin
= ni
i =1 i =1
n i (i + 1) n i (i + 1) + i = ni +i 2 2 i =1 i =1
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
Al resolver la sumatoria se obtiene que el trmino dominante es cbico, por tanto: El algoritmo requiere un tiempo no mayor de ( n )
3
#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
= (i + j ) = i + j
j =1 j =1 j =1
n i
n i
n i
11
d)
i+ j
(i + j k )
k= j
i+ 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
e)
j = i +1
(n i j + 2)
12
n i
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
#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
= k = ( j + k ) = j + ( j + k )
k= j k =0 k =1
i+ j
= j + j + k
k =1 k =1
#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
14
#2:
1.6.5
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
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;
W ( n )k =
indice = 0
1 = n 1 0 +1 = n
W ( n )indice =
indice = 0
1 = n +1
16
c) Sumas
W ( n ) sumas =
indice = 0
n 1
1= n
W ( n )asignaciones =
indice = 0
1 = n +1
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.
17
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
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}
18
medianaEstrategia2
W ( n ) = A ( n )desordenados = 3 B ( n ) = A ( n )ordenados = 2 A( n) = 1
#1: #2: #3: #4:
2(
2) + 1
2(
W(n) 3 B(n) 2
d) Cuantas comparaciones son necesarias en el peor caso para hallar la mediana de tres nmeros. Justifique su respuesta.
19
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
20
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
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.
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
= = = = = = =
22 35 48 50 64 69 81
21
n / 2 (1 + 2 ) = 3
i =1
W (8) = 3 8 / 2 = 12
22
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;
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
i (n i) +
( 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
3 T ( n ) = ( n 3 ) , r = n n 3
24
#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;
T (n) = (n3 )
r=
n3 + 3n2 + 2n 3
25
#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;
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
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
T ( n) = n 4
3n 4 + 10n3 + 9n 2 + 2n r= 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;
27
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 =
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 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
28
T ( n) = ( n 2 )
r=
n2 n 2
COMPROBACIN CON DERIVE
#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
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
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
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
1.7.1
30
1.7.2
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.
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
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
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