Codigo java

la clave de pasar un algoritmo de recursivo a iterativo esta en definir una pila (aveces es mejor una cola) e iterar mietras la pila tenga contenido agregando resultados segun sea necesario en vez de llamadas recursibas, esto es basicamente asi aunke no es tan facil hacerlo como decirlo pero almenos te da una idea de por donde empezar, si aun no te keda claro pregunta acerca de esto....

ha, buscate aki, http://bochica.udea.edu.co/~rflorez/ es la pagina de estructuras de datos y algoritmos del profesor roberto florez de la U de A, alli te explican o podes preguntar mas.

Suere
 
Pilas y colas no es dificil, de hecho en una ocasion hice un trabajo en la escuela usando pilas , colas y listas (despues se subieron a arboles y todo es desma..) , pero este problemilla en particular esta bueno para pensarse y hacerlo sin recursion. Por ahi cuando tenga tiempo intentare hacerlo .. se ve bueno, mientras sigo con programitas chafitas de la escuela
 
Permutaciones recursivo e iterativo

He recopilado unos métodos en Java sobre permutaciones, tanto recursivamente como iterativamente, y otros relacionados con el orden que ocupa cada permutación, rank/unrank, que también dan juego. No utilizan estructuras de datos adicionales, se basan en el intercambio de valores dentro del propio array a permutar.

http://es.geocities.com/luisja80/esp/permutaciones.htm

También hay un par links intersantes al final del artículo.

Espero sea útil.

Hano (Luis Javier López Arredondo)
http://hardprogrammer.blogspot.com/
http://es.geocities.com/luisja80
 
Les envio un codigo de colas para ver si les puede ayudar en algo, esto lo que hace es ver que documento tiene prioridad para imprimirse, obviamente la impresion la hace en pantalla, ojala les sirva
import java.util.*;

public class Cola_Impresion {

Vector v = new Vector();

public boolean agregar(Object d) {

if(d instanceof Documento) {

Documento doc = (Documento) d;

if(v.size() == 0) {

v.addElement(doc);
return true;
}

Vector v_copia = (Vector) v.clone();
Iterator it = v_copia.iterator();

while(it.hasNext()) {

Documento doc_sig = (Documento) it.next();
if(doc.getPrioridad() < doc_sig.getPrioridad()) {

v.insertElementAt(doc,v.indexOf(doc_sig));
break;
}
else if(!it.hasNext()) {

v.addElement(doc);
}
}
}

return false;
}

public String toString() {

StringBuffer sb = new StringBuffer("Cola de Impresion (" + v.size() +" documentos)\n--------------------------------\n\n");
Iterator it = v.iterator();
while(it.hasNext()) {

sb.append(((Documento) it.next()).toString() + "\n");
}

return sb.toString();
}
}



public class Cola_Impresion_Main {
public Cola_Impresion_Main() {
}
public static void main(String[] args) {

Cola_Impresion ci=new Cola_Impresion();
ci.agregar(new Documento("Alexeyev Perea","docto.doc",3));
ci.agregar(new Documento("Galiz Lepe","docto.html",1));
ci.agregar(new Documento("Antonio Artaud","docto.pdf",2));
ci.agregar(new Documento("Arthur Rimbaud","docto.lwp",3));
ci.agregar(new Documento("Charles Baudelaire","docto.ec",1));

System.out.println(ci);
}


}
 
Hola LANeros...

Necesito que me colaboren con un ejercicio, es que no manejo lo de las clases en Java, orientenme y en cuanto les sea posible incluyan codigo:

Crear una una clase CuentaDeAhorros.
Usar una variable de clase static para almacenar la tasa de InterésAnual de cada ahorrador. Cada objeto de la clase contiene una variable de ejemplar private SaldoDeAhorros que indica la cantidad que el ahorrador tiene actualmente en depósito.
Calcular interes Anual.
Incluir un método static ModificarTasaInterés que asigne a InteresAnual un nuevo valor.
Escriba un programa que pruebe la clase CuentaDeAhorros.
Ejemplarice dos objetos CuentaDeAhorros, saver1 y saver2 con saldos de 200.000 y 300.000, respectivamente. Establezca InteresAnual en 4%, calcule los intereses mensuales e imprima los nuevos saldos para cada uno de los ahorradores. Luego cambie la tasa de interés anual al 5%, calcule los intereses del siguiente mes e imprima los nuevos saldos para cada uno de los ahorradores.


