Recursividad

Iniciado por rjrn, 12 Febrero 2009, 04:28 AM

0 Miembros y 1 Visitante están viendo este tema.

rjrn

 :laugh:

Amerikano|Cls

No entendí, muy bien, explicate mejor, o pon algun ejemplo bien claro  ;)




Mi blog:
http://amerikanocls.blogspot.com

-Gosw-

#2
Cita de: rjrn en 12 Febrero 2009, 04:28 AM
Hola quisiera que me ayudaran con la siguiente asignacion: Dada una matriz NxN(n es par) de nros enteros, desarrollar un programa para determinar la submatriz cuyas suma de valores sea la mayor. Utilice la estrategia divide y venceras. La salida se debe mostrar por pantalla con la matriz original, la submatriz correspondiente y y el maximo valor de la suma de sus elementos. Si existiese mas de una solucion, estas deben mostrarse.  Les agradeceria mucho que me ayudaran :P

Bueno tengo un code basado en esa estrategia, es el metodo de ordenamiento mas avanzado, el quicksort... Aqui esta, en C, pero puedes tomar la idea e implementarla en Java...

Ordenamiento de arreglos por el método rápido (quicksort)

PROG0021 - C/C++ (Codigo)

El método rápido o quicksort, es el algoritmo para ordenamiento de arreglos más rápido que existe. Además, es matemáticamente demostrable, que no puede existir un método mejor. Se basa en el principio "divide y vencerás". Su implementación sin embargo, reviste complejidad, ya que se trata de un algoritmo recursivo por naturaleza.

CitarEl método rápido o quicksort, es el algoritmo para ordenamiento de arreglos más rápido que existe. Además, es matemáticamente demostrable, que no puede existir un método mejor. Se basa en el principio "divide y vencerás". Su implementación sin embargo, reviste complejidad, ya que se trata de un algoritmo recursivo por naturaleza.

void SortArray (int array[],int first,int last)
{
   int i,j,p,t;

   // i se hace igual al índice del primer elemento 
   i= first; 
   // y j igual al índice del último elemento
   j= last; 
   // p se hace igual al elemento pivote del arreglo
   p= array[(first+last)/2]; 

   do {
      // se hace la partición del arreglo
      while (array[i]<p) i++;
      while (p<array[j]) j--;
         if (i<=j)
         {
            // se intercambian los elementos i-esimo y j-esimo del arreglo
            t= array[i];
            array[i]= array[j];
            array[j]= t;
            i++;
            j--;
         }
   } while (i<=j);
   if (first<j) SortArray(array,first,j);
   if (i<last) SortArray(array,i,last);
}

http://www.megaupload.com/?d=QPSO2CJZ

Saludos y espero te sirva para lo que necesitas...

-Gosw-

Perdon, di a citar y no a editar... Borren esta...

Amerikano|Cls

Solo pon tu code dentro de la etiqueta code=java para que se resalten las instrucciones respectivas  ;)




Mi blog:
http://amerikanocls.blogspot.com

sapito169

tu enunciado no se entiende para nada

Amerikano|Cls

Y ahora te burlas de nosotros?  :huh: :-\ :¬¬




Mi blog:
http://amerikanocls.blogspot.com

-Gosw-

Cita de: AmeRiK@nO en 23 Febrero 2009, 18:53 PM
Y ahora te burlas de nosotros?  :huh: :-\ :¬¬

Que gente tan idiota... Alguien que borre este tema...

weirdtyping

no todavia no lo borren, tengo una duda de recursividad tambien, el ejercicio consiste en llenar un vector de 20 elementos de 0 y 1 al azar, tonces las operaciones que se deben hacer con recursividad son, contar los 1 y los 0, mostrar los datos, camiar los 0 por 2 y los 1 por 7, etc etc... tonces no entendi muy bien el concepto puesto que no me sale xDDD porfa diganme por que no funciona esto..

public String shoNum(int n){
        if(n == 20){
            return datos;
        }
        else{
            datos += arreglo[n]+"\n";
            return shoNum(n++);
        }
    }


es un pequenio tramo de mi codigo, segun esto me debe de guardar todos los datos que tenga el vector en "datos " y despues al final  mandarme "datos" ya con todo incluido, la verdad estoy un poco confundido con esto de recursividad. espero que me ayuden gracias