Documente Academic
Documente Profesional
Documente Cultură
UTN-FRT
MONOGRAFIA
Tema: Mtodos de Ordenamiento y Anlisis Algortmico
Materia: Algoritmo y Estructura de Datos
Integrantes:
- Martin, Rodrigo Alexander
- Martnez Roitman, Aldana Milena
- Mendez Utz, Pelayo Andrs
- Miranda Colletti, Franco Emmanuel
Comisin: 1K7
Fecha de Presentacin: 15 de Octubre de 2012
UTN-FRT
ndice
Introduccin
Anlisis de algoritmos
4-5
Orden de un algoritmo
5-7
Mtodos de ordenamiento
8-27
Seleccin
-
Algoritmo
Pseudocdigo
Ejemplo
Anlisis
8
9
10
11
Algoritmo
Pseudocdigo
Ejemplo
Optimizacin
Anlisis
12
13
13-14
14
15
Burbuja
-
Insercin o Baraja
-
Algoritmo
Pseudocdigo
Ejemplo
Anlisis
16
17
18
19
Rpido o QuickSort
-
Algoritmo
Pseudocdigo
Ejemplo
Anlisis
20-21
22
23-24
24-25
Mezcla o MergeSort
-
Algoritmo
Ejemplo
Anlisis
26
26
27
28
29
30
Introduccin
2
UTN-FRT
UTN-FRT
Qu es el Anlisis Algortmico?
Para desarrollar este punto, se debe tener en cuenta de que cada programador desea
escribir el algoritmo o programa lo ms eficaz posible para el problema que desea
resolver. Tal acercamiento nos conlleva a pensar: Qu hace que un algoritmo sea difcil
de ejecutar por un agente de cmputo?
Esto es lo que de forma intuitiva se define como complejidad computacional. Esto nos
lleva a definir criterios para medir la eficiencia de un algoritmo. Entendindose como
eficiente a un programa o algoritmo que minimiza los recursos que emplea el
computador para lograr la solucin del problema planteado, es decir, minimizar cierta
funcin de costo, por ejemplo; el tamao del programa, el nmero de pasos a ejecutar, la
economa de la memoria, la velocidad de ejecucin, la simplicidad de su
implementacin, etc.
Al hablar de complejidad computacional, es necesario dividir en dos conceptos para
entenderla mejor.
La complejidad esttica de un algoritmo, esta relacionada con la complejidad del
UTN-FRT
depende de la naturaleza del problema. As, para un vector se suele utilizar como N su
longitud; para una matriz, representa el nmero de elementos que la componen; para un
grafo, puede ser el nmero de nodos (a veces es mas importante considerar el nmero de
aristas, dependiendo del tipo de problema a resolver); en un fichero se suele usar el
nmero de registros, etc. Es imposible dar una regla general, pues cada problema tiene
su propia lgica de coste.
Orden de un Algoritmo
Un algoritmo de ordenamiento es un algoritmo que pone elementos de una lista o un
vector en una secuencia dada por una relacin de orden, es decir, el resultado de salida
ha de ser una permutacin o reordenamiento de la entrada que satisfaga la relacin
de orden dada. Los ordenamientos eficientes son importantes para optimizar el uso de
otros algoritmos que requieren listas ordenadas para una ejecucin rpida. Tambin es
til para poner datos en forma cannica y para generar resultados legibles por humanos.
Algunos algoritmos de ordenamiento son agrupados segn su estabilidad tomando en
cuenta la complejidad computacional. La complejidad del algoritmo no tiene que ver
con su dificultad, sino, con su rendimiento, que es una funcin independiente de la
implementacin.
Las funciones de complejidad algortmica ms habituales en las cuales el nico factor
del que dependen es el tamao de la muestra de entrada n, ordenadas de mayor a menor
eficiencia son:
O(1)
Orden constante
O(log n)
Orden logartmico
O(n)
Orden lineal
O(n log n)
Orden cuasi-lineal
O(n)
Orden cuadrtico
O(n)
Orden cbico
O(na)
Orden polinmico
O(2n)
Orden exponencial
O(n!)
Orden factorial
O(1) - Complejidad constante: Cuando las instrucciones se ejecutan una sola vez.
O(log n) - Complejidad logartmica: Esta suele aparecer en determinados algoritmos
UTN-FRT
O(n) - Complejidad lineal: Es una complejidad buena y tambin muy usual. Aparece
Otro aspecto a considerar es la diferencia entre el peor y el mejor caso. Cada algoritmo
se comporta de modo diferente de acuerdo a cmo se le entregue la informacin; por
eso es conveniente estudiar su comportamiento en casos extremos, como cuando los
datos estn prcticamente ordenados o muy desordenados.
UTN-FRT
Burbuja
Seleccin
Insercin o Baraja
Rpido o Quicksort
Mezcla o Mergesort
Tabla comparativa de algoritmos
Nombre
Ordenamiento Burbuja
O(n2)
Estable
O(n2)
No Estable
Estable
O(n )
O(n*log(n)) No Estable
Estable
log(n)
n
Mtodos de Ordenamiento
7
UTN-FRT
SELECCIN:
Pseudocdigo en C:
8
Tipo
UTN-FRT
Uso
Vector
Lista a ordenar
Orden
Entero
Entero
Entero
Menor
Entero
Aux
Ejemplo:
9
UTN-FRT
Analizando el Algoritmo:
10
UTN-FRT
Ventajas:
Fcil implementacin.
No requiere memoria adicional.
Realiza pocos intercambios.
Rendimiento constante: poca diferencia entre el peor y el mejor caso.
Desventajas:
Lento.
Realiza numerosas comparaciones.
BURBUJA
11
UTN-FRT
Pseudocdigo en C:
12
Tipo
UTN-FRT
Uso
Vector
Lista a ordenar
Orden
Entero
Entero
Entero
Aux
Ejemplo:
Tenemos 5 elementos. Es decir, Orden toma el valor 5.
43521
Comenzamos comparando el primero con el segundo elemento. 4 es mayor que 3, as
que se intercambian. Ahora tenemos:
3-4-5-2-1
Ahora comparamos el segundo con el tercero: 4 es menor que 5, as que no hacemos
nada. Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y
obtenemos:
3-4-2-5-1
13
UTN-FRT
Puede ser que los datos queden ordenados antes de completar el ciclo externo.
Podemos modificar el algoritmo para que verifique si se han realizado
intercambios. Si no se han hecho entonces terminamos con la ejecucin, pues
eso significa que los datos ya estn ordenados.
Analizando el Algoritmo
14
UTN-FRT
Ventajas:
Fcil implementacin.
Requerimientos mnimos de memoria.
Desventajas:
Lento.
Realiza numerosas comparaciones e intercambios.
Este es un algoritmo lento, pero puede ser de utilidad para listas que ya estn ordenadas
o semiordenadas, porque en ese caso realiza muy pocos desplazamientos.
INSERCION
15
UTN-FRT
Este algoritmo tambin es bastante sencillo. Tambin llamado baraja por simular el
ordenamiento que se hace durante un juego de cartas (se toman las cartas de a una y se
van comparando con las que ya tenemos ordenadas en la mano).
Para simular esto en un programa necesitamos tener en cuenta algo: no podemos
desplazar los elementos as como as o se perder un elemento. Lo que hacemos es
guardar una copia del elemento actual (que sera como la carta que tomamos) y
desplazar todos los elementos mayores hacia la derecha. Luego copiamos el elemento
guardado en la posicin del ltimo elemento que se desplaz.
Pseudocdigo en C:
16
Tipo
UTN-FRT
Uso
Vector
Lista a ordenar
Orden
Entero
Entero
Entero
Aux
Ejemplo:
17
UTN-FRT
Tenemos la lista:
4-3-5-2-1
Donde Aux toma el valor del segundo elemento, 3. La primera carta es el 4. Ahora
comparamos: 3 es menor que 4. Luego desplazamos el 4 una posicin a la derecha y
despus copiamos el 3 en su lugar.
4-4-5-2-1
3-4-5-2-1
El siguiente elemento es 5. Comparamos con 4. Es mayor que 4, as que no ocurren
intercambios.
Continuamos con el 2. Es menor que cinco: desplazamos el 5 una posicin a la derecha:
3-4-5-5-1
Comparamos con 4: es menor, as que desplazamos el 4 una posicin a la derecha:
3-4-4-5-1
Comparamos con 3, sigue siendo menor, por lo que desplazamos el 3 una posicin a la
derecha:
3-3-4-5-1
Finalmente copiamos el 2 en su posicin final:
2-3-4-5-1
El ltimo elemento a ordenar es el 1. Cinco es mayor que 1, as que lo desplazamos una
posicin a la derecha:
2-3-4-5-5
Continuando con el procedimiento la lista va quedando as:
2-3-4-4-5
2-3-3-4-5
2-2-3-4-5
1-2-3-45
Analizando el Algoritmo
18
UTN-FRT
Ventajas:
Fcil implementacin.
Requerimientos mnimos de memoria.
Desventajas:
Lento.
Realiza numerosas comparaciones.
En general es un algoritmo lento, pero puede llegar a ser uno de los ms rpidos para
listas con pocos elementos.
RPIDO O QUICKSORT
19
UTN-FRT
Nota.
Si se utilizan dos ndices, resultara una manera ms rpida y eficaz: i, al que
llamaremos contador por la izquierda, y j, al que llamaremos contador por la derecha.
El algoritmo es ste:
Cuando lista[i] sea mayor que el elemento de divisin y lista[j] sea menor, se
los intercambian.
Se repite esto hasta que se crucen los ndices.
20
UTN-FRT
21
UTN-FRT
Pseudocdigo en C:
Nombre
Tipo
Uso
Vector
Lista a ordenar
Orden
Entero
Entero
Entero
Primero
Entero
Ultimo
Entero
Central
Entero
Aux
22
UTN-FRT
Ejemplo:
Tenemos la lista:
5-3-7-6-2-1-4
Comenzamos con la lista completa. El elemento divisor ser el 4:
5-3-7-6-2-1-4
Comparamos con el 5 por la izquierda y el 1 por la derecha.
5-3-7-6-2-1-4
5 es mayor que cuatro y 1 es menor. Intercambiamos:
1-3-7-6-2-5-4
Avanzamos por la izquierda y la derecha:
1-3-7-6-2-5-4
3 es menor que 4: avanzamos por la izquierda. 2 es menor que 4: nos mantenemos ah.
1-3-7-6-2-5-4
Tomamos nuevamente por derecha e izquierda: 7 es mayor que 4 y 2 es menor, por lo
que intercambiamos.
1-3-2-6-7-5-4
Avanzamos por ambos lados:
1-3-2-6-7-5-4
En este momento termina el ciclo principal, porque los ndices se cruzaron. Ahora
intercambiamos Vector[i] con Vector[Ultimo]:
1-3-2-4-7-5-6
Aplicamos recursivamente a la sublista de la izquierda (ndices 0 - 2). Tenemos lo
siguiente:
1-3-2
1 es menor que 2: avanzamos por la izquierda. 3 es mayor: avanzamos por la derecha.
Como se intercambiaron los ndices termina el ciclo. Se intercambia Vector[i] con
Vector[Ultimo]:
1-2-3
23
UTN-FRT
Al llamar recursivamente para cada nueva sublista (Vector[0]-Vector[0] y Vector[2]Vector[2]) se retorna sin hacer cambios.
Segunda sublista: Vector[4]-Vector[6]
7-5-6
5-7-6
5-6-7
Para cada nueva sublista se retorna sin hacer cambios (se cruzan los ndices).
Finalmente, al retornar de la primera llamada se tiene la lista ordenada:
1-2-3-4-5-6-7
Tiempo de Ejecucin:
o Caso promedio. La complejidad para dividir una lista de n es O(n). Cada
sublista genera en promedio dos sublistas ms de largo n/2. Por lo tanto
la complejidad se define en forma recurrente como:
f(1) = 1
f(n) = n + 2 f(n/2)
La forma cerrada de esta expresin es:
f(n) = n log n
Es decir, la complejidad es O(n log n).
o
24
UTN-FRT
Ventajas:
Muy rpido
No requiere memoria adicional.
Desventajas:
25
UTN-FRT
MEZCLA O MERGESORT
UTN-FRT
1 2 3 4 5 6 8 10 - 22
Ventajas:
Desventajas:
27
UTN-FRT
28
UTN-FRT
Conclusin
En esta monografa se pudo observar que pueden existir muchas formas de resolver un
mismo problema. Y ver como cada una de estas formas de buscar solucin a ese
problema, y que cada una posee ciertas caractersticas que la hace til en relacin a las
formas que pueda tomar ese problema.
Tambin se observ como se puede medir la eficiencia de un algoritmo frente a las
formas que pueda tomar el problema. Tanto en el caso promedio como los casos
extremos. Adems de medir la eficiencia general de los algoritmos de ordenamiento
presentados.
29
UTN-FRT
Bibliografa
http://www.monografias.com/trabajos27/complejidad-algoritmica/complejidadalgoritmica.shtml
http://www.lab.dit.upm.es/~lprg/material/apuntes/o/index.html
http://es.wikipedia.org/wiki/An%C3%A1lisis_de_algoritmos
http://es.wikipedia.org/wiki/Complejidad_computacional
http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento
http://c.conclase.net/orden/
http://www.sw-engineering-candies.com/blog-1/tutorial-performance-impact-of-java-7hotspottm-to-quick-sort-heap-sort-and-bubble-sort-algorithm
30