Sunteți pe pagina 1din 4

Arciniegas Bastidas, Rodolfo Alejandro

Pontificia Universidad Javeriana

Taller 1: Estructuras de Datos


31-07-2015

Exponencial:

Funcin exponencial: algoritmo recursivo rojo y algoritmo iterativo verde.

1. en la grfica se muestra el tiempo que toma a cada algoritmo resolver la funcin exponencial para 1 a
una potencia, en otras palabras hacer la multiplicacin 1*1*...*1, las veces que corresponda.
En la grfica se observa claramente que, si bien ambos algoritmos tienden a una recta y para
exponentes pequeos es similar el tiempo que toma, la recta que aproxima el algoritmo iterativo tiene
una pendiente notablemente inferior a la pendiente de la recta que aproxima el algoritmo recursivo,
tambin es importante notar que el algoritmo recursivo tiene puntos que estn muy por encima de la
recta en tanto que el algoritmo iterativo se desva muy poco de la recta que lo aproximara.
Dado que el recurso ms importante en ste caso es el tiempo y el algoritmo iterativo toma menos
tiempo (especialmente para valores muy grandes), puede decirse que aunque sean de la misma
complejidad (lineal), el algoritmo iterativo es ms eficiente que el recursivo y por lo tanto mejor.

2. Los dos algoritmos, al realizar un anlisis terico de su complejidad tienen complejidad lineal, O(n)
y en las grficas se constata esto ya que en las grficas es evidente que la mejor funcin para aproximar
cualquiera de las dos grficas es mediante una recta ya que el crecimiento es relativamente constante y
aunque cerca de 68000 hay un salto el crecimiento es lineal antes de ste y despus de ste punto y la
pendiente es muy similar antes y despus.
3. Esto se debe a que para 5 el resultado supera el mayor nmero permitido por el tipo de dato
double en c++, 5 es aproximadamente 8,8 * 10 y el mayor valor posible para un double en
c++ es de 1,7*10 aproximadamente, por otra parte 5 esta debajo del lmite.

Ordenamiento:

Ilustracin 1: Se muestran las 3 grficas de cantidad de elementos vs tiempo de ejecucin para los algoritmos burbuja (rojo),
quicksort(Verde) y heapsort(azul), con arreglos iniciales en diferentes condiciones (arriba aleatorio, abajo izquierda invertido
y abajo derecha ordenado).

1.
En las grficas anteriores es evidente que el algoritmo burbuja tiene un tiempo de
ejecucin que es independiente del estado inicial del arreglo y que siempre est por encima del
tiempo de los otros dos algoritmos analizados por lo que es claro que no es el mejor algoritmo
de ordenamiento.
Por otra parte heapsort tambin tiene un tiempo de ejecucin muy similar en los 3 casos y en
dos de stos el tiempo de ejecucin es notablemente inferior al tiempo de quicksort, pero, como
se ve en las grficas, quicksort es ms rpido cuando el arreglo inicial es aleatorio, esto permite
concluir que el mejor algoritmo de ordenamiento entre estas implementaciones de heapsort y
quicksort depende del arreglo inicial, si se sabe que el arreglo inicial siempre va a ser aleatorio
es mejor usar quicksort y por otra parte si hay posibilidad de que el arreglo inicial est ordenado
(especialmente si no est invertido), o que simplemente haya pocos valores fuera de su lugar,
resulta mucho ms eficiente el uso de heapsort.
2.
+ Quicksort: segn Wikipedia [qs], el algoritmo quicksort es de complejidad cuadrtica
para el peor caso O (n2), pero la complejidad promedio es de O(nlog(n)) y hay
formas de evitar el peor caso o reducir la posibilidad de que suceda incluso para
arreglos previamente ordenados.
+ Heapsort: Segn Wikipedia[hs] el algoritmo Heapsort tiene complejidad O(nlog(n)).
3.
+ Quicksort: en el punto anterior se dijo que quicksort tiene complejidad cuadrtica para
el peor caso (O (n2)), lo cual concuerda con las grficas en las que el arreglo
comienza ordenado, cuando el arreglo es aleatorio la curva no se alcanza a
apreciar pero debido a que est por debajo de la curva de heapsort podra decirse
que tiene la misma complejidad (O (nlog (n))) ya que segn Wikipedia quicksort
puede alcanzar complejidad lineal (O(n)) cuando se implementa usando 3
particiones, y en sta implementacin usa una particin simple, adems ese sera
el mejor caso que es inusual.
+ Heapsort: como se afirm anteriormente Heapsort tiene complejidad O(nlog(n)), esto
se ajusta a todos los casos ya que como se ve, la curva que corresponde a
heapsort siempre se aproxima por una funcin logartmica, esto es debido a que
la pendiente decrece a medida que el valor en x aumenta.
+ Burbuja: como se vio en clase ste algoritmo posee complejidad cuadrtica, lo cual se
ajusta muy bien a las curvas que evidentemente pueden aproximarse mediante
una parbola.
En conclusin podra decirse que el anlisis terico se ajusta al anlisis emprico de los
tres algoritmos.
Bibliografa:
- [qs] https://en.wikipedia.org/wiki/Quicksort
- [hs] https://en.wikipedia.org/wiki/Heapsort

S-ar putea să vă placă și