Sunteți pe pagina 1din 3

Universidad Nacional de San Agustín

Escuela Profesional de Ingeniería de Sistemas

ADA - Lab 01 - Introduction to Algorithms

Jheyson Z. López Rodríguez


22 de septiembre de 2019

1. Objetivos
Tener en cuenta que los algoritmos ya no son tiene por finalidad nada mas obtener la
solución al problema, si no ver cual es la manera mas eficiente de logralo, por ejemplo
teniendo en cuenta el factor tiempo y memoria.

2. Implementación

Algoritmo 1 Main
1 public s t a t i c void main ( S t r i n g [ ] a r g s ) {
2 l a b 0 1 abc = new l a b 0 1 ( ) ;
3 Scanner s c = new Scanner ( System . i n ) ;
4 System . out . p r i n t ( " b a s e : " ) ;
5 int base = sc . nextInt ( ) ;
6 System . out . p r i n t ( " i n d i c e : " ) ;
7 int i n d i c e = sc . nextInt ( ) ;
8 System . out . p r i n t ( abc . NthRootByBisection ( i n d i c e , base , 0 . 0 0 0 0 1 , 1 0 0 0 0 0 )
);
9 }

Linea 3-7: Se entra y se guardan los datos del índice y base.


Linea 8: Se imprime el resultado de la ejecución del método NthRootByBisection.

1
Observaciones:
Se puede observar que se envía 0.00001 como error mínimo y 100000 como iterador, estos
se pueden cambiar, pero yo he considerado poner estos valores para una mejor precision
del resultado.
Algoritmo 2 Function f
1 public double f ( double c , i n t x , double N) {
2 return Math . pow ( c ,N)−x ;
3 }

Este método sirve para comparar un dato de entrada elevado al indice, con la base.
Linea 1: Se recoje c(el dato de entrada), b(la base) y N(el indice).
Linea 2: Se realiza la operación ya antes explicada y se retorna el valor obtenido.

Algoritmo 3 NthRootByBisection
1 public double NthRootByBisection ( i n t N, i n t x , double e r r o r , i n t
iteration ){
2 int n = 1 ;
3 double a = 0 ;
4 double b = x ;
5 double c = 0 ;
6 while ( n<=i t e r a t i o n ) {
7 c=(a+b ) / 2 ;
8 i f ( f ( c , x ,N)==0 | | ( ( b−a ) / 2 )<e r r o r ) {
9 return c ;
10 }
11 n++;
12 i f ( f ( c , x ,N) <0){
13 a=c ;
14 } else
15 b=c ;
16 }
17 return c ;
18 }

Linea 1: Entran N(el indice), x(la base), el error maximo aceptado y el iterador, respec-
tivamente.
Linea 2: Se crea una varibale entera n y se inicializa en 1, este nos servira como bandera
y trabajara con el iterador.
Linea 3-5: Se crea las variables de tipo double a, b y c ; el a se inicializa en 0, b en el
valor de la base y c en 0.
Linea 6-15: En esta parte encontramos un bucle el que depende del iterador y n.
Dentro del bucle hacemos c igual a la semisuma de a y b, luego se comprueba si c es el
valor que buscamos, esto haciendo uso de la funcion f; si el número obtenido de f es 0 o la
semidiferencia entre b y a sea menor que el error. de cumplir alguna de esas condiciones,

2
saldremos del bucle y retornaremos el valor de c; de lo contrario, el iterador suma uno
mas y se comprueba si el valor obtenido por f es negativo o positivo, si es negativo quiere
decir tenemos un valor es menor al esperado, en consecuencia el valor que buscamos se
encuentra a la derecha, por ello se actualiza el valor de a con c, si se obtiene que f es
positivo entonces el valor buscado se encuentra en la izquierda y se actualiza el valor de
b con c.
Luego de ello se vuelve a analizar todo lo del bucle hasta que encontremos el valor que
cumpla la condicional del principio o se acabe toda la iteracion.

3. Preguntas
3.1. ¿Cuántas iteraciones necesitas? ¿Es un número fijo? Explique.
La función pricipal del iterador es hacer que nuestro algoritmo no sea infinito, este no
es un número en específico y se puede cambiar, pero se recomienda que sea grande para
que el resultado sea mas preciso.

3.2. ¿Qué lenguaje de programación escojiste y por que?


El lenguaje de programación que uso es Java y lo escojí por que me siento mas familiza-
rizado con el.

3.3. ¿Cuál es el costo promedio del algoritmo implementado?


¿Cuál es la unidad de medidad del costo?
El costo promedio del algoritmo es log(n); y la unidad de medida de este es el tamaño
de los datos de entrada.

3.4. ¿Existe una relación entre el costo de la teoría y el costo


de implementación?
De alguna manera si, aunque ambos tengan un enfoque distinto; pues uno se desarrolla
implementando el código en si y depende del hardware, mientras que el otro no lo hace
y es independiente ambos analizan el mismo algoritmo.

3.5. Encuentre otro algoritmo para resolver el problema de la


enésima raíz, explíquelo y haga una comparación entre
ambos.
El algoritmo consiste en buscar la enesima raiz, haciendo prueba y error(dentro de un
bucle, saldrá si es que es mayor o igual a la base), e incrementando un decimal muy
pequeño en cada error al número que buscamos; comenzando desde cero.
Este algoritmo es si es muy costoso, pues si el número deseado es mucho mayor, se
la pasara buscandolo de milesimas en milesimas(por ejemplo), en comparacion del otro
algoritmo que limita a los valores en los que se encuentra el número en cada iteracion.

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