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

URGENTE. Divide y vencerás

Estas en el tema de URGENTE. Divide y vencerás en el foro de Java en Foros del Web. Hola, tengo un array "Conjunto", de números ordenados de menor a mayor. Dado un número "X" tengo que buscar la posición "n" tal que: Conjunto(n) ...
  #1 (permalink)  
Antiguo 07/10/2010, 15:49
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
URGENTE. Divide y vencerás

Hola, tengo un array "Conjunto", de números ordenados de menor a mayor.

Dado un número "X" tengo que buscar la posición "n" tal que:

Conjunto(n) <= X <= Conjunto(n+1).

Para facilitar búsqueda, tengo que utilizar el método divide y vencerás.
Se cómo se utiliza y ya he hecho ejemplos, pero no consigo que me salga este ejercicio concreto.
Muchas gracias por la ayuda :)
  #2 (permalink)  
Antiguo 07/10/2010, 16:35
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: URGENTE. Divide y vencerás

Deberías explicar cómo lo has intentado (o poner el trozo de código) para que se te pueda dar una indicación, de lo contrario parece que estás pidiendo que alguien lo haga por ti.
  #3 (permalink)  
Antiguo 07/10/2010, 17:33
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: URGENTE. Divide y vencerás

Tengo un ArrayList de números ordenados --> "Conjunto"
Me piden, para un número "X", encontrar la posición "n" tal que:
Conjunto(n) <= X <= Conjunto(n+1)

Para simplificar el problema, resto "X" a cada uno de los elementos de "Conjunto" y lo guardo en "lista". Lo que tengo que buscar ahora en "lista", es la posición en la que se cambia de signo (de negativo a positivo), es decir:
la posicion "n" tal que:
Conjunto(n) <= 0 <= Conjunto(n+1)

Lo he planteado de la siguiente forma:

int posicion = 0; //por defecto, caso base

int inicio = 0;

int fin = lista.size()-1;

int mitad;

while(fin-inicio > 0);
{

mitad = (inicio+fin)/2 + 1;
float valor_mitad = (Float)lista.get(mitad);
if(valor_mitad == 0)
{
posicion = mitad;
break;
}

float valor_anterior = (Float)lista.get(mitad-1);

if (valor_mitad>0)
{
if (valor_anterior <= 0)
{
posicion = mitad-1;
break;
}

fin = mitad-1;

}

float valor_siguiente = (Float)lista.get(mitad+1);

if (valor_mitad<0)
{
if (valor_siguiente >= 0)
{
posicion = mitad;
break= 1;

}

inicio = mitad+1;

}


}



Sólo me aparece error de compilación en los break.
  #4 (permalink)  
Antiguo 07/10/2010, 17:39
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: URGENTE. Divide y vencerás

Y perdonen por no explicar nada más concreto inicialmente, soy novata aquí.
Muchas gracias a todos los que aporten algo o simplemente lean.
  #5 (permalink)  
Antiguo 08/10/2010, 03:33
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: URGENTE. Divide y vencerás

Cita:
break= 1
Eso no tiene sentido y es incorrecto, además de que el break te va a sacar del bucle, y eso no es lo que quieres hacer salvo que hayas encontrado la posición n.

http://rekkeb.wordpress.com/2009/04/...ak-y-continue/

Aparte de eso, las conversiones que haces a Float, aunque no te generan error, tampoco tiene sentido utilizarlas, deberías usar sólo int.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 10/10/2010, 13:32
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: URGENTE. Divide y vencerás

Gracias, me funcionó, el problema estaba en que se me había escapado un ";" después del while(). Y también he modificado lo que me has dicho. Muchas gracias :)

Etiquetas: Ninguno
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 08:49.