You are on page 1of 9

Julio A.

Fuentealba Vivallo
___________________________________________________________________
Guía de ecuaciones de recurrencia
___________________________________________________________________
1.- El siguiente algoritmo ordena un conjunto de elementos. Calcule su eficiencia en
función de sus comparaciones
void CH(arreglo a, int izq, int der )
{
int i,j,v ;
if (der > izq )
{ v = a[der] ; i = izq-1 ; j = der ;
for (;;)
{
while (a[i] != v ) ;
while (a[--j] > v ) ;
if ( i >= j ) "rea# ;
inter$a%"ia(a,i,j);
&
inter$a%"ia(a,i,der);
CH(a,izq,i-1);
CH(a,i1,der);
&
&
solucion
este algoritmo es QuickSort
2.- El ordenamiento de selección cuadrática di!ide los n elementos de un conjunto S en
k grupos donde
k " raí#$n% encuentra el elemento m&s grande de cada grupo ' lo lle!a a un arreglo A
encuentre al ma'or elemento del arreglo au(iliar ' ll)!elo a la ultima casilla disponi*le de
un arreglo O, luego reemplace en A el elemento e(traído por el ma'or del grupo del cual
pro!iene repita el proceso +asta ,ue O contenga a S ordenado.
γ - cual es la eficiencia de este algoritmo .
γ - ,ue pasa con los datos repetidos .
solucion
se contaran comparaciones entre elementos del conjunto
a- su*di!idir en rai#$n% elementos ------------------ costo /
*- sacar el ma'or de un grupo ------------------- rai#$n% 0 1
c- sacar el ma'or de todos los grupos ------------- rai#$n% 1$ rai#$n% 0 1%
d- sacar el ma'or de 2 ' lle!arlo a 3 ------------------- rai#$n% 0 1
e- reempla#ar el elemento e(traido de 2------------------- rai#$n% 0 1
f- repetir los pasos cd ' e n !eces------------------- n 1 $21$ rai#$n% 0 1%%
g- costo total se o*tiene de sumar 4 ' 5 ---- rai#$n% 1$ rai#$n% 0 1% 6 n 1 $21$ rai#$n% 0 1%%
4.- Considere el algoritmo siguiente
 dado el Conjunto S todos sus elementos son insertados en un 277
 el 277 es recorrido en inorden guardando la secuencia o*tenida
 se retorna el conjunto ordenado.
solucion
insertar 1 dato en un 277  de orden$log$n%%
insertar n elementos en un 277  de orden$n1log$n%%
recorrer en inorden  de orden$n%
orden del algoritmo  de orden$n 1log$n%%
8.- 9ara el siguiente programa calcule el costo ' el orden de la función :costo; .
#include <stdio.h>
int contador ;
int costo (int i )
{
int k, respuesta ! ; print" ( # $ %d #,contador && );
i" ( i < ' )
return ( ;
else
"or ( k ( ; k < i ; k&& )
respuesta respuesta & costo ( i ) k );
return respuesta ;
*
+ain ()
{ int , ;
"or ( , ! ; , < (- ; ,&& )
{ contador ! ;
costo (,);
.etch(); print"(#/n)))))))))))))))))))))))))))))))/n0);
*
*
solucion
se contaran sumas de la e(presión respuesta respuesta & costo ( i ) k );
como es un alg recursi!o se usara una ecuación de recurrencia

/ si n < 1
=$n% "
1 6=$1% 6 =$2% 6 =$4% 6 > 6 =$n-k%
t$n% " 1 6 sumatoria$t$i%% para i desde 1 +asta n-k $1%
+acemos la e(presión para n-1
t$n-1% " 1 6 sumatoria$t$i%% para i desde 1 +asta n-1-k $2%
restamos $1% menos $2% ' nos da
t$n% 0 t$n-1% " / 6 t$n-1%
lo ,ue da
t$n% 0 21t$n-1% " /
como esta es una ecuación +omog)nea lineal ' de coeficientes constantes
se usara el m)todo de la ecuación característica.
(
n
0 2(
n-1
" /
ecuación característica es ( 0 2" / lo ,ue resulta en ( " 2
luego t$n% " cte 1 2
n

?.- Se desean colocar @ reinas en un ta*lero de ajedre# de manera ,ue ninguna en una sola
mo!ida pueda comerse a otra. Aa estrategia m&s comBn es ,ue usted ponga una reina en
un casillero $una reina en cada fila ' en cada columna% !erifi,ue ,ue no pro!oca conflicto
e intente la siguiente si pro!oca conflicto entonces cam*ia la posición actual si luego de
intentar las @ posi*ilidades no encuentra solución supone ,ue la reina anterior esta mal
puesta ' retrocede para reu*icar en una nue!a posición la reina anterior. Con esta lógica
de*iera encontrar todas las soluciones.
-Cual es el orden de esta solución al pro*lema.
El orden es n
n
pues n filas implican n reinas cada fila tiene n posi*ilidades de poner a su
reina al de!ol!erse recursi!amente ' reintentarlo se parte de nue!o desde la primera
casilla.
5.- calcule el costo ' el orden del siguiente algoritmo.
Cecorre277Dnorden$ ar*ol t%
E
if $ t <F GHAA %
E
Cecorre277Dnorden$ t-Fi#,%I
9rintf$:Jd;t-Fdato%I
Cecorre277Dnorden$ t-Fder%I
K
K
solucion
se contaran llamadas recursi!as
/ si n " /

=$n% "
2 1 =$nL2 % si suponemos ,ue para cada lado tenemos la mitad de los datos
=$n% 0 21=$nL2% " /
+acemos un cam*io de !aria*le n " 2
i
=$n% -21=$nL2% " t$2
i
% 0 2 1 t$2
i-1
% " f$i% 0 21f$i-1%"/
luego resol!emos f$i% 0 21f$i-1%"/
(
i
0 2(
i-1
" / da como resultado f$i% " cte 1 2
i
como f$i% " t$ 2
i
% " =$n% " cte 1 n
M.- Nado un arreglo 2 con nBmeros creamos 7 inicialmente lleno con ceros luego por
cada casilla i de 7 contamos el nBmero de casillas de 2 menores a la casilla 2$i%. 2l
terminar en 7 se tiene el orden ,ue de*iera tener 2.
2
M4 24 84 ?1 1? 15 4/ 2O 85

7
@ 2 ? M / 1 8 4 5
Auego podemos !er ,ue el 1? es el menor pues en su correspondiente casilla de 7 se tiene
un / le sigue el 15 pues le corresponde un 1 >.
-Cu&l es el costo de este ordenador. $ con toda precisión%
solucion
se contaran comparaciones entre elementos del conjunto
casa casilla re,uiere n-1 comparaciones pues se tienen n datos ' no se compara consigo
misma.
Esto se +ace para las n casillas de 2 lo ,ue da n 1 $n-1% comparaciones.
@.- Cual es el costo ' el orden del siguiente algoritmo elimina277
277 1PijoQa'or$277 1t%
E
R+ile $ t-Fder S" GHAA % t " t-FderI
return tI
K
277 1elimina277$ 277 1p int i%
E
277 1,I
if $ S!acia$p%%
if $ p-Fdato "" i% LL el dato a eliminar esta en la rai#.
if $$p-Fi#, "" GHAA % TT $ p-Fder "" GHAA%%
E
delete pI
return GHAAI
K
else
E
, " GHAA I
if $p-Fi#, S" GHAA %
, " PijoQa'or$p-Fi#,%I
if $ , "" GHAA % LL no e(iste rama i#,uierda
E
, " p I
p " p-FderI
delete ,I
return pI
K
else
E
p-Fdato " ,-FdatoI
i " ,-FdatoI
p-Fi#, " elimina277$p-Fi#, i%I
K
K
else LL no esta en la rai# de*o *uscarlo
if $ i < p-Fdato % p-Fi#, " elimina277$p-Fi#,i%I
else p-Fder " elimina277$p-Fderi%I
return pI
K
9.- Calcule el costo y el orden para la siguiente función
int daven'ort(int a)
{
int (=);
if ( a ! *) ret+rn ,;
el(e
for ( int i = ) ; i ! a ; i )
( = daven'ort(a-*);
ret+rn ( ;
&
solucion
1/.- 2 !eces se afirma ,ue en la actualidad el PardRare es tan *arato ' la mano de o*ra es
tan cara ,ue nunca merece la pena desperdiciar el tiempo de un programador para ,uitarle
unos pocos segundos a la ejecución de un programa. -Significa esto ,ue el estudio de la
complejidad de un algoritmo est& destinado a ser un estudio teórico de inter)s solamente
formal sin aplicaciones pr&cticas. Uustifi,ue su respuesta.
solucion
no falta el +ue!on ,ue cree ,ue en esta asignatura solo esta perdiendo el tiempo.
Qas seriamente >
Aas mejorías o*tenidas por un algoritmo mas eficiente pueden ser enormes ' pueden llegar
a cam*iar de orden las mejorías o*tenidas por un +ardRare nue!o nunca cam*ian al
pro*lema de orden pueden ser el do*le mas r&pido el triple
9or ejemplo un algoritmo de orden$n% con un +ardRare mas r&pido puede demorar nL2 > o
nL4 pero si un algoritmo mejor de orden log$n% superara ampliamente al +ardRare.
11.- Hn algoritmo de ordenación de orden nlog$n% re,uiere de 1/ segundos para ordenar
1./// registros en su computadora -cuantos segundos demorara en ordenar 22.///
registros.
solucion
9ara 1/// datos +ace OO55 comparaciones ' demora 1/ segundos
9ara 22/// datos +ace 41M4?? comparaciones ' demora 41@ segundos
12.- Se ,uiere calcular el producto de dos nBmeros usando el algoritmo :a la russa;
ejemploV 8/ 1 @/ " 42//
a la russa se calcula usando la ta*la siguiente
8/ @/
2/ 15/
1/ 42/
? 58/
2 12@/
1 2?5/
Aa columna enca*e#ada por 8/ se di!ide por 2 +asta llegar a uno la columna del @/ se
duplica luego sumamos los nBmeros de la columna del @/ en donde la columna del 8/
tiene un impar es decir 58/ 6 2?5/ " 42//
Calcule el orden de multiplicar :a la russa; para dos nBmeros grandes.
solucion
( ) ( )
( )
( ) ( )
14.- Nada la siguiente definición
m m
/ " 1 I m " 1 I
m m-1 m-1
n " n 6 n-1
Confeccione una función recursi!a ,ue calcule : m so*re n; usando esta definición '
e!alBe su costo
18.- Se necesita calcular la profundidad de un &r*ol *inario considerando ,ue un &r*ol
!acío tiene profundidad cero ' ,ue un &r*ol cual,uiera tiene 1 6 la profundidad del +ijo
m&s profundo $ el camino m&s largo desde la raí# +asta una +oja% usando esta forma de
contar -cual es el costo del algoritmo.
solucion
esto es e,ui!alente a recorrer el &r*ol en inorden. 9ues no se cual es la rama mas
profunda por lo ,ue de*o recorrer todo el ar*ol.
1?.-Calcule el costo ' el orden del siguiente algoritmo ,ue cuenta el nBmero de nodos
presentes en un &r*ol de *Bs,ueda *inaria.
1nt cuenta2odos3e4nA55( arbol t)
{
i" ( t 2466 )
return ! ;
else
( & cuenta2odos3e4nA55(t)>i78) & cuenta2odos3e4nA55(t)>der);
*
solucion
esto es e,ui!alente a recorrer el &r*ol en inorden.
15.- Cual es el orden del ordenador siguiente
ordena(s)
{
+ientras (9 no este ordenado)
interca+bia aleatoria+ente dos casillas de 9
*
para el intercam*io de elementos de S considere ,ue nunca se pasa dos !eces por el
mismo estado de S.
solucion
para sa*er si S esta o no ordenado se +acen n-1 comparaciones el intercam*io aleatorio me
da nS com*inaciones en el peor caso luego el orden es $n-1% 1 nS
1M.- Sea S un conjunto de datos parcialmente ordenado en grupos $!er ejemplo%
confeccione un algoritmo eficiente ,ue ordene dic+o conjunto. $apro!ec+ando el orden
parcial%
ordenar
S " E 1214181?151M@4@8@?@M24282?252M2@2O4/M@8?K
Calcule el orden de su algoritmo ' e(pli,ue su resultado.
solucion
ordenar un arreglo es de orden n1log$n% aca *asta con tomar a un representante de cada
grupo $ por ejemplo el primero% con m grupos ' ordenarlos luego el orden es m1log$m%
1@.- calcule el =$n% siguiente
1 si n < 1
=$n% "
41n 6 = $ n L2 6 4 %

1O.- Calcule el =$n% .
=$n% " $1L2%n 6 8 = $ $nL2% 6 4 %.
2/.- calcule el =$n% siguiente
1 si n < 1
=$n% "
4 6 = $ n L2 % 6 =$nL 4 %
21.- Calcule el T(n) siguiente
T(n) = 1 si n<2 y T(n) = n*lg(n) + 5 T(n/2)
22.- calcule el =$n% siguiente
1 si n < 1
=$n% "
? 6 = $ n L2 % 6 =$nL 4 % 6 =$nL5%
24.- para las siguientes ecuaciones determine el costo ' el orden. $de*e suponer un *orde
adecuado%
=$n% " n
4
6 8=$nL2%
=$n% " n 6 =$OnL1/%
=$n% " n
2
6 4=$nL8%
=$n% " 21n 6 =$nL1/%
=$n% " n
4L2
6 8=$nL2%
=$n% " ?1=$nL2%
=$n% " n
1L2
6 8=$nL2%
=$n% " 2 6 =$nL4 6 ?%
=$n% " n 6 n
4
6 4=$nL2 6 11%
28.- usando el m)todo del &r*ol resuel!a

=$n% " n 6 =$nL4% 6 =$nL8%
2?.- usando recurrencias +omog)neas resuel!a
/ si n " 1
5 si n " 2
=$n% "
= $ n - 1 % 6 12=$n-2 %
1 si n " 1
? si n " 2
=$n% "
1/= $ n - 2 % - M=$n-1 %
n si n < 4
=$n% "
= $ n - 1 % - 2=$n-2 % 0 8=$n-4%
n si n < 4
=$n% "
8@=$n-4% - = $ n - 1 % - 8=$n-2 %