Este documento presenta un análisis de algoritmos de ordenamiento y búsqueda determinísticos y aleatorios. Incluye teoría sobre el Teorema Maestro y notaciones asintóticas para calcular tiempos de ejecución. Resuelve ejercicios aplicando estas herramientas y propone nuevos problemas sobre diseño de algoritmos por división y conquista.
1. Análisis de
Algoritmos
Pablo Vargas Boccanedes
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
2. TAREA 2
Guayaquil, Julio de 2009
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
3. Introducción
En esta sección analizaremos algoritmos de ordenamiento y
búsqueda, determinísticos y aleatorios, para lo cual calcularemos sus
tiempos de ejecución en función del tamaño de las instancias.
Entre los objetivos tenemos como más importante la
interpretación de los resultados y la comprensión de una mejor
manera los mismos, conocer el funcionamiento del Teorema
Maestro para la obtención de los tiempos de ejecución.
Otro de los objetivos importantes es presentar los métodos que
nos ayudarán a elegir entre algoritmos de diferente implementación
en función de nuestro medio, mediante el análisis de los tiempos de
ejecución y utilización de memoria que son principalmente los
limitantes en los ordenadores y equipos donde correrán dichos
algoritmos.
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
4. Teoría
Para la resolución de los problemas propuestos utilizaremos los
métodos Algebraico, Iterativo y del Teorema Maestro que consiste
sencillamente en aplicar las fórmulas para los casos en que sean
aplicables.
Los tiempos de ejecución serán expresados con Notaciones
Asintóticas, con lo cual tendremos referencias de la función del
tiempo de ejecución con otra conocida y ésta estará dada por su
comportamiento asintótico. Además de esta forma podemos
generalizar el tiempo de ejecución que ahora tendrá el mismo
comportamiento sobre cualquier sistema de cómputo en función de
las instancias.
El Teorema Maestro es aplicable a las funciones del tipo,
t(n)=at( ) + f(n)
є>0 f(n) єӨ( ) t(n) є Ө( )
f(n) є Ω( ) t(n) є Ө(f(n) )
є>0 f(n) єΩ( ) ^ n0 n≥ n0 c af( )≤cf(n) t(n) є Ө(f(n))
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
5. EJERCICIOS
Problema 1.- Discuta cualitativamente la diferencia entre el tiempo promedio de ejecución
de un algoritmo determinístico (tal como quicksort) y el tiempo esperado de un algoritmo
aleatorio (tal como quicksort aleatorio).
Solución:
Quicksort toma el primer elemento del conjunto, mientras que Quicksort Aleatorio
toma un pivote aleatorio dando la opción de tomar el del centro como pivote, esto ayudará a
un ordenamiento más rápido. Además sus tiempos de ejecución en promedio son, quicksort
Ө(nlgn), mientras que quicksort aleatorio se comporta como O(nlgn) lo que nos da
implícitamente la respuesta. Quicksort Aleatorio es más rápido que Quicksort.
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
6. Problema 2.- La ecuación de recurrencia t(n) = 7 t(n/2) + n2 describe el tiempo de
ejecución de un algoritmo A. Otro algoritmo A’ que resuelve el mismo problema tiene en
cambio la ecuación t(n) = at(n/4) + n2. ¿Cuál es el valor entero mayor que a puede tomar
para que el tiempo de ejecución de A’ sea asintóticamente más rápido que el de A?
Solución:
Utilizando el Teorema Maestro en ambas partes,
t(n)=7t( + n2 de aquí tenemos que a=7, b=2 y f(n)=n2
Propuesta, є>0 n2 O( )
D! є=3 n2 O( )
n2 O( ) como sabemos, esta expresión es verdadera.
t(n) Ө( )
Para la segunda parte,
t(n) = at(n/4) + n2
Propuesta, є>0 n2 O( )
Supongamos que esta expresión es verdadera. t(n) Ө(
Lo que plantea el ejercicio es lo siguiente O( ) entonces,
c,n0 n≥ n0 ≤
≤
≤
lg7 ≤
lg7 ≤ lg
7≤ a≥72
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
7. Problema 3.- Resuelva las siguientes ecuaciones de recurrencia utilizando el teorema
maestro. Justifique con claridad el uso de los varios casos.
t(n) = 9 t(n/3) + n2 + n/2 + 1
t(n) 5 t(n/2) + n2
t(n) = 12 T(n/4) + n2
Solución:
t(n) = 9 t(n/3) + n2 + n/2 + 1
a=9 b=3
f(n)= n2 + n/2 + 1
n2 + n/2 + 1 Ө( )
n2 + n/2 + 1 Ө (n2)
Aunque ya sabemos que esto es verdadero, lo vamos a demostrar:
c1,c2,n0 n≥ n0 c1 n2 ≤ n2 + n/2 + 1 ≤c2 n2
de aquí sabemos que esta expresión es válida con: c1=1; c2=2 ; n0=2
Por lo tanto el tiempo de ejecución t(n) Ө ((n2 + n/2 + 1)lgn)
t(n) Ө (n2lgn)
t(n) 5 t(n/2) + n2
a=5 b=2
f(n)= n2
n2 Ө (nlg5-є) si є=1
n2 Ө (n2) Sabemos que esto es verdadero y no lo vamos a demostrar.
Entonces el tiempo de ejecución en función de las instancias es t(n) Ө (nlg5)
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
8. t(n) = 12 t(n/4) + n2
a=12 b=4
f(n)= n2
n2 Ω( ) si
n2 Ω(n2) Sabemos que es verdadero por ser la misma función.
Ahora tenemos que comprobar la otra parte del teorema:
n0 n≥ n0 c 12 ≤c n2
n2≤c n2
≤c c=1
Dado que se cumplen ambas condiciones, podemos asegurar que t(n) Ө (n2)
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
9. Problema 4.- El tiempo de ejecución de la operación PARTICION sobre una secuencia de
tamaño n es teta(n); justifique esta afirmación.
Solución:
Si la partición ocurre desde el elemento de la segunda posición, de uno en uno,
tendremos (n-1) particiones y la operación partición se ejecuta en un tiempo, tenemos la
ecuación,
t(n)=1+ t(n-1) n
t(n)=1+1+t(n-2)
……………… 1 n-1
t(n)=1(n-1 veces)
t(n)= n-1 1 n-2
t(n) Ө(n) .. ..
. ..
D! c1,c2,n0 n≥ n0 c1n≤n-1≤c2n 1 1
c1= c2=1 n0=2 d!
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
10. Problema 7.- Los bancos registran las transacciones de una cuenta según el tiempo en que
estas ocurrieron, pero a la mayoría de las personas les gusta recibir sus estados de cuenta
con las transacciones listadas según el numero de cheque. Las personas normalmente giran
sus cheques en orden según el número de cheque, mientras que los beneficiarios los cobran
sin ningún orden particular. El problema de convertir de uno a otro ordenamiento es un
problema de ordenar una entrada que ya está casi ordenada. Se dice que el tiempo necesario
para realizar esta conversión por inserción es mejor que el obtenido por quicksort. ¿Qué
piensa usted? Discuta su respuesta.
Solución:
Dado que el número de cheques cobrados es menor o igual que el número de
cheques girados, y como los cheques girados están en orden, representarán más de la mitad
de la lista o registro del banco, por lo que el problema se reducirá a ordenar la mitad o
menos de elementos del registro equivalentes a los cheques cobrados.
Este algoritmo es más rápido que quicksort en este caso, porque la lista está casi ordenada y
las operaciones de intercambio que habrá que hacer son con los cheques cobrados. Si
hacemos con el algoritmo quicksort, este buscará un pivote y analizará por partes, aunque el
arreglo está casi ordenado, se harán las mismas comparaciones pero con más operaciones
de intercambio.
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
11. Problema 8.- Demuestre que el tiempo esperado para el algoritmo quicksort aleatorio es
Ω(n lg n).
Solución:
Dado que el algoritmo es aleatorio, el tiempo de ejecución estará dado por la suma
de los casos por donde ocurra la partición. Cada caso tiene tu propio tiempo de ejecución
dependiendo del lugar por el cual ocurre la partición.
t(n)=
Caso (rango) Caso (partición)
t(n)= (tp(n) + 1 0
2
t(n)= (Ө(n ) + +t(n-k)+…+1)
2 1
t(n)= (Ө(n2) + 2
3 2
t(k) O(klgk)
... ...
t(n)≤ (Ө(n2) + 2
n n-1
≤lg1+2lg2+..+(n-1)lg(n-1)
≤ (n-1)nlg(n-1)
t(n)≤ (Ө(n2) + 2
t(n) ≤ Ө(n) +(n-1)lg(n-1)
para grandes valores de n:
t(n) ≤ Ө(n) +(n)lg(n)
t(n) O(nlgn)
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
12. EJERCICIOS PROPUESTOS
Problema 9.- El algoritmo o método de Strassen se utiliza para multiplicar dos matrices
cuadradas de nxn en tiempos teta(nlg7); lo que representa una mejora considerable con
respecto al método que se usa tradicionalmente y que requiere tiempos teta(n3).
(Brevemente, el método consiste en dividir las matrices de nxn en matrices de (n/2)x(n/2),
calcular 7 matrices auxiliares y a partir de ellas encontrar las submatrices de la matriz
resultante) En este ejercicio haga lo siguiente:
a) Describa en qué consiste el método de Strassen. Ilustre el método con un ejemplo.
b) Explique por qué se dice que este es un algoritmo diseñado por división y conquista.
c) Demuestre que el método de Strassen es correcto
d) Encuentre la ecuación de recurrencia para calcular el tiempo de ejecución del
algoritmo.
e) Resuelva la ecuación obtenida en c).
Compare este resultado con el obtenido por el método convencional.
Problema 10.- Se quiere multiplicar dos numeros enteros muy grandes, cuyas representaciones requieren, por
ejemplo, 512 bits; el sistema de computo que tenemos esta limitado en cuanto a que la representacion y las
operaciones con numeros enteros deben hacerse con palabras de 64 bits. Diseñe por division y conquista un
metodo o algoritmo que permita realizar la multiplicacion de enteros de 512 bits en terminos de
multiplicaciones de palabras de 64 bits. Suponga que el tiempo para realizar sumas y desplazamientos de
palabras de 64 bits es teta(1). Siga los mismos pasos que en el ejercicio anterior.
Problema 11.- Se tienen un naipe de n cartas y se le pide a un voluntario que escoja una de las n cartas, cuya
identidad se mantendrá en secreto. Diseñe un metodo -similar al visto en clase- para encontrar dicha carta
“secreta” en tiempos teta(lg n). Considere que el tiempo para que el voluntario señale en que pila se
encuentra la carta es teta(1).
Problema 12.- En la industria de la construccion de semiconductores VLSI (very large scale integration) se
requiere probar millones de chips para detectar cuales estan defectuosos. La idea basica del metodo consiste
en hacer que los chips se prueben unos a otros; para ello se construye un dispositivo que reporta el estado del
par de chips instalado. Los chips buenos siempre dicen la verdad, es decir, reportan con exactitud si el chip
bajo prueba es bueno o malo; los chips malos no son confiables, es decir, dicen cualquier cosa sobre el otro.
Diseñe un metodo para identificar todos los chips buenos. El problema debe resolverse en tiempos O(n).
Suponga que el numero de chips buenos es mayor que el de chips malos, y que para efectos de calcular el
tiempo por cada chip que se prueba se cuenta 1.
Note que basta encontrar un chip que sea bueno para encontrar todos los demas que sean buenos en tiempos
lineales; asi que hay que encontrar un chip que sea bueno en tiempos O(n).
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.
13. CONCLUSIÓN
En esta tarea hemos revisado principalmente el método iterativo y el
Teorema Maestro para calcular nuestros tiempos de ejecución.
Destacamos la utilización de las definiciones de las notaciones
asintóticas para obtener resultados.
El nivel de dificultad de los ejercicios es mayor para esta tarea con
respecto a la anterior. El ejercicio más complicado al resolver fue el
numero 8 y se complica por el tema de las sumatorias y el árbol
recursivo.
Los ejercicios que no fueron resueltos y que los propongo son del 8
al 12, éstos incluirán un análisis mayor al cálculo de los tiempos de
ejecucíon.
Análisis de Algoritmos. Término I 2009. Ing. Carlos Jordán Autor: Pablo Vargas B.