Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/08/2014, 13:13
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Evaluacion de matriz en java. Modelo tumoral

Una forma usando mas memoria con un vector auxiliar:
Código Java:
Ver original
  1. // Asuminos a cells como una matriz de integers, con n filas y m columnas.
  2. int[] acumulados = new int[n];
  3.  
  4. for(int col=0; col < m; col++)
  5. {
  6.     for(int fila=0; fila < n; fila++)
  7.     {
  8.         if(acumulados[fila] == 60)
  9.         {
  10.             cells[col][fila] = 3;
  11.             acumulados[fila] = 0;
  12.         }
  13.         else if(cells[col][fila] == 1)
  14.         {
  15.             acumulados[fila]++;
  16.         }
  17.         else
  18.         {
  19.             acumulados[fila] = 0;
  20.         }
  21.     }
  22. }

una forma que procesa mas pero sin consumir memoria extra:
Código Java:
Ver original
  1. // Asuminos a cells como una matriz de integers, con n filas y m columnas.
  2. for(int col=60; col < m; col++)
  3. {
  4.     for(int fila=0; fila < n; fila++)
  5.     {
  6.         boolean convertir = true;
  7.         for(int colaux = col; colaux >= (col-60); colaux--)
  8.         {
  9.             if(cells[colaux][fila] != 1)
  10.             {
  11.                 convertir = false;
  12.                 break;
  13.             }
  14.         }
  15.         if(convertir)
  16.         {
  17.             cells[col][fila] = 3;
  18.         }
  19.     }
  20. }

un mix entre ambas que usa un vector auxiliar en memoria para evitar procesar de mas:
Código Java:
Ver original
  1. // Asuminos a cells como una matriz de integers, con n filas y m columnas.
  2. int[] posiciones = new int[n];
  3. for(int col=60; col < m; col++)
  4. {
  5.     for(int fila=0; fila < n; fila++)
  6.     {
  7.         if(col-posiciones[fila] == 60)
  8.         {
  9.             boolean convertir = true;
  10.             for(int colaux = col; colaux >= (col-60); col--)
  11.             {
  12.                 if(cells[colaux][fila] != 1)
  13.                 {
  14.                     convertir = false;
  15.                     posiciones[fila] = colaux;
  16.                     break;
  17.                 }
  18.             }
  19.             if(convertir)
  20.             {
  21.                 cells[col][fila] = 3;
  22.                 posiciones[fila] = col;
  23.             }
  24.         }
  25.     }
  26. }

una variante del ultimo mix que logra el maximo rendimiento procesando solo lo minimo e indispensable:
Código Java:
Ver original
  1. // Asuminos a cells como una matriz de integers, con n filas y m columnas.
  2. int[] posiciones = new int[n];
  3. int col=60;
  4. while(col < m)
  5. {
  6.     int mincol = 60;
  7.     for(int fila=0; fila < n; fila++)
  8.     {
  9.         if(col-posiciones[fila] == 60)
  10.         {
  11.             boolean convertir = true;
  12.             for(int colaux = col; colaux >= (col-60); col--)
  13.             {
  14.                 if(cells[colaux][fila] != 1)
  15.                 {
  16.                     convertir = false;
  17.                     posiciones[fila] = colaux;
  18.                     break;
  19.                 }
  20.             }
  21.  
  22.             if(convertir)
  23.             {
  24.                 cells[col][fila] = 3;
  25.                 posiciones[fila] = col;
  26.             }
  27.         }
  28.  
  29.         if((posiciones[fila]-col+60) < mincol)
  30.             mincol = (posiciones[fila]-col+60);
  31.     }
  32.  
  33.        col += mincol;
  34. }

Cita:
concebido para personas más interesadas en el contenido del modelo que en los aspectos técnicos necesarios para la construcción del mismo
Para construir un modelo del la indole que sea, es necesario conocer a fondo las cuestiones tecnicas vinculados con su desarrollo.

Es como decir que vas a diseñar un rascacielos pero sin tener en cuenta las características técnicas de los materiales de construcción, pudes iniciar haciendo los cimientos con telgopor porque es economico, liviano, facil de transportar, se puede cortar en muchas formas y pega con cualquier pegamento, pero cuando pases los 4 metros de altura, el rascacielos se desarmara solo con el viento y no habra mas remedio que rehacerlo desde 0 usando los materiales apropiados ya que nada de lo anterior servirá de algo.

En programación es exactamente lo mismo, no puedes arrancar un modelo de cualquier indole diciendo "yo se lo que debe hacer, este simulador es facil de usar, listo, que lo haga todo el simulador, no me interesa lo tecnico" esta condenado directamente al fracaso desde el "vamos".

Un simulador, un framework, un lenguaje, es en programacion lo que una mezcladora electrica es a la construccion, cuanto mas grande, completa y facil de usar sea, ahorra tiempo y evitara estar con la pala armando la mezcla, pero hay que saber muy bien como usarlo y tener mucha idea de que componentes y en que proporcion usar y en que momento usarlos.

Tu querias resolver un problema con 10 lineas de codigo. Te mostre 2 soluciones breves que usan el doble de lineas y la mas compleja y eficiente usa mas de el triple.

De forma desinteresada te aconsejo que si no te interesa la parte tecnica, consigas a alguien que si la maneje bien para que te ayude
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 10/08/2014 a las 13:54