Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Wuolah Free Tema 2 Ejercicios de Clase Resueltos
Wuolah Free Tema 2 Ejercicios de Clase Resueltos
ainoapal
io 1
método recurrsivo que perrmita compaarar dos arrays genéricos y analiza su coste:
atic <T> bo
oolean comp
parar(T a[ ], T b[]) { … }
CIÓN:
atic <T> bo
oolean comp
parar(T a[ ], T b[]) {
ength != b.
.length) re
eturn falsee;
comparar(a,
, b, 0);
coste:
ancias signifficativas:
Mejor caso: el primer ele emento de a es distinto del primer elemento de b
Peor caso: loos arrays a y b son igualees (tienen loss mismos ele
ementos en eel mismo ord
den)
nes de recurrencia:
rarM(N) = k1
rarP(N = 0) = k2
rarP(N > 0) = TcompararP(N‐1) + k3
sintótico:
rar(N) (1
1)
rar(N) O(N
N) , apliicando el Teoorema 1 con
n a=c=1
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejerciciio 2
Dado el siguiente métod
do:
// v orden
nado ascend
dentemente sin eleme ntos repet
tidos, x < y
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
public sta an buscaPar
atic boolea r(Integer[ ] v, Integ
ger x, Inte
eger y, intt izq, int der) {
if (izq >= der) re
eturn false
e;
ad = (izq + der) / 2;
int mita ;
int comp
p = v[mitad
d].compareT
To(x);
if (comp
p == 0) ret
turn v[mita
ad+1].compaareTo(y) ==
= 0;
if (comp
p < 0) retu
urn buscaPa
ar(v, x, y , mitad+1, der);
return b
buscaPar(v,
, x, y, izq
q, mitad);
}
SOLUCCIÓN:
b) Complejid
dad temporaal:
Caso
o peor: x no se encuentra
a en el vectoor
TbuscarParP(N≤1) = k2
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Estructuras de Datos y Algor...
Banco de apuntes de la
Ejerciciio 3
Diseña un m
método recurrsivo genérico que determ
mine si un arrray dado es capicúa:
atic <T> bo
public sta oolean esCa
apicua(T[] v) { … }
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Indica qué tiipo de métod
do recursivo es y analiza su coste.
SOLUCCIÓN:
atic <T> bo
public sta oolean esCa
apicua(T[] v) {
return e
esCapicua(v
v, 0, v.len
ngth – 1);
}
nes de recurrencia:
Ecuacion
TesCapiccuaM(N) = k1
TesCapiccuaP(N ≤ 1) = k2
TesCapiccuaP(N > 1) = TesCapicua
aP(N‐2) + k3
Coste assintótico:
TesCapiccua (N) ((1)
TesCapiccua (N) O(N) , apliicando el Teoorema 1 con
n a=1 y c=2
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver de fiesta no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 4
Diseña una ffunción recursiva que de
evuelva el mááximo de un array genérico y analiza su coste.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SOLUCCIÓN:
tatic <T ex
private st parable<T> > T maximo
xtends Comp o(T v[], in
nt inicio) {
if (inic
cio == v.le
ength) retu
urn null;
else {
T max = maximo(v
v, inicio + 1);
if (ma
ax == null || v[inici
io].compareeTo(max) > 0)
max
x = v[inici
io];
n max;
return
}
}
Ecuacion
nes de recurrencia:
Tmaximo(N = 0) = k1
Tmaximo(N > 0) = Tm
maximo(N‐1)) + k2
Coste assintótico:
Tmaximo (N) (N) , apliicando el Teoorema 1 con
n a=1 y c=2
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 5
Dado un array v de componentes Integer, ordennado de form ma creciente y sin elemenntos repetidos, se quieree
determinar si existe alguna compon nente de v qque represen
nte el mismoo valor que eel de su possición en v (yy
obtener dich
ha posición). En el caso de
d que no haaya ninguna, se devolverá
á ‐1.
SOLUCCIÓN:
atic int ig
public sta gualAPos(In
nteger v[] ) {
return i
igualAPos(v
v, 0, v.len
ngth – 1);
}
Instanciaas significativvas:
o Mejor caso: v[(ini+fin)/2] = (ini+fin)/22
o Peor caso: ningún
n ento de v tie ne el mismo valor que la posición quue ocupa
eleme
TigualAPosP(N<1) = k2
TigualAPosP(N1) = TiguaalAPosP(N / 2) + k3
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejerciciio 6
Analiza el co
oste de los siguientes mé
étodos:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
int sum
ma = 0;
if ( in
ni == fin ) suma = v[ini];
if ( in
ni < fin ) {
a = v[ini] + v[fin];
suma
suma
a += sumar1
1(v, ini+1,
, fin‐1);
}
return suma;
}
SOLUCCIÓN:
No h
hay instanciaas significativvas pues hayy que recorre
er todo el vecctor en cualqquier caso
Ecuaaciones de reecurrencia:
Tsumar1(x 1)) = k
Tsumar1(x > 1)) = 1* Tsumar1(x
( – 2) + k
No h
hay instanciaas significativvas pues hayy que recorre
er todo el vecctor en cualqquier caso
Ecuaaciones de reecurrencia:
Tsumar2(x 1)) = k
Tsumar2(x > 1)) = 2* Tsumar2(x
( / 2) + k
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 7
Sea v un vecctor de compponentes Integer positivaas que se aju
ustan al perfiil de una curv
rva cóncava, es decir, quee
existe una única posición
n k en el vecttor tal que:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Los elementos a la izquierda
a de k están oordenados descendentem
mente
• Los elementos a la derecha de
d k están orrdenados asccendentemeente
Ejemplo:
SOLUCCIÓN:
atic int bu
public sta uscarPosK(I
Integer v[ ]) {
return b
buscarPosK( ength ‐ 1) ;
(v, 0, v.le
}
Instancias significativas:
Mejo or caso: la poosición k se encuentra
e enn la posición
n (inicio + fin)) / 2.
Peorr caso: el vecctor v está to otalmente orrdenado. Porr lo tanto, k coincide
c conn uno de los extremos
e deel
vecttor
Ecuaciones d
de recurrenccia:
Mejo or caso: TbuscarPosKM(N) = k
Peorr caso: TbuscarPosKP(N=
=0) = k
TbuscarPosKP(N>
>0) = 1 * TbusscarPosKP(N/2) + k
Coste:
TbusccarPosK(N) (1)
TbusccarPosK(N) O(log2N), apliccando el teo rema 3 con a=1
a y c=2.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 8
Realiza una traza compleeta en árbol de las llamaadas recursivvas que gene era quickSortt para el arra
ay v = {8, 12
2,
6, 9, 18, 15, 1}, indicando
o el orden en
n el que se ggeneran y se resuelven.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SOLUCCIÓN:
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver de fiesta no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 9
Realiza una ttraza de merrgeSort para el array {3, 41, 52, 26, 38, 57, 9, 49}}.
SOLUCCIÓN:
mergeSort(vv, 0, 7) 0 1 2 3 4 5 6 7
meergeSort(v, 0,
0 3) 3 41 52 26 38 57
5 9 49
mergeSSort(v, 0, 1)
mergeSort((v, 0, 0)
mergeSort((v, 1, 1) 0 1 2 3 4 5 6 7
merge(v, 0,, 1, 1) 3 41 52 26 38 57
5 9 49
mergeSSort(v, 2, 3)
mergeSort((v, 2, 2)
mergeSort((v, 3, 3)
0 1 2 3 4 5 6 7
merge(v, 2,, 3, 3)
3 41 26 52 38 57
7 9 49
merge((v, 0, 2, 3)
3 26 41 52 38 57
7 9 49
meergeSort(v, 4,
4 7)
mergeSSort(v, 4, 5)
mergeSort((v, 4, 4)
mergeSort((v, 5, 5) 0 1 2 3 4 5 6 7
merge(v, 4,, 5, 5) 3 41 52 26 38 57
7 9 49
mergeSSort(v, 6, 7)
mergeSort((v, 6, 6)
mergeSort((v, 7, 7) 0 1 2 3 4 5 6 7
merge(v, 6,, 7, 7) 3 41 26 52 38 57 9 49
merge((v, 4, 6, 7) 3 26 41 52 9 38 49 57
meerge(v, 0, 4, 7)
7 3 9 26 38 41 49 52 57
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejerciciio 10
Diseña un mmétodo recurrsivo que devuelva el núúmero de ele
ementos igua
ales a uno daado que hayy en un arrayy
ordenado asscendentemeente y con elementos re petidos.
Estudia el co odo diseñado.
oste del méto
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SOLUCCIÓN:
tatic <T ex
private st xtends Comp
parable<T> > int igua
ales(T v[], T x, int ini, int fin)
f {
if (ini > fin) ret
turn 0;
int mita
ad = (ini + fin) / 2;
;
int res = v[mitad]
].compareTo
o(x);
if (res < 0) retur
rn iguales(
(v, x, mitaad + 1, fi
in);
else if (res > 0) return igu
uales(v, x , ini, mit
tad – 1);
turn 1 + ig
else ret guales(v, x,
x ini, mit v, x, mitadd + 1, fin);
tad – 1) + iguales(v
}
Instancias significativas:
Mejo or caso: el elemento x no
o está en el vvector.
Peorr caso: todoss los elementtos del vectoor son iguale
es a x.
Ecuaciones d
de recurrenccia:
Mejo or caso: TigualesM(N=0)) = k
TigualesM(N>0)) = 1 * TigualesM (N/2) + k
Peorr caso: TigualesP(N=0) = k
TigualesP(N>0) = 2 * TigualesP (N/2) + k
Coste:
Tiguales(N) (log2N), aplican
ndo el teorem
ma 3 con a=11 y c=2.
e teorema 3 con a=2 y c=2.
Tiguales(N) O(N)), aplicando el
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE
Ejerciciio 11
Un array se dice que tieene un elemmento mayorritario si máss de la mitad
d de sus eleementos tien
nen el mismoo
valor.
Dado un arrray genérico v, diseñad un
u algoritmoo siguiendo una
u estrategiia Divide y V
Vencerás quee devuelva su
u
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
elemento mayoritario (oo null en caso
o de que v noo tenga elem
mento mayorritario).
Estudia la co
omplejidad teemporal del método rec ursivo diseñado.
SOLUCCIÓN:
Instancias significativas:
Mejo or caso: todoos los elementos de v so n iguales.
Peorr caso: el eleemento mayo oritario de laa parte izquie
erda siempre
e es distinto al elemento mayoritario
o
de laa parte derecha.
Ecuaciones d
de recurrenccia:
Mejo or caso: TelementoMayorittarioM(N=1) = k 1
TelementoMayorittarioM(N>1) = 2 * TelementoMayoritarioM(N/2) + k2
Peorr caso: TelementoMayorittarioP(N=1) = k 1
TelementoMayorittarioP(N>1) = 2 * TelementoMayoritarioP(N/2)) + k3*N + k4
Coste:
TelemmentoMayoritario(N
N) (N), aplicando el tteorema 3 co on a=2 y c=2.
N) O(N logg2N), aplicanndo el teorem
TelemmentoMayoritario(N ma 4 con a=2
2 y c=2.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejemplos:
Dado el vector v = {‐2, 3, 4, 4 ‐3, 5, 6, ‐22}, la función
n devolverá 15 ya que laa subsecuen
ncia de sumaa
máxxima es {3, 4,, ‐3, 5, 6}.
Dado el vector v = {‐2, 11, ‐4, 13, ‐5, 22}, la función n devolverá 20 ya que laa subsecuen
ncia de sumaa
máxxima es {11, ‐4,‐ 13}.
omplejidad teemporal del método rec ursivo diseñado.
Estudia la co
SOLUCCIÓN:
atic int su
public sta ubSumaMax(i
int v[]) {
return s
subSumaMax( ength ‐ 1) ;
(v, 0, v.le
}
oblema: N = der
Talla del pro d – izq + 1 (En la lla mada más alta: N = v.len
ngth)
Ecuaciones d
de recurrenccia: TsubSumaMaax(N=1) = k1
TsubSumaMax(N>1) = 2 * TsubSumaMax(N/2) + k2*N + k3
Θ log2N), aplicando
Coste: TsubSuumaMax(N) Θ(N a el teorema 4 con a=2 y c=2
2.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4881650
Volver a clase no es fácil. Por eso BOLT te da un 60% de descuento en tu primer viaje con el código: ATREVETE