0% encontró este documento útil (0 votos)
8 vistas20 páginas

Análisis de Algoritmos y Complejidad

El documento presenta una serie de ejercicios y problemas relacionados con el análisis de algoritmos y el crecimiento de funciones en el contexto de la ingeniería informática. Se abordan temas como el tiempo de ejecución de algoritmos, estimaciones de sumas, y la eficacia de algoritmos locales, proporcionando pseudocódigos y fórmulas para resolver los problemas planteados. Además, se incluyen ejercicios de justificación y análisis de complejidad para diferentes algoritmos y estructuras de datos.

Cargado por

adradosdaniel131
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas20 páginas

Análisis de Algoritmos y Complejidad

El documento presenta una serie de ejercicios y problemas relacionados con el análisis de algoritmos y el crecimiento de funciones en el contexto de la ingeniería informática. Se abordan temas como el tiempo de ejecución de algoritmos, estimaciones de sumas, y la eficacia de algoritmos locales, proporcionando pseudocódigos y fórmulas para resolver los problemas planteados. Además, se incluyen ejercicios de justificación y análisis de complejidad para diferentes algoritmos y estructuras de datos.

Cargado por

adradosdaniel131
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Grado en Ingenierı́a Informática, UAM

Problemas
• (E): ejercicio; (E+): ejercicio avanzado.

• (P): problema; (P+): problema avanzado.

• (R): recomendado; se resolverá en clase.

1 Casos peor, mejor y medio de algoritmos básicos


Ejercicios
1. (E; R) Denotando como MMul el algoritmo tradicional de multiplicación de matrices cuadradas,
definir una OB adecuada para el mismo, y estimar para la misma nMMul (A, B), para cualquier
par de matrices de dimensión N.

2. (E; R) El siguiente pseudocódigo corresponde a un algoritmo para encontrar el mı́nimo de una


tabla

indice Min(tabla T, indice P, indice U)


Min=T[P];
iMin=P;
para i de P+1 a U:
si T[i] < Min:
Min = T[i];
iMin=i;
devolver iMin;

Analizar su tiempo de ejecución del algoritmo usando como operación básica la comparación
de claves.

3. (E) Analizar el tiempo de ejecución del algoritmo trivial de potenciación de pseudocódigo

pot(int x, int N)
p = x;
para i de 2 a N:
p = p*x;
devolver p;

4. (E; R) Para los siguientes fragmentos de código, establecer una operación básica adecuada y
estimar sus tiempos de ejecución en función de n:

• sum = 0;
for (i=1; i<=n; i++)
sum++;

1
for (i=1; i<=n; i++)
for (j=0; j<n; j++)
sum++;
• sum = 0;
for (i=1; i<=n; i++)
for (j=0; j<n*n; j++)
sum++;

Problemas

5. (P; R) Para los siguientes fragmentos de código, establecer una operación básica adecuada y
estimar sus tiempos de ejecución en función de n:

• sum = 0;
for (i=1; i<=n; i++)
for (j=0; j<i; j++)
sum++;
• sum = 0;
for (i=1; i<=n; i++)
for (j=0; j<i*i; j++)
for (k=0; k<j; k++)
sum++;
• sum = 0;
for (i=1; i<=n; i++)
for (j=0; j<i*i; j++)
if (j%i == 0)
for (k=0; k<j; k++)
sum++;

6. (P) Justificar las desigualdades (A + B)/2 ≤ max(A, B) ≤ A + B. ¿Qué suponen para el


cálculo del número de OBs sobre selecciones?

2 Crecimiento de funciones
Ejercicios

7. (E; R) Para un cierto problema se disponen de cinco algoritmos cuyos tiempos de ejecución en
microsegundos para una entrada de tamaño N son respectivamente 10.000N, 1.000N log10 N,
100N 2 , 10N 3 y 10−3 10N/10 . Dar una tabla con sus tiempos de ejecución para los valores de N
10, 100, 1.000, 10.000, 100.000 y 1.000.000.
¿Cuál es para cada algoritmo el tamaño máximo de una entrada para que ésta se ejecute en 1
minuto? ¿Y en un dı́a?

8. (E; R) Ordenar las siguientes funciones según su crecimiento: n, n, n1.5 , n2 , n log n, n log log n,
n log2 n, 2/n, 2n , 2n/2 , 37, n2 log n, n3 .

2
entradas de tamaño N, son N 2 , 10N(log2 N)2 y 18 N 2 log2 N, respectivamente. Dar los rangos de
valores de N en los que cada uno de estos algoritmos es más conveniente. (Considerar potencias
de 2 para los lı́mites de dichos rangos.)

10. (E; R) El análisis de dos algoritmos, A y B, muestra que WA (N) = O(1000N log10 (N)) y
WB (N) = O(N 2 ). ¿Cuál es mejor para problemas ”pequeños”? ¿Cuál es mejor para problemas
”grandes”? Especificar qué serı́a pequeño y grande en este contexto.

11. (E; R) Probar que para todo a > 0, log n = o(na ).

12. (E+) Probar que N = Θ(N) y que también N = Θ(N) (¿puede hacerse mediante lı́mites?).

13. (E+) ¿Cuál es el orden de crecimiento teórico de la función f (N) = N log N + 100N? ¿Cuál
es su orden de crecimiento ”real”?

14. (E; R) Se sabe que T1 ≈ f y T2 ≈ f ; decidir razonadamente la verdad o falsedad de las


