martes, 20 de mayo de 2014

Recursividad

Recursividad 

1. Definicion: propiedad de las funciones (metodos) de autollamarse, se constituye una alternativa de los procesos iterativos (for, while, do while).

2. Utilidad: cuando el proceso o solucion iterativa es compleja.

3. Aplicaciones: recorrido de estructuras no lineales, en algunas formulas matematicas.

4.    Recursividad Vs Iteracion.
Recursividad
Iteración
métodos
ciclos
Reducción de código máxima
Reducción de código mínima
Lógica simple
Puede ser muy complejo
Considerable consumo de memoria
Consumo mínimo de memoria

Apreciacion importante y reflexion.

La recursividad consume mas memoria por que en cada autollamado hace una copia de toda la funcion y es guardada el la pila para llamado a subprogramas.

Tener muy en cuenta que siempre que se pueda usar un algoritmo no recursivo resultaria mejor ya que se ejecuta mas rapidamente y ocupa menos memoria ram 

Colas

Concepto: 
es una regla que se aplica a una estructura lineal (arreglos y listas enlazadas) para que tengan un comportamiento FIFO primer elemento en almacenarse , primero en procesarse. 

Utilidad:
siempre que los recursos de procesamiento sean menores a las demandas de su uso.

Aplicaciones:
cola de procesos, de impresión, de simulación.

Operaciones: 
  Poner, quitar, vacía, llena.

Implementación(arreglos,Nodo/ listas).

Implemetacion 

class ColaVector <T>
poner { fin ++;
             v [ fin ] = dato;
quitar { dato = v [ frente];
              frente ++;
vacía{ frente = = -1;
llena{ fin = = max - 1;

FUNCIONES DE COLAS 



COLAS CIRCULARES
Es una estructura de datos, donde los elementos se encuentran ubicados de manera circular o en forma de anillo (Gráfico).





Al momento de añadir un nuevo elemento, esto solo puede realizar por el primer elemento (indice 0) ya que es una posición distinguida. A continuación una gráfica que representa la alteración de una cola circular, al momento de añadir 3 elementos:



REFLEXIÓN

se obtuvo habilidad para realizar la clase ColaVector porque al conocer la clase pila se facilito la enseñanza de esta nueva estructura de datos, y conocer las operaciones básicas que en ella se utilizan.
 Las colas circulares permiten la insercion y eliminacion de elementos solo por su inicio, mientras que las bicolas lo permiten por ambos extremos y son direccionados  por 2 indices al momento de representarlo en un arreglo.




martes, 13 de mayo de 2014

Parcial Nº2

Copia De Una Pila















Segundo Punto

Aplicacion de Pila. Expresiones Aritmeticas

Aplicación de Pila. Expresiones Aritméticas


Una de las aplicaciones de pila son las expresiones aritméticas  estas facilitan la evaluación quitando paréntesis y ordenando el orden de operación según  prioridad al hacer la evaluación. Existen expresiones Aritméticas como:

infija: son las expresiones que tienen el operador en el medio.

prefija: son las que tienen el operadores antes.

posfija: son las que tienen el operadores después.

Ejemplos



Pilas y Colas



PILA



En la clase, aprendí sobre lo que era una pila, es una regla que se aplica a las estructuras de datos lineales, restringiendo sus operaciones a LIFO (Last In First Out ) ultimo elemento almacenado,  primero en ser procesado.

Utilidades: Es utilizado cuando se quiere invertir, retroceder en un proceso donde quedan tareas pendientes por completar.

Aplicaciones:  Llamadas a subprogramas, Evaluación de expresiones aritméticas, entre otras.
 Operaciones: Se dividen en dos grupos.
  Principales: operaciones como poner, quitar.
  Auxiliares: operaciones como cima,vacía,llena.

Implementacion de Pila.

1. Arreglos: Para realizar la implementacion de una pila por medio de arreglos es necesario definir tres variables las cuales son el vector de clase T (Genérico) y dos variables de clase int las cuales son el máximo y  tope. Se puede realizar operaciones como, poner, quitar, cima, vacía, llena. A continuación la clase PilaVector.

public class Pila <T>{
private T v[];
private int tope, max;
public Pila(){
max = 100;
v = (T[]) new Object[max];
tope = -1;
}
public Pila(int max){
this.max = max;
v = (T[]) new Object[max];
tope = -1;
}
public boolean vacia(){
return tope == -1;
}
public boolean llena(){
return tope == max-1;
}
public void poner(T dato){
if(!llena())
v[++tope] = dato;
else
System.out.println("La Pila Esta Llena");
}
public T quitar(){
T dato = null;
if(!vacia())
dato = v[tope--];
else
System.out.println("La Pila Esta Vacía");
return dato;
}
public T cima(){
if(!vacia())
return v[tope];
else
return null;
}


2. Nodos: Para la implementacion con Nodos se pueden realizar los siguientes métodos.

poner: tope = new Nodo(dato,tope);
quitar: dato = tope.getDato();
  tope= tope.getSig();
cima: dato=tope.getDato();
vacia: tope==null;


CLASE PilaVector y PilaNodo


Class PilaVector <T>
Poner {tope ++;
v[tope]= dato;
Quitar{ dato = v[tope];
        tope--;
Cima { dato =v[tope];
Vacia{tope ==-1;
Llena{tope=max -1;






Class PilaNodo
Poner {tope =new Nodo(dato,tope);
Quitar{ dato = tope.getDato();
        tope =tope.getSig();
Cima { dato =tope.getDato();
Vacia{tope ==null;












Apreciaciones importantes y reflexión: 

Aprendimos en la clase vista lo forma correcta de hacer que un vector se comporte como una pila, y resulta la clase mas funcional porque sirve para cualquier tipo de dato que se quiera guardar.