mvnForum Homepage Bienvenido domingo  |  Terminar sesión   
  Búsqueda  
  Indice |  Temas Recientes |  Quién Está en Línea |  Lista de Usuarios |  Mi Perfil |  Búsqueda |  Ayuda


Ir a »
Total de mensajes en este tema: 4 [Eliminar este Tema] [Mover este Tema]
[Ańadir a Mis Favoritos] [Ańadir un aviso a este tema] [Publicar nuevo tema]
Autor
Tema Anterior Este tema ha sido visto 50 veces y tiene 3 respuestas Tema Siguiente
Masculino amr
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 13
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Sesion4 Apartado 3.4 Responder a este mensaje
Responder citando
[Eliminar este Tema]

En el programa ArrayDemo3.java cuando busco un elemento en el vector siempre me devuelve negativo. Por ejemplo, si hago:

Arrays.binarySearch(vector,valor_encontrar), siendo:
vector=10,20,30,0,0,0,0,0,0,0. (10 posiciones) y
valor_encontrar=20.
Me devuelve -11, como si no lo encontrase y me dijese que el valor debería estar en la posición 11 en caso de encontrarse.

Lo curioso es que si el vector lo hago de 6 posiciones O MENOS, funciona perfectamente. Por ejemplo:

Arrays.binarySearch(vector,valor_encontrar), siendo:
vector=10,20,30,0,0,0. (6 posiciones) y
valor_encontrar=20.
Me devuelve 1.

confused

¡¡¿¿Como se explica esto??!!
[Jul 9, 2004 2:00:58 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino domingo
Miembro



Ingresó: Feb 1, 2004
Mensajes: 57
Estado: En línea

Adjuntar archivo   Editar este mensaje   Re: Sesion4 Apartado 3.4 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Primero, no llamemos vectores a los arrays. En Java un Vector es algo muy distinto a un array.

Cuando dices que el array tiene 10 posiciones y que tiene los valores {10,20,30,0,0,0..} los ceros ¿qué son? ¿números? ¿o posiciones que no has llenado? En ambos casos puede dar problemas: si son números, entonces el array está mal ordenado, los ceros deberían ir al principio. Por otro lado, si son posiciones que no has llenado, no sé si va a funcionar bien el algoritmo de búsqueda binaria.

Voy a hacer alguna prueba y te contesto algo. Puedes ir tú también probando algo por tu cuenta.

Domingo.
[Jul 9, 2004 5:16:36 PM] Print Post    domingo@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
Masculino amr
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 13
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Sesion4 Apartado 3.4 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Ya he solucionado el problema. El fallo estaba en que no tenía ordenado el vector. Con razón no funcionaba la busqueda binaria, tongue . No me había dado cuenta.

Gracias de todos modos.
[Jul 9, 2004 5:39:51 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Masculino domingo
Miembro



Ingresó: Feb 1, 2004
Mensajes: 57
Estado: En línea

Adjuntar archivo   Editar este mensaje   Re: Sesion4 Apartado 3.4 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Ya estoy de vuelta. Ya he hecho algunas pruebas. Copio un programa de ejemplo a continuación:
package modulo1.sesion4;
import java.util.Arrays;

public class ArrayDemo4 {
public static void main(String args[]) {
int miArray[] = new int[10];
//inicializo los dos primeros elementos
miArray[0] = 10;
miArray[1] = 20;
//el resto está inicializado a ceros
//ordeno mi array
Arrays.sort(miArray);
int slot = Arrays.binarySearch(miArray,20);
System.out.println("punto de insercion = " + slot);
}
}

Si ejecutas este programa, verás que el valor que devuelve slot es 9. Podemos sacar algunas conclusiones:

1. El array se inicializa a ceros y el algoritmo de ordenación ha puesto los ceros al principio del array.
2. El valor de slot es positivo. Eso es porque la búsqueda binaria ha encontrado el número 20 (slot es négativo sólo si el número no está en el array). IMPORTANTE: fíjate que slot en el código es el valor que devuelve directamente binarySearch, no es la expresión -(slot +1). Esta expresión sólo se usa cuando el valor devuelto es negativo, en el caso en que el número no está en el array. Y nos dice la posición donde debería ir el número.

Por cierto, para probar todo esto, nada mejor que el bean shell. Mira qué fácil es probarlo:
bsh % miArray = new int[10];
bsh % miArray[0] = 10;
bsh % miArray[1] = 20;
bsh % Arrays.sort(miArray);
bsh % print (Arrays.binarySearch(miArray,20));
9
bsh % print (Arrays.binarySearch(miArray,10));
8
bsh % print (Arrays.binarySearch(miArray,0));
4
bsh % print (miArray);
int []: {
0,
0,
0,
0,
0,
0,
0,
0,
10,
20,
}
bsh % print (Arrays.binarySearch(miArray,5));
-9
bsh %

Por cierto, fijaros si es "inteligente" la búsqueda binaria, que cuando le pedimos que busque el 0, nos devuelve 4, que es la posición del array que deja 4 ceros a la izquierda y 4 ceros a la derecha. smile (la verdad es que no sé cómo interpretar ese 4, si alguien se anima a investigarlo...).

Domingo.
[Jul 9, 2004 5:51:36 PM] Print Post    domingo@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
[Versión imprimible] [Publicar nuevo tema]