Divide y Venceras Análisis de Algoritmos

January 13, 2019 | Author: Ararage Kun | Category: Computer Programming, Areas Of Computer Science, Computer Science, Computer Engineering, Computing
Share Embed Donate


Short Description

Práctica sobre el análisis de Divide y venceras...

Description

 Análisis de  Algoritmos

Práctica 2: Divide y Vencerás Multiplicación de dos números binarios.  por  

ESCAMILLA CAMACHO JUAN EDUARDO PEREZ PEREZ JOSÉ RICARDO

Profesor DRA. GARCÍA MENDOZA CONSUELO VARINIA

TABLA DE CONTENIDO

INTRODUCCIÓN............................................................................................................... 2

DESARROLLO .............................................................................................................. 3 A)

TABLA .......................................................... ERROR ! BOOKMARK NOT DEFINED.

B)

GRÁFICA .................................................................. ........................................... 4

C)

CUESTIONARIO .................................................................................................... 4

CONCLUSIONES........................................................................................................... 5 ANEXOS .................................................................. ERROR ! BOOKMARK NOT DEFINED. A) MULTIPLICACIÓN BINARIA : MÉTODO TRADICIONAL ........... ERROR ! BOOKMARK NOT DEFINED. B) MULTIPLICACIÓN BINARIA : MÉTODO DE DIVIDE Y VENCERÁS . ... ERROR ! BOOKMARK NOT DEFINED. C) MULTIPLICACIÓN BINARIA : MÉTODO DE GAUSS. .ERROR ! BOOKMARK NOT DEFINED.

BIBLIOGRAFÍA ....................................................... ERROR ! BOOKMARK NOT DEFINED.

1

INTRODUCCION En la cultura popular, divide y vencerás  hace referencia a un refrán que implica resolver un problema difícil, dividiéndolo en partes m ás simples tantas veces como sea necesario, hasta que la resolución de las partes se torna obvia. La solución del problema principal se construye con las soluciones encontradas. En las ciencias de la computación, el término divide y vencerás (DYV) hace referencia a uno de los más importantes paradigmas de diseño algorítmico. El método está basado en la resolución recursiva de un problema dividiéndolo en dos o más sub-problemas de igual tipo o similar. El proceso continúa hasta que éstos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solución al problema original. Esta técnica es la base de los algoritmos eficientes para casi cualquier tipo de problema

como,

por

ejemplo, algoritmos

de

ordenamiento (quicksort, mergesort, entre muchos otros), multiplicar números grandes (Karatsuba), análisis sintácticos (análisis sintáctico top-down) y la transformada discreta de Fourier. Por otra parte, analizar y diseñar algoritmos de DyV son tareas que lleva tiempo dominar. Al igual que en la inducción, a veces es necesario sustituir el problema original por uno más complejo para conseguir realizar la recursión, y no hay un método sistemático de generalización. El nombre divide y vencerás también se aplica a veces a algoritmos que reducen cada problema a un único subproblema, como la búsqueda binaria para encontrar un elemento en una lista ordenada (o su equivalente en computación numérica, el algoritmo de bisección para búsqueda de raíces). Estos algoritmos pueden ser implementados más eficientemente que los algoritmos generales de “divide y vencerás”; en particular, si es usando

una serie de recursiones que lo convierten en simples bucles. Bajo esta ampl ia definición, sin embargo, cada algoritmo que usa recursión o bucles puede ser tomado como un algoritmo de “divide y vencerás”. El nombre decrementa y

vencerás ha sido propuesta para la subclase simple de problemas. La corrección de un algoritmo de “divide y vencerás”, está habitualmente probada una inducción matemática, y su coste computacional se determina resolviendo relaciones de recurrencia.

2

1|DESARROLLO

Implementa los siguientes algoritmos: Algoritmo 1. Multiplicación de dos números en base 2 por el método tradicional. Algoritmo 2. Multiplicación de dos números en base 2 con Divide y Vencerás a

sus

través de

mitades.

Algoritmo 3. Multiplicación de dos números en base 2 con Divide y Vencerás a