siguientes afirmaciones (dar un breve argumento en las ciertas y un contraejemplo o contraar-
gumento en las falsas):

(a) T1 + T2 ≈ f ;
(b) T1 − T2 = o(f );
(c) T1 · T2 ≈ f 2 .

15. (E; R) Se sabe que T1 ≈ f y T2 ≈ f ; decidir razonadamente la verdad o falsedad de las


siguientes afirmaciones (dar un breve argumento en las ciertas y un contraejemplo o contraar-
gumento en las falsas):

(a) T1 + T2 ≈ 2f ;
(b) T12 − T22 = o(f );
(c) T1 /T2 ≈ 1.

Problemas

16. (P; R) Se sabe que T1 (N) = O(f (N)) y que T2 (N) = O(f (N)). ¿Cuál de las siguientes
afirmaciones es cierta y cuál falsa?

(a) T1 (N) + T2 (N) = O(f (N));


(b) T1 (N) − T2 (N) = o(f (N));
T1 (N )
(c) T2 (N )
= O(1);
(d) T1 (N) = O(T2 (N)).

(dar un breve argumento para las afirmaciones ciertas y un contraejemplo para las falsas).

17. (P; R) Se sabe que T1 (N) = Θ(f (N)) y que T2 (N) = Θ(f (N)). ¿Cuál de las siguientes
afirmaciones es cierta y cuál falsa?

(a) T1 (N) + T2 (N) = Θ(f (N));


(b) T1 (N) − T2 (N) = o(f (N));
T1 (N )
(c) T2 (N )
= Θ(1);

3
1 2

(dar un breve argumento para las afirmaciones ciertas y un contraejemplo para las falsas).
N k
18. (P) Diremos que F = f + O(g) si g = o(f ) y |F − f | = O(g). Comprobar que 1i =
N k+1 /(K + 1) + O(N K ).
19. (P+) Probar que para todo N, log N! = Θ(N log N) y N! = o(N N ).
20. (P; R) ¿Es cierto que para cualquier f y cualquier constante C, f (Cn) = O(f (n))? ¿Es cierto
que f (n + C) = O(f (n))?

3 Estimación de sumas
Ejercicios

21. Estimar razonadamente el crecimiento de la siguiente función:


N
1
S(N) = ,
1 i1/3
2
22. (E) De una cierta tabla de tamaño N se sabe que P (T [i]) = CiN , donde CN es una constante
normalizadora. ¿Cuál será el número medio de comparaciones de clave que realizará sobre la
misma el algoritmo de búsqueda lineal en búsquedas con éxito?
23. (E; R) Se quiere usar el siguiente pseudocódigo para búsquedas lineales en tablas ordenadas

int BLin(tabla T, dim N, clave K)


i=1;
mientras i <= N y T[i] < K:
i++;
si i > N:
devolver error;
else si T[i] != K:
devolver error;
else:
devolver i;

Suponiendo que P (K = i) = P (i < K < i + 1) = P (i < 1) = P (i > N) = 1


2N +1
, calcular
ABLin (N) considerando tanto búsquedas con acierto como con error.
24. (E; R) Dada una tabla T , se sabe que
1 log i
P (K = T [i]) = ,
CN i
N log i
donde CN = 1 i
.
Calcular razonadamente ABLin (N).
25. (E) Dada una tabla T , se sabe que
1
P (K = T [i]) = i log i,
CN
N
donde CN = 1 i log i. Calcular razonadamente AeBLin (N).

4
N
26. (E) Comprobar por inducción la veracidad de la identidad 1 a + ib = N(a + N +1
2
b).

27. (P; R) Demostrar por inducción las siguientes fórmulas:


N 2
n = n(n + 1)(2n + 1)/6,
1N 3
1 n = (n(n + 1)/2) .
2

 
28. (P+) Dar una fórmula para la suma N 1 nx , y también para 1 n x . (Observése que la
n N 2 n

primera se parece a una derivada y la segunda no está demasiado lejos.)

4 Evolución de algoritmos locales


Ejercicios

29. (E) Dada la lista [20, 3, 10, 6, 8, 2, 13, 17], indicar el estado de la misma tras cada
una de las iteraciones del método de la burbuja y del de inserción.

30. (E) Sobre la lista 16 6 3 4 9 31 1 8 2 7, dar razonadamente la evolución del método de


inserción, indicando el estado de la tabla tras la ubicación de cada elemento, y el número de
comparaciones de elementos realizadas en dicha ubicación.

31. (E) Sobre la lista 8 18 5 6 10 3 4 11 31 7, dar razonadamente la evolución del método de la


burbuja, indicando para la primera iteración qué elementos se usan como burbuja y detallando
los estados parciales de la tabla, y para las demás iteraciones el estado final de la tabla tras las
mismas. ¿Cuántas iteraciones se harán?

Problemas

32. (P; R) En los cuadros de la figura inferior se representan tres fases consecutivas de la evolución
de una lista de 50 números entre 1 y 50 a la que se aplican ciertos métodos de ordenación. Las
coordenadas (i, j) de un punto del gráfico indican que el número de la posición i–ésima de la
lista es precisamente j (por ejemplo, un número i está en su posición correcta si j = i, esto
es, si el par (i, j) está en la diagonal). ¿Cuáles de los métodos de ordenación estudiados en el
curso podráa generar estos gráficos?

5 Eficacia de algoritmos locales


Ejercicios

