Escolar Documentos
Profissional Documentos
Cultura Documentos
Arequipa, Julio de
LISTA DE EJERCICIOS
Pregunta 1. CLRS 2.3-7
Describa un algoritmo con consumo de tiempo O(n lg n) que, dados un
conjunto S de n enteros y otro entero x, determina si existen o no dos
elementos en S cuya suma es exactamente x.
Solucion:
En primer lugar, odenamos los elementos del array usando un algoritmo de
ordenacin como el merge sort el cual se ejecuta en tiempo O(n lg n).
Despus podemos encontrar si dos que existen en S cuya suma es x. Para
cada elemento s[i] en S establecemos y=s[i]-x.
Ahora usamos la busqueda binaria, y averiguamos si el elemento y existe en
S. Si es asi devuelve a[i] y y, si no se encuentra y para cualquier s[i],
entonces devuelve que no existe ningun par de elementos.
Cada busqueda binaria toma tiempo O(lg n) y hay un n elementos a buscar.
Por lo tanto, el tiempo total para este procedimiento es de T(n) = (n lg n)
+(n lg n) donde el primer termino proviene de a ordenacin y el segundo
termino viene de realizar la busqueda binaria para cada uno de los n
elementos. Por lo tanto, el tiempo total de ejecucin es T(n) = (n lg n).
Un procedimiento alternativo para encontrar los dos elemntos de la matriz
ordenada es la siguiente:
SUM-TO-X(A)
1
Merge-Sort(S)
2
i1
3
j length(S)
4
while i = j
5
if S[i] + S[j] == x
6
return S[i], S[j]
7
if S[i] + S[j] < x
8
then i i + 1
9
if S[i] + S[j] > x
10
then j j - 1
Se ha establecido dos contadores en los dos extremos del array. Si su suma
es x, devuelve esos valores. Si la suma es menor a x, necesitamos una
suma grande por lo que incrementamos el contador de la parte inferior. Si la
suma es mayor que x, disminuimos en el contador superior. El bucle hace
}
Pregunta 2.
Un vector A[1n] se dice tener un elemento mayoritario si ms de la mitad
de sus entradas tienen el mismo valor. Por lo tanto, x es elemento
mayoritario de A si el nmero de ocurrencias de x en A es mayor a n/2. La
tarea es disear un algoritmo que, dado un vector con n entradas,
determine si hay un elemento mayoritario y, si fuese el caso, encontrarlo. El
consumo de tiempo de su algoritmo debe ser O(n lg n). Los elementos del
vector no son necesariamente de algn conjunto ordenado, como los
enteros, y no puede haber comparacin del tipo A[i] > A[j]?. Por tanto,
preguntas del tipo A[i] = A[j]? pueden ser respondidas en tiempo
constante.
Pregunta 3.
Para cada uno de los algoritmos abajo, escriba la recurrencia para el
consumo de tiempo en el peor caso y resulvala usando notacin asinttica.
1. Algoritmo A1 tiene como entrada una matriz n X n. El algoritmo
ejecuta 8 llamadas recursivas para matrices de tamao n/2 X n/2.
El consumo de tiempo del resto del procesamiento es dominado
por una llamada del algoritmo Strassen para multiplicar dos
matrices 3n X 3n. Esencialmente, a cada 8 llamadas recursivas es
hecha una llamada al algoritmo de Strassen. Ud. puede asumir
que n es potencia de 2.
2. Algoritmo A2 tiene como entrada una secuencia de n enteros. Este
algoritmo hace 3 llamadas recursivas, cada una de ellas para
secuencia de n/3 enteros. El consumo de tiempo del resto del
procesamiento es dominado por una llamada del algoritmo
mergesort para ordenar una secuencia de n enteros.
Esencialmente, a cada 3 llamadas recursivas es hecha una
llamada al algoritmo mergesort. Ud. puede asumir que n es
potencia de 3.
Pregunta 4.
Escriba un algoritmo SELECT(A, W, p, r, i) que recibe vectores A[pr] y
W[pr] de nmeros enteros positivos y un nmero entero i tal que
y devuelve el valor del i-simo menor