Por favor, colaborenme lo mas que puedan, es que de verdad no se manejar muy bien esto de las Clases...

Todo lo que me puedan decir me sirve bastantisimo

Por si acaso: gbarragan_77@hotmail.com
 
parecido al de Alex-Phoenix, pero un poco corregido. Si quieren que se almacenen en la estructura (ArrayList), descomenten la linea correspondiente dentro del metodo Permutacion.

Noten que el computador demora mucho mas tiempo mostrando las permutaciones que calculandola, y otra cosa a tener en cuenta es que si calculan una permutacion de mas de 9 elementos, no sera posible almacenarlas porque sobrepasa el tamaño del Heap de Java.

Asi tal y como esta, mostrara las permutaciones a medida que las va calculando.


Tambien hay un metodo para calcular las permutaciones de manera Iterativa, tambien se van mostrando a medida que se van calculando, aunque calcula las permutaciones rapido, tambien se demora por el tiempo que lleva mostrarlas.


PHP:
 import java.util.*;
  	
 
class Permutaciones  
{  
    public ArrayList permutacion, permutacionIt;
    
    public Permutaciones(){
    	permutacion = new ArrayList();
    	permutacionIt = new ArrayList();
    }
    
    public void Permutacion(String prefijo, String sufijo )  
    {  
        String nuevoPrefijo, nuevoSufijo;  
        int numDeCaracteres = sufijo.length(); 
 
        if( numDeCaracteres == 1) 
        {  
            //permutacion.add(new String(prefijo + sufijo));
            System.out.println(prefijo + sufijo); 
        }  
        else  
        {  
            for(int i = 0; i < numDeCaracteres; i++)  
            {  
                nuevoSufijo = sufijo.substring(1,numDeCaracteres);  
                nuevoPrefijo = prefijo + sufijo.charAt(0);  
        
                Permutacion(nuevoPrefijo,nuevoSufijo);  
                                                                             
                sufijo = nuevoSufijo + sufijo.charAt(0); 
            }  
        }  
     } 
     	
    
    public void PermutacionIterativo(char[] ps)
    {
    	//permutacionIt.add(new String(ps));
	    System.out.println(ps);
	    int n = ps.length;
	    char tmp = '0';
	
	    int[] indexes = new int[n];
	    for (int i=0; i<n-1; ) indexes[i] = ++i;
	
	    for (int i = n-2; i >= 0;) {
	      tmp = ps[indexes[i]];
	      ps[indexes[i]] = ps[i];
	      ps[i] = tmp;
	
	      indexes[i]++;
	      
	      //permutacionIt.add(new String(ps));
	      System.out.println(ps);
	
	      i = n-2;
	      while (i >= 0 && indexes[i] >= n) {
	        tmp = ps[i];
	        for (int k = i; k < n-1;)
	          ps[k] = ps[++k];
	        ps[n-1] = tmp;
	
	        indexes[i]=i+1;
	        i--;
	      }
	    }
	  }
    	

 
    public static void main (String args [])  
    {  
        Permutaciones palabra = new Permutaciones();  
        String cad = "0123456789";
        
 		
        /**********************************
         *         PARTE RECURSIVA        *
         **********************************/
         
        System.out.println("Permutaciones: "); 
        long inicioRe = System.currentTimeMillis();	 
        palabra.Permutacion("",cad);
        long finRe = System.currentTimeMillis();	;
        
        //for(int i=0;i<palabra.permutacion.size();i++){
        //	System.out.println((String)palabra.permutacion.get(i));
        //}
        
        
        
        /**********************************
         *         PARTE ITERATIVA        *
         **********************************/
           
        long inicioIt = System.currentTimeMillis();
        palabra.PermutacionIterativo(cad.toCharArray());
        long finIt = System.currentTimeMillis();
        
        //for(int i=0;i<palabra.permutacionIt.size();i++){
        //	System.out.println((String)palabra.permutacionIt.get(i));
        //}
        
        System.out.println("Tiempo total Iterativo: "+(finIt-inicioIt)+"ms");
        System.out.println("Tiempo total Recursivo: "+(finRe-inicioRe)+"ms");	
    }  

 }


Nota: No soy autor de ninguno de estos metodos, simplemente los saque de este mismo foro, pero opino que de esta manera sera mas sencillo encontrarlo para nuevos visitantes.


Saludos
 

Los últimos temas