La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Búsqueda. Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y.

Presentaciones similares


Presentación del tema: "Búsqueda. Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y."— Transcripción de la presentación:

1 Búsqueda

2 Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y preguntar si es igual al elemento buscado Su orden de magnitud es en el peor de los casos O(n) siendo n el número de elementos del vector o de la lista. El peor caso se da cuando el elemento buscado no es encontrado

3 Búsqueda Secuencial #include #define tam 6 int b_s(int *v, int n, int dato) { int k=0; while(k<n && v[k]!= dato) k++; return k; }

4 void main(void) { int vec[tam]={1,3,6,2,5,9}; int indice = b_s(vec, tam, 55); if(indice == tam) cout << "El elemento no estaba"; else cout << "Está en la pos: " << indice << endl; } Búsqueda Secuencial

5 Búsqueda en un vector Ordenado Primera forma: Se va comparando el elemento buscado contra cada uno de los elementos del vector hasta hallarlo o encontrarse con uno mayor (o sea que no estaba) El algoritmo es el siguiente:

6 #include #define tam 6 int b_s_o(int *v, int n, int dato) { if(v[0] > dato) return 0; int k=1; while(v[k]<= dato && k<n) k++; return k-1; }

7 void main(void) { int vec[tam]={1,3,6,9,15,29}; int buscado=30; int indice = b_s_o(vec, tam, buscado); if(vec[indice]!= buscado) cout << "El elem. no estaba" << endl; else cout << "Posición: " << indice << endl; }

8 Segunda forma: Para acelerar el proceso de búsqueda se compara el elemento buscado X con el elemento ubicado en la mitad del arreglo V: Si V(m)=X: la búsqueda ha terminado Si V(m)<X: como todos los elementos a la izquierda de m son menores que X, se buscará ahora sólo en la zona derecha (desde m+1 hasta N). El proceso se repite V(m)>X: como todos los elementos a la derecha de m son mayores que X, se buscará ahora sólo en la zona izquierda (desde 1 hasta m-1). El proceso se repite

9 #include int binrec(int *v, int i, int j, int x) { int k; if(i==j) return i; k=(i+j+1)/2; if(v[k]==x) return k; if(x < v[k]) return binrec(v, i, k-1, x); else return binrec(v, k, j, x); } int busquedabin(int *v, int n, int x) { if((n==0)||(x < v[0])) return 0; return binrec(v, 0, n-1, x); }

10 void main(void) { int vec[10]={2,5,6,8,9,10,11,17,27,29}; int buscado=6; int indice = busquedabin(vec,10,buscado); if(vec[indice]==buscado) cout<<"Posición:" << indice <<endl; else cout <<"No estaba"<<endl; }

11 Hashing La idea del hashing es ejecutar alguna operación sobre el campo clave (el campo que permite identificar de manera única los diferentes elementos) y obtener un valor que es el índice del elemento en el vector (tabla) al que pertenece la clave La operación se denomina función hash o función de dispersión

12 colisiónEs posible que para dos claves diferentes se obtenga el mismo valor (índice) mediante la función hash, en este caso se presenta una colisión Las colisiones deben resolverse ya sea de manera abierta o cerrada (ver más adelante)

13 Los aspectos que hay que tener en cuenta en el hashing son: Elegir la función hash Resolver las colisiones Decidir el tamaño de la tabla

14 Función hash ejemplo: Método Clásico: h = clave mod T T es el tamaño de la tabla (vector) Método del Cociente Cuadrático para resolución de colisiones (hashing cerrado): i h = (residuo + cociente*i 2 + 1 ) mod T residuo y cociente son el resultado de aplicar la i función hash clásica e i es el número de veces que se ha aplicado la fórmula de resolución. Esta fórmula se aplica hasta encontrar una celda vacía…

15 Hashing CerradoHashing Cerrado: Cuando se presenta una colisión se busca en la tabla (vector) otra posición vacía para ubicar la clave Hashing AbiertoHashing Abierto: Todas las claves que comparten un mismo valor (índice) al aplicarles la función hashing forman una lista ligada

16 Suponga que se va a manejar un grupo de máximo 10 estudiantes, la clave es la cédula, supóngase estos 4 estudiantes: índice Ced: 71237689 mod 10 = 9 Ced: 43216785 mod 10 = 5 Ced: 73257663 mod 10 = 3 Ced: 43232195 mod 10 = 5 h = (5 + 4323219*1 2 + 1 ) mod 10 = 5 h = (5 + 4323219*2 2 + 1 ) mod 10 = 2 Colisión Continúa la colisión Se soluciona la colisión i

17 Hashing cerrado 4323 2195 7325 7663 4321 6785 7123 7689 0 12 5 6 7 8 3 49 Resolución de colisión

18 Hashing abierto 0 1 2 5 6 7 8 3 4 9 43216785 43232195 71237689 73257663 Lista ligada en cada índice para solucionar colisiones


Descargar ppt "Búsqueda. Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y."

Presentaciones similares


Anuncios Google