33. (E; R) Dadas las permutaciones de S6 (6 1 5 2 4 3), (6 5 4 1 2 3) y (2 3 6 4 5 1), calcular sus


traspuestas, encontrar las inversiones de ambas y comprobar el resultado del problema anterior.
Si se les aplica un algoritmo de ordenación local, ¿cuántas cdcs efectuará como mı́nimo sobre
ellas?

34. (E; R) ¿Cuántas comparaciones de clave realizará como mı́nimo un algoritmo de ordenación
local sobre la permutación de N = 2K elementos (2K 2K-1 2K-2 ... K+1 1 2 3 ... K)?

5
35. (E; R) Expresar en función de N cuantas comparaciones de clave realizará como mı́nimo un
algoritmo local si se aplica a la permutación de N = 3K elementos (2K+1, 2K+2, ..., 3K,
2K, 2K-1, ... K+2, K+1, 1, 2, ..., K)

36. (E) Expresar en función de N cuántas comparaciones de clave realizará como mı́nimo un
algoritmo local si se aplica a la permutación de N = 4K elementos
(3K+1, 3K+2, ..., 4K, 3K, 3K-1, ..., 2K+2, 2K+1, 2K, 2K-1, ... K+2, K+1, 1, 2,
..., K)

37. (E; R) Decidir razonadamente el número de comparaciones de clave que un algoritmo de


ordenación local hará como mı́nimo sobre la permutación de N = 3K elementos

(3K, 3K − 1, , ..., 2K + 1, K + 1, K + 2, ..., 2K, K, K − 1, ..., 2, 1).

Problemas

38. (P) Comprobar mediante la definición de permutación traspuesta que dada una permutación
σ, se cumple que (σ τ )τ coincide con σ.

39. (E+; R) Se aplica un algoritmo local A de ordenación a la permutación de N = 2K elemen-


tos (1 2K 2 2K-1 3 2K-2 ... K K+1). ¿Cuántas comparaciones de clave efectuará A sobre
dicha permutación?

6
ordenación local hará como mı́nimo sobre la permutación de N = 2K elementos (2K, 1,
2K-1, 2, ..., 2K-i, i+1, ..., K+1, K).

41. (P) Calcular el valor de WBurbuja (N), ABurbuja (N), WSeleccion(N) y ASeleccion(N).
A
42. (E) Se define BA (N) como BA (N) = min{nA (I) : I ∈ EN }. Analizar BInsert (N), BSelec (N),
BBurbuja (N).

43. (E+) Modificar el psc del método de Inserción para que pueda trabajar con ı́ndices iniciales
P y finales U cualesquiera.

44. (P; R) Analizar BInsert(N), BSelec (N), BBurbuja (N) usando el intercambio de elementos como
operación básica. Analizar también WSelect(N), y WBurbuja (N) bajo este punto de vista.

45. (P+; R) Dar una estimación aproximada de ABurbuja (N) suponiendo que en la misma se
utiliza el siguiente psc:

Burbuja(tabla T, dim N)
switch = 1;
long = N;
mientras switch == 1 y long > 1:
switch = 0;
para i de 1 a long-1:
si T[i] > T[i+1]:
intercambiar T[i] y T[i+1];
switch = 1;
long--;

46. (P; R) El siguiente pseudocódigo es una ligera variante del habitualmente utilizado en la
ordenación por Inserción:

InsertSort(tabla T, dim N)
para i de 2 a N:
j=i;
mientras j > 1 y T[j-1] > T[j]:
intercambiar T[j-1] y T[j];
j--;
volver;

Utilizando el intercambio de elementos como operación básica, calcular razonadamente WInserSort(N)


y AInserSort(N).

47. (P) Un algoritmo de ordenación se dice estable si al aplicarlo a una tabla con elementos tal
vez repetidos, dos elementos con la misma clave (y por tanto relativamente ya bien ordena-
dos) mantienen sus posiciones relativas al finalizar el algoritmo. ¿Cuáles de los métodos de
ordenación estudiados son estables? (Modificar su psc si fuera necesario.)

48. (P+) Supongamos que en una tabla los elementos T[i] y T[i+K] están en inversión. Probar
que si los intercambiamos, se elimina como mı́nimo una inversión y como máximo 2K − 1.

7
Ejercicios

49. (E) Estudiar la evolución de las permutaciones

(a) (5 9 8 2 3 10 1 7 4 6),
(b) (3 10 1 7 5 9 8 2 4 6),
(c) (10 1 7 3 9 8 2 5 4 6),

cuando se le aplica la rutina Partir suponiendo que su subrutina Medio devuelve el ı́ndice P.

50. (E) Dar la evolución del algoritmo Partir sobre la tabla (7 8 2 4 5 3 10 1 6).

51. (E+) Dada la lista [18, 7, 4, 6, 12, 23, 2],


a. Indicar mediante un árbol las distintas sublistas que se generan en la fase de partir al
aplicársele el método MergeSort (situar en un nodo dado una sublista y a su izquierda y
derecha las otras dos que se generan de ella). Numerar cada nodo segán el orden en que el
método MergeSort genera su correspondiente lista.
b. Tomado como base las sublistas elementales del último nivel del árbol anterior, indicar
mediante un árbol invertido las distintas sublistas que se generan en la fase de combinación
del método MergeSort (por ejemplo, el último nodo debiera contener la lista inicial ordenada).
Numerar también aquı́ cada nodo según el orden en que el método MergeSort genera su corre-
spondiente lista.

52. (E) Dadas las listas [45 29 47 32 19 12 26 51] y [12 9 22 37 25 32 6 14], estudiar su
evolución sobre un AB cuando se les aplica el método de ordenación de MergeSort y QuickSort.

53. (E) Dadas las listas


[Q B K C F A G P] , [34 43 12 58 17 92 21]
indicar su evolución en un árbol binario al aplicarseles los métodos de MergeSort.

Problemas

54. (P+) Estudiar el tiempo de ejecución del QuickSort en los casos mejor y peor tomando como
operación básica el intercambio de elementos.

55. (P) Calcular AP artir (N), donde P artir es la rutina de división que utiliza el método de Quick-
Sort para dividir una tabla en dos subtablas utilizando como operación básica el intercambio
de elementos de la tabla.

56. (P+) Estudiar el tiempo medio de ejecución del QuickSort tomando como operación básica el
intercambio de elementos.

57. (P) Estudiar BCombinar y BM S (N).

58. (P+) Estudiar ACombinar cuando se aplica a dos tablas de tamaño N.

59. (P+) Estimar de manera adecuada el posible valor de AM S (N).

60. (P+) Una operación básica alternativa en el Merge Sort podrı́a ser la “copia” de elementos que
se realiza en la rutina Combinar. Estimar los posibles valores de WM S (N) y AM S (N) respecto
a esta operación.

8
QS

62. (P) Se quiere aplicar el algoritmo QuickSort tomando siempre P como pivote sobre un conjunto
de tablas T de tamaño N = 2M + 1 de la forma

[M + 1, 2, . . . M, 1, T [M + 2], . . . , T [N]],

donde los valores T[j], M +2 < j ≤ N están entre M +2 y N = 2M +1; esto es, la primera parte
de las tablas es siempre la misma, de la forma T[1] = M+1, T[i] = i si 1 < i < M +1, T[M+1]=1
y la segunda parte varı́a, estando formada por los enteros de M + 2 a N desordenados. Estimar
razonadamente en función de N cuál será el coste medio de tales ordenaciones.

7 Desigualdades recurrentes
Ejercicios

63. (E; R) Expresar en función de N los valores de las siguientes sumas

K−1 j  
1) 0 2, N = 4K ; 2) 0 4 , N = 2K ;
K−j j
3) 0 2 , N = 3K ;
K−1 j
K−1 K−1 3j−2 
4) j+2
0 2 , N = 8K ; 5) 0 4j+2
, N = 12K ; 6) K−1
0 2j/2 , N = 4K ;
K−1  2 j  K K−1 j K−1 j
7) 0 3
, N= 3
2
; 8) 04, N = 2K ; 9) 0 2, lg N = 3K

64. (E; R) De una cierta funcion T se sabe que T (1) = 0 y que T (N) ≤ lgN + T (N/2). Estimar
el orden de T (N) para N de la forma N = 2K (Sugerencia: reiterar la igualdad anterior).

65. (E; R) Estimar el orden de la función T (N) en las siguientes recurrencias suponiendo que
T (1) = 0

(a) T (N) ≤ 2T (N/2) + N 3 ;


(b) T (N) ≤ 2T (N − 1) + 1;
(c) T (N) ≤ T (N − 1) + N;

(d) T (N) ≤ 2T (N/4) + N ;

66. (E; R) Estimar razonadamente el crecimiento de la función T que satisface T (1) = 0, ası́ como
la desigualdad recurrente √
T (N) ≤ N + 4T (N/4).

67. (E; R) Estimar el crecimiento de la función T (N) de argumento entero que verifica la desigual-
dad recurrente T (N) ≤ N + 2T (N/2), donde T (1) = 0.

Problemas

68. (P; R) Estimar razonadamente el crecimiento de la función T que satisface T (1) = 0, ası́ como
la desigualdad recurrente
T (N) ≤ T (N/2) + N lg(N).

69. (P; R) Estimar el orden de la función T (N) tal que T (1) = 0 y T (N) ≤ T ( N) + 1.

9
Ejercicios

70. (E; R) El siguiente algoritmo resuelve el problema de las torres de Hanoi para mover N discos
de un poste A a otro B usando un tercero C como almacenamiento intermedio

Hanoi(discos N, poste A, poste B, poste C)


si N == 1:
mover un disco de A a B;
else
Hanoi(N-1, A, C, B);
mover un disco de A a B;
Hanoi(N-1, C, B, A);

Usando el movimiento de discos como OB, ¿cuántos movimientos se harán para trasladar N
discos de A a B? ¿Cuántas llamadas recursivas hace el algoritmo para N discos?

Problemas

71. (P; R) El siguiente algoritmo proporciona la posición del elemento máximo de una tabla T
entre las posiciones P y U:

ind MaxRec(tabla T, ind P, ind U)


si P == U: devolver P ;
M = (P+U)/2 ;
m1 = MaxRec(T, P, M) ;
m2 = MaxRec(T, M+1, U) ;
si T[m1] > T[m2] : devolver m1 ;
else : devolver m2 ;

Usando la cdc como operación básica, estimar razonadamente el trabajo en el caso peor del
algoritmo sobre tablas de N elementos. Para ello establecer una desigualdad recurrente para
dicho trabajo, resolverla en algún caso particular adecuado y, finalmente, dar la solución general.
72. (P; R) El siguiente pseudocódigo corresponde a una versión recursiva del cálculo de la media
de una tabla

