elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  algoritmo kadane con divide y venceras?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: algoritmo kadane con divide y venceras?  (Leído 2,785 veces)
Tordur

Desconectado Desconectado

Mensajes: 8


Ver Perfil
algoritmo kadane con divide y venceras?
« en: 21 Octubre 2018, 13:02 pm »

Buenas,
tenia pensado intentar hacer el algoritmo de kadane para submatrices, pero solo lo he encontrado con programacion dinamica.

He intentado hacerlo de todos modos, pero me sigue sin salir, ya que por alguna razon el pivote que uso no lo termina cogiendo bien y no obtiene una matriz de maximo.

Os dejo el codigo por aqui:
https://pastebin.com/rspA8iWE
Código
  1. public static int maxSuma2D(int[][] matriz) {
  2.     //funcion para llamar al algoritmo    
  3. return maxSubarrayAux2D(matriz ,0 ,0 ,matriz.length-1 ,matriz[0].length-1 );
  4.    }
  5.  
  6. static int maxSubarrayAux2D(int[][] matriz, int i0, int j0, int iN, int jN){
  7. //fase dividir
  8. if(i0 >= iN || j0 >= jN){
  9. return matriz[i0][j0] ;
  10.        }
  11.        else{
  12.            int ik=(i0+iN)/2;
  13.            int jk=(j0+jN)/2;
  14.            int m1 = maxSubarrayAux2D(matriz, i0, j0, ik, jk);
  15.            int m2 = maxSubarrayAux2D(matriz, ik+1, j0, iN, jk);
  16.            int m3 = maxSubarrayAux2D(matriz, i0, jk+1, ik, jN);
  17.            int m4 = maxSubarrayAux2D(matriz, ik+1, jk+1, iN, jN);
  18.            int m5 = maxSubarrayCruzada2D(matriz, i0, j0, ik, jk, iN, jN);
  19.            return Math.max(m1,Math.max(m2,Math.max(m3,Math.max(m4,m5))));
  20.        }
  21.    }
  22.    static int maxSubarrayCruzada2D(int[][] matriz, int i0, int ik, int iN, int j0, int jk, int jN){
  23.        //fase conquistar
  24. int max = Integer.MIN_VALUE;
  25.        int suma = 0;
  26.        int suma2 = 0;
  27.        int suma3 = 0;
  28.        int suma4 = 0;
  29.        for (int i = ik; i >= i0; i--) {
  30.            for(int j = jk; j >= j0; j--) {
  31.                suma += matriz[i][j];
  32.                if (suma > max) max = suma;
  33.            }
  34.        }
  35.        for (int i = ik + 1; i <= iN; i++) {
  36.            for(int j = jk; j >= j0; j--) {
  37.                suma2 += matriz[i][j];
  38.                if (suma2 > max) max = suma2;
  39.            }
  40.        }
  41.        for (int i = ik; i >= i0; i--) {
  42.            for(int j = jk + 1; j <= jN; j++) {
  43.                suma3 += matriz[i][j];
  44.                if (suma3 > max) max = suma3;
  45.            }
  46.        }
  47.        for (int i = ik + 1; i <= iN; i++) {
  48.            for(int j = jk + 1; j <= jN; j++) {
  49.                suma4 += matriz[i][j];
  50.                if (suma4 > max) max = suma4;
  51.            }
  52.        }
  53.        max=suma;
  54.        if(suma + suma2 > max)max = suma + suma2;
  55.        if(suma + suma3 > max)max = suma + suma3;
  56.        if(suma2 + suma4 > max)max = suma2 + suma4;
  57.        if(suma3 + suma4 > max)max = suma3 + suma4;
  58.        if(suma + suma2 + suma3 + suma4 > max)max = suma + suma2 + suma3 + suma4;
  59.        return max;
  60.    }

Si alguien sabe como hacerlo, o que error tiene mi codigo lo agradeceria :D


En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: algoritmo kadane con divide y venceras?
« Respuesta #1 en: 21 Octubre 2018, 16:42 pm »

Aquí lo tienes en Java y en un par de lenguajes más, con su explicación paso a paso :

https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio de Divide y Venceras
Programación General
gian153 3 6,330 Último mensaje 30 Septiembre 2010, 02:30 am
por [L]ord [R]NA
Wikileaks se divide
Noticias
wolfbcn 1 2,281 Último mensaje 10 Noviembre 2010, 22:50 pm
por Draklit
Ayuda entender Divide y Venceras
Programación C/C++
fla2727 5 2,864 Último mensaje 18 Noviembre 2012, 19:19 pm
por fla2727
algoritmos divide y venceras
Programación C/C++
m@o_614 3 4,153 Último mensaje 16 Septiembre 2013, 21:29 pm
por ecfisa
ayuda con algoritmo divide and conquer
Java
++c 0 1,541 Último mensaje 29 Abril 2015, 00:47 am
por ++c
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines