Your SlideShare is downloading. ×
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Algoritmos de busqueda
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Algoritmos de busqueda

195

Published on

Análisis de Algoritmos

Análisis de Algoritmos

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
195
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SEDE CONCEPCIÓN TALCAHUANO ALGORITMOS DE BUSQUEDA Asignatura Análisis de Algoritmos Integrantes: María Concha Jara Arthur Morales Ruiz Rodrigo Sepúlveda Castro Docente: Profesora Pilar Pardo H Fecha: 17 abril de 2014
  • 2. INDICE. 1. INTRODUCCION.............................................................................................. 3 2. ALGORITMOS DE BúSQUEDA ....................................................................... 4 2.1 Búsqueda lineal.......................................................................................... 4 2.2 Búsqueda binaria ....................................................................................... 8 2.3 Búsqueda mediante transformación de claves (Hashing) ........................ 10 2.3.1 Truncamiento..................................................................................... 10 2.3.2 Plegamiento....................................................................................... 11 2.3.3 Aritmética modular............................................................................. 12 2.3.4 Mitad cuadrado.................................................................................. 13 3. CONCLUSION............................................................................................. 14
  • 3. 1. INTRODUCCIÓN En este trabajo, se verán las técnicas de búsqueda Lineal, Binaria, Búsqueda mediante transformaciones de claves Hashing: Truncamiento, Plegamiento, Aritmética Modular y Mitad Cuadrado. En cada una se mencionan su descripción, sus ventajas y desventajas, y algunas aplicaciones de ellas. Algoritmo de búsqueda. Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento concreto dentro de una estructura de datos. Consiste en solucionar un problema de existencia o no de un elemento determinado en un conjunto finito de elementos, es decir, si el elemento en cuestión pertenece o no a dicho conjunto, además de su localización dentro de éste. Este problema puede reducirse a devolver la existencia de un número en un vector. Un algoritmo de búsqueda es un algoritmo que acepta un argumento a y trata de encontrar un registro cuya llave sea a. El algoritmo puede dar como resultado el registro entero o, lo que es más común, un apuntador a dicho registro. Si la búsqueda es infructuosa, con mucha frecuencia, es deseable agregar un nuevo registro con dicho argumento como llave. Un algoritmo que haga esto se le llama tabla búsqueda o diccionario.
  • 4. 2. ALGORITMOS DE BÚSQUEDA 2.1 Búsqueda lineal Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el o los elementos buscados, o hasta que se han mirado todos los elementos del array. Este es el método de búsqueda más lento, pero si nuestra información se encuentra completamente desordenada es el único que nos podrá ayudar a encontrar el dato que buscamos. El siguiente algoritmo ilustra un esquema de implementación del algoritmo de búsqueda secuencial: for(i=j=0;i<N;i++) if(array[i]==elemento) { solucion[j]=i; j++; } Este algoritmo se puede optimizar cuando el array está ordenado, en cuyo caso la condición de salida cambiaría a:
  • 5. for(i=j=0;array[i]<=elemento;i++) O cuando sólo interesa conocer la primera ocurrencia del elemento en el array: for(i=0;i<N;i++) if(array[i]==elemento) break; En este último caso, cuando sólo interesa la primera posición, se puede utilizar un centinela, esto es, dar a la posición siguiente al último elemento de array el valor del elemento, para estar seguro de que se encuentra el elemento, y no tener que comprobar a cada paso si seguimos buscando dentro de los límites del array: array[N]=elemento; for(i=0;;i++) if(array[i]==elemento) break; Si al acabar el bucle, i vale N esto indica que no se encontró el elemento. El número medio de comparaciones que hay que hacer antes de encontrar el elemento buscado es de (N+1)/2. Complejidad de la Búsqueda Lineal. (A) MEJOR CASO: El algoritmo de búsqueda lineal termina tan pronto como encuentra el elemento buscado en el array. Si tenemos suerte, puede ser que la primera posición examinada contenga el elemento que buscamos, en cuyo caso el algoritmo informará que tuvo éxito después de una sola comparación. Por tanto, la complejidad en este caso será O(1).
  • 6. (B) PEOR CASO: Sucede cuando encontramos X en la última posición del array. Como se requieren n ejecuciones del bucle mientras, la cantidad de tiempo es proporcional a la longitud del array n, más un cierto tiempo para realizar las instrucciones del bucle mientras y para la llamada al método. Por lo tanto, la cantidad de tiempo es de la forma an + b (instrucciones del mientras * tamaño del arreglo + llamada al método) para ciertas constantes a y b, que representan el coste del bucle mientras y el costo de llamar el método respectivamente. Representando esto en notación O, O(an+b) = O(n). (C) CASO MEDIO: Supongamos que cada elemento almacenado en el array es igualmente probable de ser buscado. La media puede calcularse tomando el tiempo total de encontrar todos los elementos y dividiéndolo por n: Total = a (1 + 2 + ...+n) + bn = a (n(n+1) / 2) + bn, a representa el costo constante asociado a la ejecución del ciclo y b el costo constante asociado a la evaluación de la condición. 1, 2 , ..n, representan el costo de encontrar el elemento en la primera, segunda, ..., enésima posición dentro del arreglo. Media = (Total / n) = a((n+1) / 2) + b que es O(n). Este es el algoritmo de más simple implementación pero no el más efectivo. En el peor de los casos se recorre el array completo y el valor no se encuentra o se recorre el array completo si el valor buscado está en la última posición del array. La ventaja es su implementación sencilla y rápida, la desventaja, su ineficiencia. La búsqueda lineal probablemente es sencilla de implementar e intuitiva. Básicamente consiste en buscar de manera secuencial un elemento, es decir, preguntar si el elemento buscado es igual al primero, segundo, tercero y así sucesivamente hasta encontrar el deseado. Entonces este algoritmo tiene una complejidad de O(n).
  • 7. Ventajas de la técnica.  Es el algoritmo más simple de búsqueda y no requiere ningún proceso previo de la tabla, ni ningún conocimiento sobre la distribución de las llaves. La búsqueda secuencial es el área del problema donde previamente existían mejores algoritmos.  Es el mejor método de búsqueda para registros desordenados y revisa nodo por nodo sin brincar ninguno ( es muy seguro) Desventajas de la técnica.  Este método de búsqueda es muy lento, pero si los datos no están en orden es el único método que puede emplearse para hacer las búsquedas. Si los valores de la llave no son únicos, para encontrar todos los registros con una llave particular, se requiere buscar en toda la lista.  Si los registros a los que se accede con frecuencia no están al principio del archivo, la cantidad promedio de comparaciones aumenta notablemente dado que se requiere más tiempo para recuperar dichos registros.
  • 8. 2.2 Búsqueda binaria Si los elementos sobre los que se realiza la búsqueda están ordenados, entonces podemos utilizar un algoritmo de búsqueda mucho más rápido que el secuencial, la búsqueda binaria. El algoritmo consiste en reducir paulatinamente el ámbito de búsqueda a la mitad de los elementos, basándose en comparar el elemento a buscar con el elemento que se encuentra en la mitad del intervalo y en base a esta comparación:  Si el elemento buscado es menor que el elemento medio, entonces sabemos que el elemento está en la mitad inferior de la tabla.  Si es mayor es porque el elemento está en la mitad superior.  Si es igual se finaliza con éxito la búsqueda ya que se ha encontrado el elemento. Ejemplo:
  • 9. Mejor caso: La búsqueda binaria requiere solo una comparación; esto significa que su tiempo de ejecución óptimo no depende de la cantidad de datos. El esfuerzo mínimo es 1. Caso promedio: El promedio 1/2log2n. Peor caso: El algoritmo de búsqueda binaria progresivamente va disminuyendo el número de elementos sobre el que se realiza la búsqueda a la mitad. Así, tras log2n divisiones se habrá localizado el elemento o se tendrá la seguridad de que no estaba. El esfuerzo máximo para este algoritmo es log2n. Ventajas • La búsqueda binaria es un método eficiente siempre que el vector esté ordenado. • La búsqueda binaria proporciona un medio para reducir el tiempo requerido para buscar en una lista. • Es más rápido por su recursividad, su mayor ventaja es con los archivos extensos. • El código del procedimiento de esta búsqueda es corto en comparación con las demás técnicas de búsqueda. Desventajas • El archivo debe estar ordenado y el almacenamiento de un archivo ordenado suele plantear problemas en las inserciones y eliminaciones de elementos. • No revisa todos los elementos del archivo, requiere que todos los elementos estén ordenados.
  • 10. 2.3 Búsqueda mediante transformación de claves (Hashing) 2.3.1 Truncamiento Este método ignora parte de la clave y se deja la parte restante como índice. Para el caso de que la clave sea de 8 dígitos y tenga 1000 posiciones, entonces se toma el 1°,2° y 5° digito de izquierda a derecha. Ejemplos: Vector: 1000 posiciones Tamaño clave: 8 Elementos: 1,2 y 5 N° Elementos Clave H(clave)= 481 Ventajas:  Permite en aumentar la velocidad de búsqueda sin necesidad de tener los elementos ordenados.  Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar  Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones  No se requiere almacenamiento adicional para los índices. Desventajas:  No pueden usarse registros de longitud variable  No permite llaves repetidas  Solo permite acceso por una sola llave  Tiempo de procesamiento requerido para la aplicación de la función hash es elevado  Se necesita dominio en técnicas usadas para resolver las colisiones. 0 1 2 3 4 5 6 7 7 4 8 7 2 1 9 5
  • 11. 2.3.2 Plegamiento Consiste en dividir la clave en diferentes partes y combinarlas para obtener el índice. Todas las partes a excepción de la última debe obtener el mismo número de dígitos que el tamaño del vector. Vector: 100 posiciones Clave: 52136984 H(clave)= 521+369+84 H(clave)= 974 974 = 74 Ventajas:  Permite en aumentar la velocidad de búsqueda sin necesidad de tener los elementos ordenados.  Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar  Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones  No se requiere almacenamiento adicional para los índices. Desventajas:  No pueden usarse registros de longitud variable  No permite llaves repetidas  Solo permite acceso por una sola llave  Tiempo de procesamiento requerido para la aplicación de la función hash es elevado  Se necesita dominio en técnicas usadas para resolver las colisiones. 521 369 84 Se trunca
  • 12. 2.3.3 Aritmética modular Consiste en dividir la clave por el número de posiciones del vector donde el resultado es el resto de la división. H(x)= x MOD m x= clave m= tamaño del arreglo Ejemplo: Vector: 100 posiciones Clave: 43276581 H(clave)=43276581 MOD 100 H(clave)=8 Ventajas:  Permite en aumentar la velocidad de búsqueda sin necesidad de tener los elementos ordenados.  Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar  Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones  No se requiere almacenamiento adicional para los índices. Desventajas:  No pueden usarse registros de longitud variable  No permite llaves repetidas  Solo permite acceso por una sola llave  Tiempo de procesamiento requerido para la aplicación de la función hash es elevado  Se necesita dominio en técnicas usadas para resolver las colisiones.
  • 13. 2.3.4 Mitad cuadrado Consiste en calcular el cuadrado de la clave y tomar los dígitos centrales de este resultado. H(x)=X^2 x= clave Ejemplo: Vector: 100 posiciones Clave: 5478 H(clave)=5478 * 5478 N° Elementos Clave Elementos centrales =3 y 4 H(clave)= 08 Ventajas:  Permite en aumentar la velocidad de búsqueda sin necesidad de tener los elementos ordenados.  Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar  Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones  No se requiere almacenamiento adicional para los índices. Desventajas:  No pueden usarse registros de longitud variable  No permite llaves repetidas  Solo permite acceso por una sola llave  Tiempo de procesamiento requerido para la aplicación de la función hash es elevado  Se necesita dominio en técnicas usadas para resolver las colisiones. 0 1 2 3 4 5 6 7 3 0 0 0 8 4 8 4
  • 14. 3. CONCLUSION Como la búsqueda binaria que es la más rápida, pero que a su vez no sirve si los elementos del arreglo no están acomodados en orden ascendente al contrario de la Secuencial que a pesar de que es más lenta trabaja aunque los elementos estén revueltos. Para elegir una función de hashing, entonces, hay que tomar en cuenta:  Rango o espacio de direcciones  Tipo de clave (alfanumérica o numérica)  Semántica de la clave (cómo se presente la clave, simple o compuesta y variabilidad de sus valores) La idea es seleccionar una función que permita obtener una distribución con el mayor grado de uniformidad posible para evitar colisiones. Nosotros concluimos que ningún tipo de búsqueda es mala y a la vez ninguna es buena, ya que depende el uso dado, así es como se demuestra en qué casos es mejor una que otra.

×