float media(tabla T, pos P, pos U)


si P == U :
devolver T[P] ;
else :
M = suelo ((P+U)/2) ;
medI = media(T, P, M) ;
medD = media(T, M+1, U) ;
nI = M-P+1 ; // num elems de subtabla izquierda
nD = U-M ; // num elems de subtabla derecha
nT = U-P+1 ; // num total de elementos
med = ( nI*medI + nD*medD ) / nT ;
devolver med ;

10
hace el algoritmo sobre una tabla de N elementos efectuando para ello los siguientes pasos:
i. escribir una ecuación recurrente para n(N) ;
ii. resolver la misma en algún caso particular conveniente;
iii. resolver o acotar la misma en el caso general.

73. (P) Suponiendo N = 2K , un número A de N cifras puede descomponerse como A = A1 ∗ DK +


K−1
A2 , donde A1 , A2 tienen N/2 cifras y DK = 102 . Si ası́ se descomponen dos números A, B
de N cifras, la fórmula

AB = A1 B1 ∗ DK
2
+ (A1 B2 + A2 B1 ) ∗ DK + A2 B2

sugiere el siguiente algoritmo recursivo para multiplicar A y B:

int MMR(int A, int B, int N)


si N==1:
devolver A*B;
else:
calcular A1, A2, B1, B2;
O = MMR(A1, B1);
P = MMR(A1, B2) + MMR(A2, B1);
Q = MMR(A2, B2);
devolver (O * DK + P) * DK + Q;

K−1
donde DK denota 102 . Tomando como OB la multiplicación, ¿cuál es la complejidad TM M R (N)
de aplicar MMR a dos números de N = 2K cifras?

74. (P+) En las condiciones del problema anterior, la fórmula

AB = A1 B1 ∗ DK
2
+ ((A1 + A2 )(B1 + B2 ) − A1 B1 − A2 B2 ) ∗ DK + A2 B2

reduce la multiplicación de dos números de N cifras a esencialmente tres multiplicaciones de


dos números de N/2 cifras. Dar el pseudocódigo de un algoritmo recursivo MMRmR de
multiplicación de números que aproveche dicha fórmula y estimar su complejidad TM M RmR (N)
al aplicarlo a dos números de N = 2K cifras.

75. (P+; R) Se quiere estimar el número de llamadas recursivas del algoritmo inferior con una
versión sin recursión de cola de las torres de Hanoi. Escribir la correspondiente ecuación
recurrente y resolverla.

hanoi2(int N, int A, int B, int C)


mientras N > 1 :
hanoi(N-1, A, C, B) ;
mover de A a B ;
N-- ; T = A ; A = C ; C = T ;
mover de A a B ;

76. (P+; R) El pseudocódigo inferior corresponde a un algoritmo para el cálculo del número de
hojas de un árbol binario:

11
si T vacio :
devolver 0 ;
else si izq(T) vacio y der(T) vacio :
devolver 1 ;
else :
devolver numHojas(izq(T)) + numHojas(der(T)) ;

i. Escribir razonadamente la ecuación general en recurrencias para el número de sumas que


realiza dicho algoritmo en función de su número de nodos N.

ii. Resolver dicha ecuación para árboles binarios completos (si un tal árbol tiene profundidad
K, su número de nodos es 2K − 1).

iii. ¿Cuál es el rendimiento del algoritmo en el caso peor para árboles binarios generales?
Sugerencia: intentar establecer qué situación podrı́a suponer un trabajo máximo del algoritmo.

77. (P+; R) Se quiere estimar el número de llamadas recursivas del algoritmo inferior de PreOrden
sobre árboles binarios completos. Escribir la correspondiente ecuación recurrente y resolverla.

PO(AB T)
si T != NULL :
visitar(T) ;
PO(izq(T)) ;
PO(der(T)) ;

78. (P+) En la versión inferior se ha eliminado la segunda recursión de cola del algoritmo de
PreOrden. Estimar para árboles binarios completos el nuevo número de llamadas recursivas
escribiendo y resolviendo la correspondiente ecuación recurrente.

PO2(AB T)
mientras T != NULL :
visitar(T) ;
PO2(izq(T)) ;
T = der(T) ;

79. (P+) El algoritmo recursivo inferior calcula los números de Fibonacci:

long Fib(int N)
si N == 0 o N == 1 :
devolver 1 ;
else :
devolver Fib(N-1) + Fib(N-2) ;

Si T (N) es el número de sumas que Fib ejecuta sobre un entero N, ¿Qué ecuación recurrente
verifica T (N)?
¿Cuál serı́a su solución?
N
80. (P+; R) Calcular el orden de G(N) = 0 Fi , donde Fi es el iésimo número de Fibonacci.

12
Ejercicios

81. (E) Dadas las listas


Q B K C F A G P E D H R
34 43 12 58 17 92 21 67 56 72 80
1. construir sus correspondientes Max heaps indicando la evolución de estos en cada uno de
los pasos a dar;
2. usar estos heaps para ordenarlas, indicando la evolución de los mismos en cada uno de los
pasos a dar.

82. (E) Aplicar el método HeapSort a la ordenación de la lista 8 6 2 10 9 1 3 5 7 4.

83. (E) Dada la lista [14, 4, 8, 10, 19, 17, 18, 15], aplicar a la misma el método HeapSort
utilizando un max–heap. Durante la fase de creación del heap, indicar sus estados parciales
utilizando su representación sobre un árbol binario. Durante de ordenación, representar el
estado del heap y de la lista parcialmente ordenada usando como estructura de datos una
tabla.

