Busqueda binaria.

Iniciado por NetJava, 17 Marzo 2011, 21:00 PM

0 Miembros y 1 Visitante están viendo este tema.

NetJava

Buenas,

Estaba mejorando mis conocimientos, y de pronto he pensando en algoritmos de búsqueda. Es fácil encontrar ejemplos de ese tipo de búsqueda, pero si no los he entendido mal, es solo con números, se ordenan y demás... pero y si se busca por String, el algoritmo sirve¿? O tendría que clasificar por número de caracteres para hacer las particiones en la BD¿? jajaja se me acaba de ocurrir.


Saludos y gracias!

Valkyr

No se si te he entendido correctamente, pero si lo que quieres decir es: "¿Funciona correctamente la búsqueda binaria en un array de Strings?" Si esa es la cuestión te digo que si, y creo que no me equivoco, tan solo que a la hora de comparar los Strings tendrías que hacerlo con el método compareTo(String), el cual devuelve 0 si son iguales, menor que cero si es lexicográficamente menor y un número positivo si es mayor, por tanto en un array ordenado con Strings podrías realizar una búsqueda binaria perfectamente.

Espero que fuese eso si no...pues especifica un poco más y si puedo pues ayudo xD.

Saludos.

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String) por si quieres echarle un ojo  ;)

NetJava

Buenas,

Para explicarme mejor cuento mi caso. Tengo una base de datos en la que estoy metiendo palabras, haciendo un diccionario. Lo que hago es que una aplicación lea un archivo que contiene un libro, hace los filtros necesarios para limpiar caracteres que no quiero, y después coge las palabras y las mete en la BD comprobando primero si ya existen o no.

Bueno pues después de meter unos 10 libros, querría ordenar alfabéticamente las palabras para luego poder hacer búsquedas. Tu respuesta es lo que buscaba, no sabía que el método compareTo(String) podría resolver el problema. Muchas gracias.

Ahora me planteo que cuando yo ejecuto una query SELECT que tipo de búsqueda se realiza en una BD MySQL...¿? Para poder realizar una búsqueda binaria tendría que cargar en un array toda la tabla...
Creo que no me he planteado esto muy bien. Pero muchas gracias por que me has resuelto la duda.

Saludos!!

Tryptophan

Podes insertar ordenado sobre la Tabla. Me refiero a crear un cursor y fijarte donde meter la palabra para insertar ordenado, y después tirar la búsqueda binaria sobre la BD MySQL. Probablemente tengas una degradación en la performance de tu sistema al "pegarle" mucho a tu BD, pero por ahora no se me ocurre otra solución  :laugh: .

Saludos

NetJava

Buenas,

muchas gracias, estoy intentando perder el menor tiempo posible con los thread, el tema de la base de datos como esta ahora para ordenarla va a dar muchos problemas de tiempos, una vez que tenga el algoritmo para ordenar la base alfabéticamente. De todas formas a lo mejor (con el comentario anterior)  se puede solucionar, transpasando los datos de una tabla a otra, pero ordenandolos por medio del método  compareTo(String) y después insertando ordenadamente. A lo mejor eso si puede funcionar... aun que el tiempo será problemático.

Muchas gracias, saludos!!!

xopito

Quizá con otro método de comparación puedas solucionarlo, aunque digamos que viene a ser como compareTo:

Siendo b_pin una String, y datos una array de bytes,
si fuese una String datos también, en vez de poner datos, tendrías que poner
datos.charAt, que lo que hace es coger el carácter que hay en una posición determinada,


        for(int i=0;i<(b_pin.length());i++){
            if(b_pin.charAt(i)!= (char) datos){
                return false;
            }

NetJava

Buenas xopito,

estoy pensando si se podría hacer de esa manera, y cual sería mejor. Muchas gracias y saludos!!