Autor
|
Tema: Busqueda binaria de un array desordenado (Leído 17,275 veces)
|
David_RM
Desconectado
Mensajes: 8
|
Necesito hacer un código que haga la busqueda binaria de un array no ordenado. Entiendo el código usual pero a la hora de discriminar entre los dos sub-arrays no se muy bien que hacer.
|
|
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
La búsqueda binaria la puedes aplicar cuando tienes una función de entrada (en tu caso un array) que es monótona. Si el array no está ordenado, una búsqueda binaria no es correcta por motivos evidentes si entiendes como funciona con un array ordenado. Si quieres buscar un elemento en concreto necesitarás hacer una búsqueda lineal.
|
|
|
En línea
|
|
|
|
David_RM
Desconectado
Mensajes: 8
|
El algoritmo lo que hacer es dividir recursivamente el array en dos partes iguales, hasta llegar al caso base que es que el array tenga un elemento
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola
Pero si el array no está ordenado qué criterio utilizas para dividirlo??
Saludos
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
David_RM
Desconectado
Mensajes: 8
|
Siempre en dos mitades iguales. Ejemplo: [5,7,8,3,4,9,1,3] se divide [5,7,8,3] y [4,9,1,3]. A su vez [5,7,8,3] se divide en [5,7] y [8,3]. [5,7] se divide en [5] y [7], con arrays de un elemento que es el caso base.
El problema es como implementar todo ese algoritmo en C.
|
|
|
En línea
|
|
|
|
Ruso_x
Desconectado
Mensajes: 5
|
La búsqueda binaria la puedes aplicar cuando tienes una función de entrada (en tu caso un array) que es monótona.
Como bien dijo ghastlyX hay que tener un array ordenado, el procedimiento el cual me enseñaron es hacer una ordenacion tipo Bubble, i cuando terminas puedes hacer la busqueda binaria, en otro caso la unica solucion es una busqueda lineal. Divides el array en 2 i compruebas si el elemento que busquas es > o < que el elemento que has utilizado para dividir el array EJ. Suponemos un array ordenado: 2245566789 i buscamos el 8 entonces primero 2245 /5/ 66789 el elemento top(numero de elementos/2) (el segundo 5) es el elemento que buscas?? => NO es menor o mayor? = menor entonces tiene que estar en el array de la derecha 66789 => 66 /7/ 89 es el elemento que buscas?? => NO es menor o mayor? = menor entonces tiene que estar mas a la derecha |8| / 9 es el elemnto que buscas?? => SI
|
|
« Última modificación: 11 Noviembre 2011, 14:23 pm por Ruso_x »
|
En línea
|
Saludos
|
|
|
LearningSpanishProgrammer
Desconectado
Mensajes: 67
|
Puedes hacer busqueda binaria en un arreglo desordenado!
Solo necesita crear un arreglo de índices y ordenalo usando el arreglo de valores.
|
|
|
En línea
|
Estoy aprendiendo español, y tu estas aprendiendo programación
|
|
|
David_RM
Desconectado
Mensajes: 8
|
Bueno, voy avanzando, ya tengo el código:
int buscaElemento(int n, const Vector v, int inf, int sup){ double res1; double res2; double res = -1.0;
if(sup-inf == 0){ if(v[inf] == n){ res = inf; } } else { res1 = buscaElemento(n, v, inf, sup-inf/2); res2 = buscaElemento(n, v, (sup-inf/2)+1, sup); }
if(res1 != -1.0){ res = res1; } else if(res2 != -1.0){ res = res2; }
return res; }
El problema ahora es que no funciona, se pilla el programa, supongo que será por las conversiones entre int y double no?
|
|
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
Como ya dije antes, si el array está desordenado, NO se puede hacer una búsqueda binaria, puesto que sería incorrecta. Si tienes que hacer una binaria por algún motivo, lo tendrás que ordenar antes.
Así que por mucho que lo intentes, el código es imposible que funcione sobre un vector desordenado.
|
|
|
En línea
|
|
|
|
Don Pollo
Desconectado
Mensajes: 74
/* No comments */
|
Realizar una búsqueda binaria en un array desordenado es totalmente absurdo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Busqueda Binaria Aplicada a las Blind SQL Injection
Nivel Web
|
OzX
|
0
|
3,711
|
10 Julio 2009, 05:06 am
por OzX
|
|
|
busqueda binaria
Programación C/C++
|
Sunshine66
|
3
|
4,676
|
6 Mayo 2010, 07:42 am
por Akai
|
|
|
Busqueda binaria con palabras
Programación C/C++
|
soez
|
0
|
3,146
|
3 Agosto 2010, 04:10 am
por soez
|
|
|
Busqueda binaria.
Java
|
NetJava
|
6
|
9,303
|
28 Marzo 2011, 18:20 pm
por NetJava
|
|
|
[C] Búsqueda binaria recursiva
Programación C/C++
|
BatchianoISpyxolo
|
3
|
19,454
|
29 Octubre 2012, 23:08 pm
por flony
|
|