84. (E; R) Dada la lista [15, 1, 10, 5, 8, 3, 11, 14], dar la evolución sobre la misma del
método de ordenación HeapSort, indicando en la construcción del max–heap asociado y en la
extracción desde el mismo cada uno de sus sucesivos estados.

85. (E) Dar la evolución del método HeapSort sobre la tabla 9 8 10 2 5 6 7 12 11.

Problemas

86. (P) Tomando como OB el acceso a un nodo, ¿cuál serı́a la complejidad en el caso peor para la
construcción de un max heap? ¿Cuál serı́a la complejidad en el caso peor para esta ordenación
desde un heap?
Combinando ambos pasos se consigue un algoritmo de ordenación por comparación de claves.
¿Cuál es su complejidad en el caso peor?

87. (P+) Estimar razonadamente BHeapSort (N) y AHeapSort (N)

88. (P) Los elementos de un heap pueden almacenarse de manera muy sencilla en una tabla
haciendo que el elemento que ocupe el lugar i–ésimo del heap cuando éste se recorre por niveles
ocupe la posición i–ésima de la tabla. Almacenándolo ası́, ¿qué relación hay entre el ı́ndice i
de un nodo y los de sus hijos? ¿Cuál hay entre el ı́ndice i de un nodo y el de su padre?

89. (P) Implementación de HeapSort sobre tablas Si de acuerdo con el problema anterior se
contempla una tabla con ı́ndices de 1 a N como un heap, se observa que los únicos elementos
que pueden no cumplir la condición de MaxHeap son los situados en los ı́ndices N/2, N/2 −
1, N/2 − 2, . . . , 3, 2, 1.
Comprobar que reubicando dichos elementos en ese orden se puede conseguir un MaxHeap.

90. (P) Una vez creado un MaxHeap sobre una tabla, comprobar que se puede obtener una or-
denación de la misma intercambiando repetidamente los elementos en posiciones N, N − 1, . . .
con el elemento raı́z y reubicando el elemento ası́ “subido”.

13
una lista de 50 números entre 1 y 50 a la que se aplican ciertos métodos de ordenación. Las
coordenadas (i, j) de un punto del gráfico indican que el número de la posición i–ésima de la
lista es precisamente j (por ejemplo, un número i está en su posición correcta si j = i, esto
es, si el par (i, j) está en la diagonal). ¿Cuáles de los métodos de ordenación estudiados en el
curso podrı́a generar estos gráficos?

10 Árboles de decisión
Ejercicios

92. (E) Escribir el árbol de decisión de los algoritmos de Burbuja, InsertSort y Selección N = 3.

93. (E; R) Escribir el árbol de decisión de los algoritmos de QuickSort y MergeSort para N = 3.

94. (E) Un cierto algoritmo de ordenación tiene el siguiente pseudocódigo:

14
si T[P] < T[P+1]:
InsertSort(T, P, U) ;
else:
MergeSort(T, P, U) ;

Dar su árbol de decisión para tablas con 3 elementos.

95. (E) Dar razonadamente el árbol de decisión para N=3 del algoritmo inferior de ordenación.
Usar la notación i:j con i < j para indicar la comparación de los elementos i y j de la tabla
inicial T.

RaroSort(tabla T, dim N)
si T[1] < T[2]:
QuickSort(T, N) ; // usar primer elemento como pivote
else :
InsertSort(T, N) ;

96. (E+) Construir razonadamante el árbol de decisión para N = 3 para la siguiente variante del
algoritmo SelectSort.

SelectSortMax(tabla T, dim N)
para i de N a 2:
iMax=Max(T, 1, i);
intercambiar T[i] con T[iMax];

indice Max(tabla T, indice P, indice U)


Max=T[P];
iMax=P;
para i de P+1 a U:
si T[i] > Max:
Max = T[i];
iMax=i;
devolver iMax;

97. (E+; R) El algoritmo de ordenación por inserción puede ejecutarse sobre el siguiente pseu-
docódigo:

InsertSortMax(tabla T, dim N)
para i de N-1 a 1:
A = T[i];
j = i+1;
mientras j <= N y T[j] < A:
T[j-1] = T[j];
j++;
T[j-1] = A;

Dar razonadamente su árbol de decisión para N = 3, señalando tras cada cdc el estado de la
evolución de la tabla.

15
siguiente versión del algoritmo de ordenación de la burbuja:

PlomoSort(tabla T, dim N)
camb = 1;
ini = 1;
mientras fin < N y camb == 1:
camb = 0;
para i de N a ini+1:
si T[i] < T[i-1]:
intercambiar T[i] y T[i-1];
camb = 1;
ini++;

Dar también el árbol de decisión si en el código se eliminan las sentencias con el indicador de
intercambios camb.

99. (E) a. Dada una tabla T , el algoritmo InsertSort efectúa en primer lugar la comparación entre
T [1] y T [2]. Suponiendo que T [1] > T [2], ¿contra qué elemento T [j] se compara entonces T [1]?
b. Suponiendo que T [1] gana dicha comparación, dar razonadamente el subárbol de decisión
que sigue a la misma para tablas de 4 elementos (esto es, el subárbol que sigue por la derecha
a la raı́z es 1 : 2, y a su hijo derecho de la forma 1 : j). Tras cada cdc, indicar el estado de la
tabla y marcar el elemento a insertar.

