elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Busqueda binaria de un array desordenado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Busqueda binaria de un array desordenado  (Leído 17,430 veces)
ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Busqueda binaria de un array desordenado
« Respuesta #20 en: 13 Noviembre 2011, 13:31 pm »

Pero eso no es búsqueda binaria, puesto que necesariamente tendrás que explorar en caso peor las dos mitades y tendrá complejidad lineal.

Una posible implementación de lo que te piden de forma algo cutre sería la siguiente:
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int busca(int x, vector<int>& v, int a, int b) {
  6.    if (a == b) return (v[a] == x) ? a : -1;
  7.    return max(busca(x, v, a, (a + b)/2), busca(x, v, (a + b)/2 + 1, b));
  8. }
  9.  
  10. int main() {
  11.    int n;
  12.    cin >> n;
  13.    vector<int> v(n);
  14.    for (int i = 0; i < n; ++i) cin >> v[i];
  15.    int x;
  16.    while (cin >> x) cout << busca(x, v, 0, n - 1) << endl;
  17. }

Y son dos líneas de código la función. Sin embargo, se podría optimizar la función, para que por ejemplo si la primera llamada recursiva encuentra el elemento, no haga la segunda llamada.


En línea

CobraCY

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Busqueda binaria de un array desordenado
« Respuesta #21 en: 13 Noviembre 2011, 16:55 pm »

Hace algún tiempo me dejaron lo mismo como un pequeño ejercicio y esta fue la solución que propuse:

Código
  1. int busqueda_binaria(int *a, int inicio, int fin, int val)
  2. {
  3. if(inicio==fin && a[inicio] != val)
  4. return -1;
  5. int t= fin/2;
  6. if(a[t] == val)
  7. return t;
  8. if(a[t] > val)
  9. return busqueda_binaria(a,inicio,t-1,val);
  10. else
  11. return busqueda_binaria(a,t+1,fin,val);
  12. }
  13.  

Como vez esto se puede mejorar para que funcione en menos lineas, pero eso ya te lo dejo de tarea para ti :).

Saludos.


En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Busqueda Binaria Aplicada a las Blind SQL Injection
Nivel Web
OzX 0 3,717 Último mensaje 10 Julio 2009, 05:06 am
por OzX
busqueda binaria
Programación C/C++
Sunshine66 3 4,732 Último mensaje 6 Mayo 2010, 07:42 am
por Akai
Busqueda binaria con palabras
Programación C/C++
soez 0 3,174 Último mensaje 3 Agosto 2010, 04:10 am
por soez
Busqueda binaria.
Java
NetJava 6 9,354 Último mensaje 28 Marzo 2011, 18:20 pm
por NetJava
[C] Búsqueda binaria recursiva
Programación C/C++
BatchianoISpyxolo 3 19,487 Último mensaje 29 Octubre 2012, 23:08 pm
por flony
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines