Foros del Web » Programación para mayores de 30 ;) » Java »

Evaluacion de matriz en java. Modelo tumoral

Estas en el tema de Evaluacion de matriz en java. Modelo tumoral en el foro de Java en Foros del Web. Buenas, Estoy modelando un tumor utilizando java y ecuaciones matemáticas. Para ello utilizo el software EJS( easy java simulations), concebido para personas más interesadas en ...
  #1 (permalink)  
Antiguo 09/08/2014, 13:08
 
Fecha de Ingreso: agosto-2014
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 0
Pregunta Evaluacion de matriz en java. Modelo tumoral

Buenas,

Estoy modelando un tumor utilizando java y ecuaciones matemáticas. Para ello utilizo el software EJS( easy java simulations), concebido para personas más interesadas en el contenido del modelo que en los aspectos técnicos necesarios para la construcción del mismo. Aún así, me he encontrado con un problema:

El modelo se construye a partir de una matriz donde cada elemento i,j (denominado cells [ i ][j]) puede ser 0 ( célula sana) o 1( célula cancerígena). Una de las reglas que pretendo escribir en código es que cuando un elemento i,j tenga los siguientes 60 elementos de su izquierda con el valor de 1, ese elemento i,j cambie de valor a 3 (cellsN [ i ][j]=3)

Lo que he pensado ha sido lo siguiente:

for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (cells [ i ][j]==1) {
for (int it=0; it<=60 ; it++) {
if (cells[i+it][j]==1)
cellsN [ i ][j]=3;
}
}
}
}
El codigo esta mal, pero es una idea de como lo estoy escribiendo.
Lo que quiero es un código que me evalúe el valor de los 60 elementos a la izquierda del elemento en cuestión y si el valor de esos 60 elementos es 1, entonces el elemento en cuestión pasa a valer 3.

Gracias de antemano

PD: Si el elemento es cells[ i ][j], entonces el primer vecino a su izquierda es cells[i-1][j], el segundo vecino a su izquierda es cells[i-2][j], así sucesivamente
  #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: 12 años, 6 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

Etiquetas: evaluacion, matriz, modelo, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.