Problemas

100. (E+; R) Sobre una tabla de cuatro elementos el algoritmo MergeSort realiza en primer lugar
la comparación 1:2 y si el primer elemento resulta mayor, se realiza la comparación 3:4.
Dar razonadamente el resto del árbol de decisión del MergeSort para tablas de 4 elementos
suponiedo que el primer elemento es mayor que el segundo y que el tercero es menor que el
cuarto. Indicar tras cada iteración el estado de las tablas implicadas.

101. (E+; R) El siguiente pseudocódigo da una versión “descendente” del algoritmo de la Burbuja
en la que la lista comienza a ordenarse desde su inicio.

PS(tabla T, dim N)
k = 1;
mientras k < N :
para i de N a k+1:
si T[i] < T[i-1]:
intercambiar T[i] y T[i-1];
k++;

En una tabla de 4 elementos PS realiza 3 : 4 como primera cdc. Si T [3] > T [4], ¿Cuál es
la siguiente cdc? Suponiendo que en la siguiente cdc es menor el elemento de mayor ı́ndice,
construir razonadamente el subárbol de decisión de TP4 S resultante.

102. (E+; R) El algoritmo inferior es una variante “descendente” de InsertSort.

16
para i de N-1 a 1 :
j=i ;
mientras j < N y T[j] > T[j+1] :
swap(T[j], T[j+1]) ;
j++ ;
volver;

En una tabla de 4 elementos ISD realiza 3 : 4 como primera cdc. Si T [3] > T [4], ¿Cuál es
la siguiente cdc? Suponiendo que en la siguiente cdc es menor el elemento de mayor ı́ndice,
construir razonadamente el subárbol de decisión de TISD
4
resultante.

103. (E+; R) Dar razonadamente el árbol de decisión del algoritmo HeapSort para tablas de 3
elementos.

104. (P; R) Probar que si T es un 2-árbol con N nodos entonces T tiene N + 1 hojas (sugerencia:
inducción).

105. (P) Establecer de manera precisa la relación entre la profundidad de un árbol binario y su
número de hojas.

106. (P) Si un árbol binario completo contiene N elementos. ¿cuál es su profundidad? ¿cuál es su
lce?.

107. (P+; R) La longitud de caminos internos (lci) de un árbol T se define como



lci(T ) = prof (N).
{N :nodo interno de T }

Probar que si T es un 2-árbol con N nodos internos, entonces lce(T ) = lci(T )+2N (sugerencia:
inducción).

11 Algoritmos básicos de búsqueda


Ejercicios

108. (E) Dada la tabla T

1 15 2 14 3 13 4 12 5 11

escribir su árbol binario de búsqueda B.


Dar los árboles de búsqueda B que resultan de extraer del anterior los elementos 15, 13, 3
en ese orden.

109. (E+) Calcular explı́citamente ABBin (N) para N = 3 y N = 7 (suponer equiprobabilidad).

17
110. (P) Estimar el coste medio de la primitiva Borrar en un diccionario que usa como edd una
tabla ordenada.

111. (P; R) Probar que si un nodo de un ABdB tiene 2 hijos, su sucesor sólo tiene a lo sumo el hijo
derecho.

112. (P) Si N es un nodo de un ABdB, su predecesor es el nodo M tal que info(M) es la clave
inmediatamente anterior a info(N). Probar que si un nodo de un ABdB tiene 2 hijos, su
predecesor sólo tiene a lo sumo el hijo izquierdo.

113. (P+; R) Dar el pseudocódigo de una función Sucesor que reciba un puntero a un nodo de un
árbol binario y devuelve un puntero a su sucesor.

114. (P+) Dar el pseudocódigo de una función Predecesor que reciba un puntero a un nodo de un
árbol binario y devuelve un puntero a su predecesor.

115. (P; R) La construcción de un ABdB puede verse como una forma particular de ordenación de
listas. ¿Cuál serı́a su árbol de decisión para N = 3?

116. (P; R) Suponiedo que la construcción de un ABdB se aplica a tablas de N = 4 elementos, la


primera cdc que se efectúa es 1:2 y la segunda 1:3. Dar razonadamente el subárbol del árbol
de decisión TCrearABdB
4
suponiendo que T[1] > T[2] y que T[1] < T[3] representando tras
cada cdc el estado de los ABdB parciales resultantes.

12 Árboles AVL
Ejercicios

117. (E) Construir el AVL asociado a la lista 1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

118. (E) Construir el AVL asociado a la lista inversa de la anterior (de 15 a 8 y de 1 a 7), indicando
en cada paso con detalle las rotaciones necesarias.

119. (E) Construir el árbol AVL asociado a la lista 1 15 2 14 3 13 4 12 5 11 6 10 7 9 8.

120. (E; R) Construir razonadamente el árbol AVL para la lista 9 8 10 2 5 6 7 12 11.

121. (E; R) Construir todos los árboles de Fibonacci de profundidades 2, 3 y 4 (¡no hay tantos!).

Problemas

122. (P) Dar el esquema general de una rotación a derechas y de una rotación doble izquierda-
derecha.

123. (P+) Probar que en el proceso de creación de un AVL no pueden darse desequilibrios de la
forma (2, 0) o (0, 2).

124. (P+) Intentar probar que en la construcción de un AVL basta arreglar el desequilibrio más
profundo para que los superiores se arreglen automáticamente.

18
un número mı́nimo de nodos. Demostrar que si T es un árbol de Fibonacci de profundidad P ,
entonces Ti es un árbol de Fibonacci de profundidad P − 1 y Td es un árbol de Fibonacci de
profundidad P − 2, o al revés, Ti es un árbol de Fibonacci de profundidad P − 2 y Td es un
árbol de Fibonacci de profundidad P − 1.

126. (P+) Supongamos que los conejitos se hacen adultos en un mes y que una pareja de conejos
adultos, sea cual sea su sexo, producen una pareja de conejitos al mes. Si dos conejos adultos
náufragos llegan a una isla desierta, ¿cuántas parejas de conejos habrá en la isla tras N meses?
(por ejemplo, tras dos meses habrı́a dos parejas, una de conejitos y otra de conejos adultos).

127. (P+; R) Probar por inducción que el n–ésimo número de Fibonacci FN cumple

1
FN = √ (φN +1 − ψ N +1 )
5
√ √
con φ = (1 + 5)/2 y ψ = (1 − 5)/2 y deducir de aquı́ el orden de la función f (N) = FN .

128. (P+; R) ¿Cuántos árboles de Fibonacci de profundidad P hay?

13 Hashing
Ejercicios

129. (E) Construir una función hash adecuada para una tabla hash con encadenamiento y 9 pun-
teros. ¿Cómo se insertarán en la misma los valores 5, 28, 19, 15, 20, 33, 12, 17 y 10?

130. (E; R) Se quiere construir una tabla hash con encadenamiento para almacenar 1000 datos.
Si se considera aceptable un promedio de 4 colisiones tanto en búsquedas con éxito como sin
éxito, ¿cuál puede ser un tamaño de tabla adecuado?

131. (E; R) Se quiere construir una tabla hash con direccionamiento abierto y sondeo lineal para
almacenar 1000 datos. Si se considera aceptable un promedio de 5 colisiones en búsquedas sin
éxito, ¿cuál puede ser un tamaño de tabla adecuado?
Para el tamaño resultante de la tabla anterior, ¿cuál será el número medio de colisiones en
búsquedas con éxito?

132. (E+; R) Se puede demostrar que usando sondeos cuadráticos en una tabla de dimensión m
con N datos, el número medio de sondeos necesarios en una búsqueda fallida es

1 1
AfSC (N, m) ≈ − λ + log ,
1−λ 1−λ
donde λ es el factor de carga. ¿Cuál serı́a número medio AeSC (N, m) de sondeos necesarios en
una búsqueda con éxito?

133. (E+; R) De un cierto método hash por encadenamiento HX se sabe que AfHX (N, m) = λ2 .
Hallar de manera suficientemente razonada el valor de AeHX (N, m).

134. (E+) De un cierto método hash por direccionmiento abierto SX se sabe que AfSX (N, m) =
1 + 1/(1 − λ)2 . Hallar razonadamente el valor de AeSX (N, m).

19
135. (P; R) En general y sobre tablas hash, ¿qué será más alto, el coste medio de búsquedas fallidas
o el de búsquedas con éxito? Razonar la respuesta.

136. (P+; R) Se quieren construir tablas hash dinámicas con direccionamiento abierto y sondeo
lineal según el siguiente esquema: cuando en una tabla de tamaño N el factor de carga llega a
0.5, se construye una nueva tabla de tamaño 2N donde se reinsertan los elementos de la tabla
previa.
En promedio, ¿cuántos sondeos se precisan para el rehashing en la nueva tabla de los elementos
ya insertados en la tabla inicial? ¿Cuál será el número medio de sondeos a realizar hasta que
la nueva tabla alcance un factor de carga de 0.5? A la vista de lo anterior, discutir el coste por
inserción del rehashing.

137. (P; R) Si en una tabla hash con direccionamiento abierto se utilizan sondeos cuadráticos para
resolver colisiones puede haber claves imposibles de insertar aunque la tabla posea espacios
libres. Comprobar este efecto cuando la tabla tiene tamaño 16 y se usa como función hash
h(K) = K%16.

138. (P+; R) Probar que si en una tabla hash de tamaño M, con M primo, con direccionamiento
abierto y factor de carga λ < 1/2, se utilizan sondeos cuadráticos para resolver colisiones,
siempre es posible insertar una nueva clave K.
Sugerencia: suponer ya insertados P elementos, con P < M/2 y comprobar que dada una
clave K, cualquiera que sea la función de hash h, todos los valores del conjunto
 
h(K) + i2 : 0 ≤ i ≤ M/2
son distintos; observar que en dicho conjunto hay más de P elementos.

139. (P) Dar el pseudocódigo de unas rutinas que busquen, inserten y borren elementos de una tabla
hash en la que se utilice direccionamiento abierto y resolución de colisiones mediante sondeos
lineales.

140. (P) En hashing con encadenamiento se supone construida una rutina BusqH(clave K, tablaH
T) que recibe una clave K y devuelve un puntero a un nodo de la lista apuntada por T[h(K)]
que contiene dicha clave o NULL si ningún nodo la contiene.
Construir mediante ella las rutinas BorrarH(clave K, tablaH T) y InsH(clave K, tablaH
T) que borren o inserten la clave K del o en el nodo apropiado de la tabla de hash T. Construir
mediante ésta última otra rutina CrearH(tabla R, tablaH T) que a partir de una tabla R
proporcione un puntero a una tabla de hash que contenga los elementos de R.

20

También podría gustarte