sábado, 5 de diciembre de 2009

investigaciones acerca de las listas en java

Como se utilizan las listas en java
Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la manipulación de muchos elementos. La lista es visible todo el tiempo, utilizándose una barra de desplazamiento para visualizar los elementos que no caben en el área que aparece en la pantalla.
Ejemplo
import java.awt.*;
import java.applet.Applet;

public class Lista extends Applet {

public void init() {
List l = new List( 4,false );

l.addItem( "Mercurio" );
l.addItem( "Venus" );
l.addItem( "Tierra" );
l.addItem( "Marte" );
l.addItem( "Jupiter" );
l.addItem( "Saturno" );
l.addItem( "Neptuno" );
l.addItem( "Urano" );
l.addItem( "Pluton" );
add( l );
}

public boolean action( Event evt,Object obj ) {
if( evt.target instanceof List )
System.out.println( "Entrada de la Lista: " + obj );

return true;
}
}


Recursividad y sus aplicaciones
La recursividad simplemente significa aplicar una función como parte de la definición de esa misma función.
La clave de funcionamiento es que obligatoriamente debe existir una condición terminal con el objeto de que la función se bifurque hacia una resolución no recursiva en algún punto. De lo contrario, la función entra en un bucle infinito y nunca finaliza.
Se dice que un método es recursivo si contiene llamadas o invocaciones así mismo.
Un método recursivo tendría este aspecto:
…metodoRecursivo (…){
……….
metodoRecursivo ()…;
…….
}
Esto implica que una llamada al método recursivo puede generar una o más invocaciones al mismo método, que a su vez genera otras invocaciones, y así sucesivamente.
Condiciones que debe cumplir todo método recursivo
Siempre hay que asegurar que existe una condición de salida, es decir, si se cumple esa condición, estaremos en el caso base, donde no se producen llamadas recursivas.
Ejemplo para un algoritmo recursivo del factorial:}
Casos solución
N=1 (caso base) return 1
n>1 return n*factorial(n-1)
Además, es conveniente comprobar que:
Entre el caso base y los casos no bases, se han cubierto todos los estados posibles.
Cada llamada, en el caso no base, conduce a problemas cada vez más pequeños que necesariamente terminaran en el caso base.
Cuando debe usarse la recursividad.
Ya que la solución recursiva tiene un coste de tiempo y memoria mayor que la iterativa. Es decir, los programas recursivos en general son menos eficientes. Podríamos utilizar los siguientes consejos:
Los algoritmos que por naturaleza son recursivos, y donde la solución iterativa es complicada y debe manejarse explícitamente un pila para enumerar las llamadas recursivas, deben resolverse por métodos recursivos.
Cuando haya una solución obvia por iteración al problema, debe evitarse la recursividad.
A continuación, se verá un ejemplo donde no debe utilizarse la recursividad, aunque la solución recursiva es muy sencilla y natural pero extremadamente ineficiente. La solución iterativa es mucho más eficiente aunque no tan trivial.
Calcular el termino n de la sucesión Fobonacci.
Fibonacci(n)=n, si n=0, o n=1;
Fibonacci(n)= Fibonacci(n-1)+ Fibonacci(n-2), si n>1
Programa:
Public int fib (int n){
If (n>1)
Return fib (n-1)+fib(n-2);
Else
Return n;
}
Es ineficiente comparado con el iterativa ya que cuando un numero n sea mayor que 1 invocara a la llamada dos veces lo cual implica mayor tiempo de ejecución y mas memoria.
los tipos de recursividad pueden ser simples (se llaman 1 sola ves en un mimso algoritmo), multiple (se llama 2 o mas veses en un mismo algoritmo)recursividad anidada (en algunos de los argumentos de la llamada recursiva hay una nueva llamada a si misma) y recursividad indirecta (la funcion se llama por medio de otra funcion)un ejemplo de recursivaidad simple puede ser la funcion factorial que lo que hace es si, el argumento es 4 el algoritmo ejecuta 4*3*2*1
Código:
public int Factorial( int n ) { if(n==0) { return(1); } return(n*Factorial(n-1));}
un ejemplo de recursividad multiple seria un algoritmo que calcule un numero de la serie fibonacci
Código:
public int Fibonacci( int n ) { if(n<=1) { return(1); } return(Fibonacci(n-1) + Fibonacci(n-2));}
un ejemplo de recursividad anidada seria la funcion de Ackermann
Ackerman



Esquema de un programa iterativo
El estilo de programacion mas habitual que solemos ver y/o programar se llama iterativa, los algoritmos son iterativos porque son algoritmos reiteraticos (while,for, do/while).un ejemplo del metodo factorial iterativo seria
Código:
Public int Factorial ( int n ) { int i, res=1; for(i=1; i<=n; i++ ) { res = res*i; } return(res);}

No hay comentarios:

Publicar un comentario