Metodos de Rotacion
-
Upload
diego-rojas -
Category
Documents
-
view
250 -
download
2
Transcript of Metodos de Rotacion
-
7/24/2019 Metodos de Rotacion
1/20
ANALISIS DE ALGORITMOS
Divide y Vencers (Rotacin de una imagen)
Presentado Por:
Andrea del pilar castao Lpez
Diego Fernando Rojas Goyeneche
Presentado a:
Alonso Guevara Prez
Corporacin Universitaria Minuto de Dios
Bogot
19 de octubre de 2015
-
7/24/2019 Metodos de Rotacion
2/20
1. Introduccin
A travs del tiempo se han ido mejorando los mtodos para dar solucin a
cualquier problema de programacin, ya que hoy en da se brindan ms
herramientas que facilitan la solucin de estos; pero los algoritmos desde su
aparicin hasta el da de hoy son de vital importancia para el desarrollo de
cualquier aplicacin, nos brinda el dominio sobre la lgica de programacin para
resolver cualquier problema presentado.
El anlisis de complejidad de los algoritmos de rotacin nos brinda informacin
importante sobre cul de los utilizados es el ms adecuado segn sea el caso
presentado, para cada problema determinaremos una medida N de su tamao
(por nmero de datos) e intentaremos hallar respuestas en funcin de dicho N. El
concepto exacto que mide N depende de la naturaleza del problema. As, para un
vector se suele utilizar como N su longitud; para una matriz, el nmero de
elementos que la componen; para un grafo, puede ser el nmero de nodos (a
veces es ms importante considerar el nmero de arcos, dependiendo del tipo de
problema a resolver); en un fichero se suele usar el nmero de registros, etc.
En esta prctica se pretende validar la complejidad y el tiempo de ejecucin de los
algoritmos de rotacin, as verificando cul de estos es el ms complejo de
utilizar, el conlleva menos tiempo en ser ejecutado; por consiguiente brindado
informacin clara para demostrar en estos las diferentes caractersticas.
-
7/24/2019 Metodos de Rotacion
3/20
2. Planteamiento del Problema
Validar mediante la programacin de los tres algoritmos de rotacin su
complejidad y tiempos de ejecucin, se deben programar los tres en cualquier
lenguaje.
Implementar el algoritmo de rotacin de imgenes que emplea tcnica divide y
vencers.
Sea una imagen de tamao 2n x 2n, k >0 Rotar 90oen sentido de las agujas del
reloj (el eje de rotacin es el que pasa por el centro de la imagen)
Algoritmo Clsico de Rotacin.
Rotacin mediante divide y vencers.
Algoritmo Divide y vencers de rotacin.
-
7/24/2019 Metodos de Rotacion
4/20
3 Anlisis de los algoritmos de Rotacin
3.1 Algoritmo Clsico de Rotacin
El algoritmo clsico de rotacin se apoya en una matriz auxiliar para realizar este
proceso de rotacin.
Complejidad temporal ft=O (n2)
Algoritmo:
Desde i=0 hasta n-1
Desde j:=0 hasta n-1
ImagenRotada [i, j]:=imagen [n-j-1, i]
Fin desde
Fin desde
Tamao de la imagen Numero de asignaciones
Si k=5 2
5
t m o=32x32n=32 1.024
Si k=8 28tamao=256x256n=256 65.536
Si k=5 21 tamao=1 24x1 24n=1024 1.048.576
Si k=5 212 tamao=4 96x4 96n=4096 16.177.216
Complejidad espacial=fe=n2+ n2=O (2n2)
-
7/24/2019 Metodos de Rotacion
5/20
3.2 Rotacin mediante divide y vencers.
La idea bsica consiste en dividir la imagen de entrada en 4 subimagenes, y luego
se realiza una traslacin de cada subimagen para obtener la resultante.
El algoritmo es conocido cuando la imagen tiene tamao 2x2. En esta
circunstancia no se divide la imagen sino que simplemente se realiza la traslacin.
-
7/24/2019 Metodos de Rotacion
6/20
Algoritmo:
Z:=imagen [i1, j1]
Imagen [i1, j1]:=imagen [i1+1, j1]
Imagen [i1+1, j1]:= [i1+1, j1+1]`
Imagen [i1+1, j1+1]:= [i1+1, j1+1]
Imagen [i1, j1+1]:=z
Complejidad espacial: O (1)
3.3 Algoritmo Divide y vencers de rotacin
El Algoritmo de traslacin consistir en iterar para todos los puntos de la
subimagen superior izquierda, y en cada paso de iteracin se har:
Algoritmo:
-
7/24/2019 Metodos de Rotacion
7/20
Resultado que el algoritmo que rota la imagen mediante la tcnica divide y
vencers es:
Como se escribe originalmente: Rota90grados (0, 0, n, n, imagen, n)
(0,0): Coordenadas de la esquina superior izquierda.
(n-1, n-1): Coordenadas de la esquina inferior derecha
-
7/24/2019 Metodos de Rotacion
8/20
Es importante tener en cuenta las coordenadas de las subimagenes en que se
divide la imagen, de manera que , para el caso general, la funcin principal tiene
como parmetros de entrada (adems de la tabla de la imagen) las coordenadas
del pixel de la esquina superior izquierda: (i, j) y de la esquina inferior derecha ms
uno (i1,j1). El tamao de la tabla engloba a las cuatro es n.
El algoritmo tendr una ecuacin de recurrencia:
T(n)=4T(n/2)+c_1
Resolviendo por el mtodo maestro:
A=4, b = 2 y k =0
a> bkT(n) -- nlog4=n2
Ft: O (n2)
Se puede pensar que no tiene ventaja alguna, pero si se piensa en que su
complejidad espacial disminuye al no usar una matriz auxiliar y adems se puede
programar de manera paralela, su eficiencia es mayor frente al algoritmo clsico
de programacin.
Complejidad espacial = fe =n2=O (n2)
-
7/24/2019 Metodos de Rotacion
9/20
4. Implementacin de algoritmos
4.1 Algoritmo Clsico de Rotacin
El algoritmo clsico de rotacin se apoya en una matriz auxiliar para realizar este
proceso de rotacin.
Cdigo:
*//* Funcin encargada de rotar una imagen usando el algoritmo clsico*//*
Void rotacionClasica (BMP *imagenOriginal, BMP * imagenTratada) {
Int i;
Int j;
Int n = imagenOriginal->alto;
For (i = 0; i < n; i++) {
For (j = 0; j < n; j++) {
ImagenTratada->pixelR[i] [j] = imagenOriginal->pixelR
[n - j - 1] [i];
ImagenTratada->pixelB[i] [j] = imagenOriginal->pixelB
[n - j - 1] [i];
ImagenTratada->pixelG[i] [j] = imagenOriginal->pixelG
[n - j - 1] [i];
}
}
}
4.2 Rotacin mediante divide y vencers.
La idea bsica consiste en dividir la imagen de entrada en 4 subimagenes, y luego
se realiza una traslacin de cada subimagen para obtener la resultante
-
7/24/2019 Metodos de Rotacion
10/20
*//* Funcin encargada de rotar una imagen la cantidad de grados
especificada mediante el uso de un algoritmo con la tcnica divide y
vencers*//*
Void rota90GradosDivide (int i, int j, int i1, int j1, BMP *
imagen, int n) {
If (n > 1) {
rota90GradosDivide (i, j, (n / 2) + i, (n / 2) + j,
imagen, n / 2);
rota90GradosDivide (i + (n / 2), j, n + i, (n / 2) + j,
imagen, n / 2);
rota90GradosDivide (i + (n / 2), j + (n / 2), n + i, n +
j, imagen, n / 2);
rota90GradosDivide (i, j + (n / 2), (n / 2) + i, n + j,
imagen, n / 2);
}
Traslacion (i, j, i1, j1, imagen, n / 2);
}
4.3 Algoritmo Divide y vencers de rotacin.
La idea bsica consiste en dividir la imagen de entrada en 4 subimagenes, y luego
se realiza una traslacin de cada subimagen para obtener la resultante, el
Algoritmo de traslacin consistir en iterar para todos los puntos de la subimagen
superior izquierda
*//* Funcin encargada de rotar una imagen la cantidad de grados
especificada mediante el uso de un algoritmo con la tcnica divide y
vencers y adicional se utiliza el mtodo thread para acelerar su ejecucin*//*
Void rota90GradosDivideThreads (int i, int j, int i1, int j1, BMP
* imagen, int n) {
-
7/24/2019 Metodos de Rotacion
11/20
If (n > 1) {
Int matrices = 4;
// Comenzamos la
// reparticion de los subarreglos
pthread_t *thread;
Thread = malloc (matrices*sizeof (pthread_t));
// Creamos los auxiliares
BMPAux * c11 = (BMPAux *) malloc (sizeof (BMPAux));
(*c11).i = i;
(*c11).j = j;
(*c11).i1 = (n / 2) + i;
(*c11).j1 = (n / 2) + j;
(*c11).n = (n / 2);
(*c11).imagen = imagen;
BMPAux * c12 = (BMPAux *) malloc (sizeof(BMPAux));
(*c12).i = i + (n / 2);
(*c12).j = j;
(*c12).i1 = n + i;
(*c12).j1 = (n / 2) + j;
(*c12).n = (n / 2);
(*c12).imagen = imagen;
BMPAux * c21 = (BMPAux *) malloc (sizeof(BMPAux));
-
7/24/2019 Metodos de Rotacion
12/20
(*c21).i = i + (n / 2);
(*c21).j = j + (n / 2);
(*c21).i1 = n + i;
(*c21).j1 = n + j;
(*c21).n = (n / 2);
(*c21).imagen = imagen;
BMPAux * c22 = (BMPAux *) malloc (sizeof(BMPAux));
(*c22).i = i;
(*c22).j = j + (n / 2);
(*c22).i1 = (n / 2) + i;
(*c22).j1 = n + j;
(*c22).n = (n / 2);
(*c22).imagen = imagen;
// Creamos los hilos
If (pthread_create (&thread[0], NULL, ejecutaRotacion, (void
*)c11) != 0)
{
Perror ("El thread no pudo crearse [Arbol]\n");
Exit (-1);
}
If (pthread_create (&thread [1], NULL, ejecutaRotacion, (void
*) c12)! = 0)
{
Perror ("El thread no pudo crearse [Arbol]\n");
-
7/24/2019 Metodos de Rotacion
13/20
Exit (-1);
}
If (pthread_create (&thread [2], NULL, ejecutaRotacion, (void
*)c21) != 0)
{
Perror ("El thread no pudo crearse [Arbol]\n");
Exit (-1);
}
If (pthread_create (&thread [3], NULL, ejecutaRotacion, (void
*) c22)! = 0)
{
Perror ("El thread no pudo crearse [Arbol]\n");
Exit (-1);
}
// Esperamos a los hilos
Int i;
For (i=0; ipixelB, n);
-
7/24/2019 Metodos de Rotacion
14/20
RotacionBaseM (i, j, i1, j1, imagen->pixelR, n);
RotacionBaseM (i, j, i1, j1, imagen->pixelG, n);
Traslacion (i + 1, j, i1, j1, imagen, n);
}
}
Void traslacionM (int i, int j, int i1, int j1, unsigned char **
matriz, int n) {
If (i < i1 - n) {
RotacionBaseM (i, j, i1, j1, matriz, n);
TraslacionM (i + 1, j, i1, j1, matriz, n);
}
}
-
7/24/2019 Metodos de Rotacion
15/20
5. Actividades y Pruebas
5.10 La implementacin con n threads reduce el tiempo en 1/n vs. El algoritmo
DyV? Porque sucede esto?
El algoritmo reduce el tiempo de ejecucin en 1/n sobre el algoritmo de divide yvencers ya que este mtodo en java nos permite ejecutar varios procesos a la
vez, es decir de forma recurrente y por tanto nos permite realizar programas en
menos tiempo y ms eficientes. Por lo cual cuando lo utilizamos no estamos en
matriz auxiliar y estamos ejecutando el cdigo de manera paralela.
11. Preguntas:
1. Cul de los tres algoritmos es ms fcil de implementar?
El algoritmo ms fcil de implementar es el Algoritmo clsico de rotacin.
2. Cul de los tres algoritmos es ms difcil de implementar?
El algoritmo ms difcil de implementar es el de divide y vencers utilizando
theards.
3. Cul de los algoritmos tiene menor complejidad temporal?
El algoritmo con menor complejidad es el de el de divide y vencers utilizando
theards.
4. Cul algoritmo es ms rpido y porque?
El algoritmo de divide y vencers con threads reduce el tiempo de ejecucin en 1/n
sobre el algoritmo de divide y vencers ya que este mtodo en java nos permite
ejecutar varios procesos a la vez, es decir de forma recurrente y por tanto nos
permite realizar programas en menos tiempo y ms eficientes. Por lo cual cuando
lo utilizamos no estamos en matriz auxiliar y estamos ejecutando el cdigo demanera paralela.
5. El comportamiento experimental de los algoritmos era el esperado
porque?
-
7/24/2019 Metodos de Rotacion
16/20
Los algoritmos como se valid en el anlisis realizado se comportaron segn el
anlisis previo generado, ya que desde all se verifico que el algoritmo con menor
complejidad temporal es el algoritmo de divide y vencers con theards, y el de
mayor complejidad temporal es el algoritmo clsico de rotacin, donde se valida
que es el ms fcil de implementar por la sencillez del cdigo.
6. Sus resultados experimentales difieren mucho de los anlisis de otros
compaeros? a qu se debe?
Los resultados experimentales no difieren mucho de los anlisis realizados por
otros compaeros, ya que mediante la complejidad del algoritmo se puede validar
si este cuando se implementa en complejidad temporal cual va a ser el ms
demorado o el ms rpido, tambin por la validacin del cdigo se verifica el ms
complejo y el menos complejo; por ende la informacin no difiere mucho.
7. Existi un entorno controlado para realizar las pruebas? Cul fue?
No existi un entorno controlado.
8. Qu recomendaciones daran a nuevos equipos para realizar esta
prctica?
Cuando se va a realizar cualquier prctica es necesario conocer los fundamentos
de implementacin de un algoritmo de rotacin, adems de conocer elfuncionamiento de cada uno de los algoritmos que se implementan en el cdigo.
-
7/24/2019 Metodos de Rotacion
17/20
6. Problemas De implementacin
Cuando se implementa el cdigo existen problemas en las libreras de java, ya que
no reconoce en el cdigo unas libreras se valida que si se encuentran pero
eclipse el compilador asume que no estn por lo cual no se puede ejecutar el
cdigo en ese equipo y es necesario se ejecute en otro pc donde fue generado, no
se puede resolver el inconveniente; adicional se presentan inconvenientes con el
ingreso de la imagen al programa para que ejecute los mtodos, se puede
solucionar inconveniente.
-
7/24/2019 Metodos de Rotacion
18/20
7. Plataforma Experimental
Sistema operativo: Windows seven ultmate
Procesador:AMD turin
Memoria RAM: 3GB instalada
Disco Duro: 500 GB
Entorno: Eclipse-Netbeans Versin 8.0
-
7/24/2019 Metodos de Rotacion
19/20
Conclusiones
1. Cuando se ejecuta un algoritmo se valida a priori la eficiencia de estos, en el
caso de algoritmos de rotacin se valida la complejidad espacial antes de ejecutar
el programa, brindando as informacin vital para la realizacin de cualquier
programa ejecutando este cdigo.
2. A travs de la prctica se permite evidenciar que el algoritmo de divide y
vencers implementado con theards nos permite ejecutar el cdigo de manera
ms rpida y eficiente.
-
7/24/2019 Metodos de Rotacion
20/20
Bibliografa
1. Universidad del cauca
Anlisis de rendimiento de un algoritmoEn:http://sedici.unlp.edu.ar/bitstream/handle/10915/20756/Documento_
completo__.pdf?sequence=1
2 .La eficiencia de los algoritmos
Multitarea e Hilos en Java
En: http://jarroba.com/multitarea-e-hilos-en-java-con-ejemplos-thread-
runnable/
3. Algoritmo de Rotacion
Anlisis de Algoritmos de bsqueda
En: http://www.mediavida.com/foro/dev/ayuda-algoritmo-rotacion-
continua-453406