través de

mitades, utilizando el truco de Gauss para eliminar un producto.

A) TABLA DE COMPLEJIDAD

T(n) = n²+2n.

T(n) = C1*0n+ C2*n11n+ C3*n21n+ C4*n31n+ C5*n41n+ C6*n51n. T(n) = 4T(n/2)+C. T(n) = C1*4log 2(n) + C2*1log 2(n). T(n) = T(n)= 3T(n/2) + T(n) = C1*3log 2(n) + C. C2*1log 2(n). B) GRAFICA GRAFICA COMPLEJIDAD MULTIPLICACION DE NUMEROS BINARIOS  NORMAL

3

C) CUESTIONARIO

1. ¿La complejidad del algoritmo de la multiplicación por método tradicional disminuye al implementarlo con la con la estrategia de Divide y Vencerás? RESPUESTA: SI, DISMINUYE YA QUE SE HACE RECURSIVO ES DECIR QUE SE REALIZA CON MENOS CICLOS Y SE REDUCE POR QUE TIENE UNA FUNCIÓN EXCLUSIVA PARA DIVIDIR , 2. ¿La complejidad del algoritmo de la multiplicación con la estrategia de Divide y Vencerás es menor cuando se disminuyen las llamadas recursivas en cada nivel de recursividad, como se hizo con el truco de Gauss para disminuir una llamada recursiva? RESPUESTA: SI, PORQUE EN EL ALGORITMO DE DIVIDE Y VENCERAS NORMAL SE RALIZA 4 RAMAS DEL ABROL PARA LA DIVISION Y CON GAUSS SE DESMINUYE YA QUE DE 4 RAMAS SE OBTIENEN 3 RAMAS UNICAMENTE Y SE ELIMINA UN CICLO RECURSIVO Y POR CONISGUIENTE SE DISMINUYE LA COMPELJIDAD. 3. Analizando la gráfica indique para el cual, el algoritmo de menor complejidad se vuelve cota inferior de cada uno de los otros dos algoritmos. RESPUESTA:

PUES DESPUES DE ANILIZAR EL ALGORTIMO 3 DE DIVIDE Y VENCERAS CON EL METODO DE GAUSS SE VUELVE LA COTA INFERIOR DE LOS DEMAS ALGORITMOS 4. ¿Cuál es el código más sencillo? ¿Por qué lo considera más sencillo? RESPUESTA: PUES EL CÓDIGO MAS SENCILLO ES EL PRIMER OSEA, EL PROGRAMA DE MULTIPLICACION DE BINARIOS POR METODO TRADICIONAL YA QUE OCUPAMOS EL METODO DE PROGRAMACION A NIVEL DE BITS Y OCUPAMOS OPERACION DE COMPUERTAS LÓGICAS Y NO NECESITAMOS OCUAPAR UNA FUNCION DE CONVERSION DE BINARIO A DECIMAL ESTO SE SUSTITUYO

4

CON EL SIGNO DE CORRIMIENTO A LA IZQUIERDA “tm_mon+1 , fecha->tm_year+1900 ); system( "PAUSE" ); system("cls"); int w=0,i=0; char aux,aux_1[200]; system("cls"); system("COLOR 47");  printf( "\n\t **********************************************************\n" );  printf(" \n\n\t\t =P)\n\n\n",224 );

MULTIPLICACION DE BINARIOS (OJALA ESTE BIEN

 printf(" \n\n\t\t

META NUMEROS EN BINARIOS\n\n\n",214);

 printf("\t **********************************************************\n\n"); system("cls");  printf("COLOCA EL NUMERO BINARIO: \n\n"); scanf("%s",primernumero); system("cls");  printf("COLOCA EL NUMERO BINARIO: \n\n"); scanf("%s",segundonumero); system("cls"); //system ("pause");  printf("BIEN EL PRIMER NUMERO QUE INGRESASTE FUE: %s\n",primernumero);

7

 printf("BIEN EL SEGUNDO NUMERO QUE INGRESASTE FUE: %s\n\n",segundonumero); if(strlen(segundonumero)
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF