SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
16-4-2014 Algoritmos de
búsqueda y
ordenamiento
Tema Plegamiento
Juan Monsalve Constanzo, Valentina Torres Riquelme
PROFESORA PILAR PARDO HIDALGO
Contenido
Introducción....................................................................................................................................... 2
Tipos de busquedas......................................................................................................................... 3
1 Búsqueda Lineal........................................................................................................................ 3
2 Búsqueda binaria ...................................................................................................................... 4
3 Búsqueda en textos.................................................................................................................. 5
4 Arboles de búsqueda................................................................................................................ 6
5 Búsqueda por transformación de Claves (Hashing)............................................................ 7
Funciones de hash........................................................................................................................... 8
Truncamiento ................................................................................................................................ 8
Aritmética modular ....................................................................................................................... 9
Mitad del cuadrado....................................................................................................................... 9
Plegamiento................................................................................................................................... 9
Ventajas plegamiento: ........................................................................................................... 10
Desventajas plegamiento:..................................................................................................... 10
Ventajas de la búsqueda por hashing..................................................................................... 10
Desventajas de la búsqueda por hashing .............................................................................. 10
Costos de la búsqueda por hashing........................................................................................ 11
Algunos ejemplos del método de plegamiento...................................................................... 11
Análisis peor, mejor y caso promedio ..................................................................................... 11
Métodos para resolver colisiones ................................................................................................ 11
Área de Desborde: ..................................................................................................................... 11
Sondeo lineal: ............................................................................................................................. 12
Doble Hashing: ........................................................................................................................... 12
Encadenamiento de Sinónimos: .............................................................................................. 12
Direccionamiento por Cubetas:................................................................................................ 12
1
Introducción
En el presente informe se encuentran diferentes métodos de búsquedas de datos
almacenados y de ordenamiento, se centra en el método de hashing de
plegamiento, pero para analizarlo de mejor manera debemos primero de
comprender los demás métodos, cada uno explicando brevemente como operan.
Al analizar el método de plegamiento se presentan problemas llamados colisiones,
estas colisiones pueden ser tratadas con diferentes métodos, los cuales son
mencionados y explicados, dentro de los cuales se deberá elegir el mejor para cada
caso, ya que es fundamental realizar la elección indicada para optimizar la posterior
búsqueda de los datos.
2
Tipos de búsquedas
1. Búsqueda Lineal
2. Búsqueda Binaria
3. Búsqueda en Textos
4. Arboles de búsqueda.
5. Búsqueda por transformación de Claves (Hashing)
1 Búsqueda Lineal
La situación óptima es que el registro buscado sea el primero en ser examinado. El
peor caso es cuando las llaves de todos los n registros son comparados con k (lo
que se busca). El caso promedio es n/2 comparaciones.
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.
Principales Aplicaciones.
Los archivos secuenciales son típicamente utilizados en aplicaciones de proceso de
lotes Y son óptimos para dichas aplicaciones si se procesan todos los registros. La
organización secuencias de archivos es la única que es fácil de usar tanto en disco
como en cinta.
Un ejemplo claro para utilizar esta técnica de búsqueda es cuando se tiene una
base de datos no muy grande en un negocio pequeño donde los registros más
usados son llamados con frecuencia, es aquí donde esta técnica es fuerte, ya que
se aplica a un patrón de búsqueda pequeño, sencillo y manejable; es decir como si
fuera una descripción, es uno tras otro.
3
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.
Se puede aplicar tanto a datos en listas lineales (Vectores, Matrices, etc.) como en
árboles binarios de búsqueda. Los prerrequisitos principales para la búsqueda
binaria son:
• La lista debe estar ordenada en un orden específico de acuerdo al valor de
la llave.
• Debe conocerse el número de registros.
La búsqueda binaria consiste en dividir el array por su elemento medio en dos
subarrays más pequeños, y comparar el elemento con el del centro. Si coinciden, la
búsqueda se termina. Si el elemento es menor, debe estar (si está) en el primer
subarray, y si es mayor está en el segundo.
Suponiendo que la lista está almacenada como un array, los índices de la lista son:
Menor = 0 y mayor = n-1 y n es el número de elementos del array, los pasos a
seguir:
1. Calcular el índice del punto central del array
Central = (menor + mayor)/2 (división entera)
2. Comparar el valor de este elemento central con la clave:
Clave = central, si es así se termina la búsqueda.
Clave < central, se repite el proceso en la primera mitad.
Clave > central, se repite el proceso en la segunda mitad.
4
3 Búsqueda en textos
La búsqueda de patrones en un texto es un problema muy importante en la práctica.
Sus aplicaciones en computación son variadas, como por ejemplo la búsqueda de
una palabra en un archivo de texto o problemas relacionados con biología
computacional, en donde se requiere buscar patrones dentro de una secuencia de
ADN, la cual puede ser modelada como una secuencia de caracteres (el problema
es más complejo que lo descrito, puesto que se requiere buscar patrones en donde
ocurren alteraciones con cierta probabilidad, esto es, la búsqueda no es exacta).
Se utilizan las siguientes convenciones:
• n denotará el largo del texto en donde se buscará el patrón, es decir, texto =
a1 a2 ... an.
• m denotará el largo del patrón a buscar, es decir, patrón = b1 b2 ... bm.
Dentro podemos encontrar:
Algoritmo de fuerza bruta
Se alinea la primera posición del patrón con la primera posición del texto, y se
comparan los caracteres uno a uno hasta que se acabe el patrón, esto es, se
encontró una ocurrencia del patrón en el texto, o hasta que se encuentre una
discrepancia.
Algoritmo Boyer-Moore
Hasta el momento, los algoritmos de búsqueda en texto siempre comparan el patrón
con el texto de izquierda a derecha. Sin embargo, suponga que la comparación
ahora se realiza de derecha a izquierda: si hay una discrepancia en el último
carácter del patrón y el carácter del texto no aparece en todo el patrón, entonces
éste se puede deslizar m posiciones sin realizar ninguna comparación extra. En
particular, no fue necesario comparar los primeros m-1 caracteres del texto, lo cual
indica que podría realizarse una búsqueda en el texto con menos de n
comparaciones; sin embargo, si el carácter discrepante del texto se encuentra
dentro del patrón, éste podría desplazarse en un número menor de espacios.
5
4 Arboles de búsqueda
Árbol binario
La mayoría de los árboles binarios son de búsqueda
Un árbol binario no vacío, de raíz R, es un árbol binario de búsqueda si:
En caso de tener subárbol izquierdo, la raíz R debe ser mayor que el valor máximo
almacenado en el subárbol izquierdo, y que el subárbol izquierdo sea un árbol
binario de búsqueda.
En caso de tener subárbol derecho, la raíz R debe ser menor que el valor mínimo
almacenado en el subárbol derecho, y que el subárbol derecho sea un árbol binario
de búsqueda.
Para una fácil comprensión queda resumido en que es un árbol binario que cumple
que el subárbol izquierdo de cualquier nodo (si no está vacío) contiene valores
menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío)
contiene valores mayores.
Para estas definiciones se considera que hay una relación de orden establecida
entre los elementos de los nodos. Que cierta relación esté definida, o no, depende
de cada lenguaje de programación. De aquí se deduce que puede haber distintos
árboles binarios de búsqueda para un mismo conjunto de elementos.
La altura h en el peor de los casos siempre el mismo tamaño que el número de
elementos disponibles. Y en el mejor de los casos viene dada por la expresión h =
ceil(log_2(c+1)), donde ceil indica redondeo por exceso.
El interés de los árboles binarios de búsqueda (ABB) radica en que su recorrido en
inorden proporciona los elementos ordenados de forma ascendente y en que la
búsqueda de algún elemento suele ser muy eficiente.
Dependiendo de las necesidades del usuario que trate con una estructura de este
tipo, se podrá permitir la igualdad estricta en alguno, en ninguno o en ambos de los
subárboles que penden de la raíz. Permitir el uso de la igualdad provoca la aparición
de valores dobles y hace la búsqueda más compleja.
Un árbol binario de búsqueda no deja de ser un caso particular de árbol binario
6
5 Búsqueda por transformación de Claves (Hashing)
Hasta ahora las técnicas de localización de registros vistas, emplean un proceso de
búsqueda que implica cierto tiempo y esfuerzo. El método de transformación de
claves nos permite encontrar directamente el registro buscado en tablas o archivos
que no se encuentran necesariamente ordenados, en un tiempo independiente de
la cantidad de datos.
A diferencia de una búsqueda indexada por claves ordinaria, donde usamos el valor
de las claves como índices de un arreglo y necesitamos indispensablemente que
los mismos sean enteros distintos dentro de un rango equivalente al rango de la
tabla, utilizar el método de Hashing nos permite manejar aplicaciones de búsqueda
donde no tenemos claves con características tan limitadas. El resultado es un
método de búsqueda completamente diferente a los métodos basados en
comparaciones, ahora en vez de navegar por las estructuras comparando palabras
clave con las claves en los items, tratamos de referenciar items en una tabla
directamente haciendo operaciones aritméticas para transformar claves en
direcciones de la tabla. Esto último se logra implementando una Función Hash, que
se va a encargar de dicha transformación.
Idealmente, todas las claves deberían corresponder con direcciones diferentes,
pero es muy frecuente que dos o más claves diferentes sean transformadas a la
misma dirección, cuando esto pasa, se dice que se presenta una Colisión. Es por
eso que también se debe implementar algún proceso de resolución de Colisiones,
que se va a encargar de tratar tales situaciones. Uno de los métodos de resolución
de colisiones que existen usa Listas enlazadas y se lo denomina “encadenamiento
directo” o “Hashing abierto” el cual es muy útil en situaciones dinámicas, donde el
número de elementos es difícil de predecir por adelantado.
7
Funciones de hash
La función hash es la que se va a encargar de transformar las claves en direcciones
de la tabla. Se puede definir la “función ideal” como aquella que distribuya a todos
los elementos lo más uniformemente posible sobre la gama de valores índice, es
decir, si tenemos una tabla que puede almacenar N items, entonces requerimos de
una función que transforme claves a enteros en el rango [0, N-1].
Existen distintas funciones de hashing:
Truncamiento
Consiste en tomar algunos dígitos de la clave y formar con ellos una dirección. Este
método es de los más sencillos, pero es también de los que ofrecen menos
uniformidad en la distribución de las claves.
Sea K la clave del dato a buscar. K está formada por los dígitos d1, d2, ... , dn. La
función hash queda definida por la siguiente fórmula:
H(K) = elegirdígitos (d1d2...dn) + 1)
La elección de los dígitos es arbitraria. Podrían tomarse los dígitos de las posiciones
impares o de las pares. Luego podría unírseles de izquierda a derecha o de derecha
a izquierda. La suma de una unidad a los dígitos seleccionados es para obtener un
valor entre 1 y 100.
En todas las funciones hash anteriores se presentan ejemplos de claves numéricas.
Sin embargo, en la realidad las claves pueden ser alfabéticas o alfanuméricas. En
general, cuando aparecen letras en las claves se suele asociar a cada una un entero
a efectos de convertirlas en numéricas.
A B C D ... Z
01 02 03 04 …27
Si por ejemplo la clave fuera ADA, su equivalente numérica sería 010401. Si hubiera
combinación de letras y números, se procedería de la misma manera. Por ejemplo,
dada una clave Z4F21, su equivalente numérica sería 2740621. Otra alternativa
sería, para cada carácter, tomar el valor decimal asociado según el código ASCII.
Una vez obtenida la clave en su forma numérica, se puede utilizar normalmente
cualquiera de las funciones.
8
Aritmética modular
U na función de dispersión que utiliza la aritmética modular genera valores dispersos
calculando el residuo de la división entera entre la clave x y el tamaño de la tabla m.
h(x) = x mod m
Mitad del cuadrado
Esta técnica de obtener direcciones dispersas consiste, en primer lugar, en calcular
el cuadrado de la clave x, y a continuación extraer de x^2, los dígitos que se
encuentran en ciertas posiciones. El número de dígitos a extraer depende del rango
de dispersión que se desea obtener. Así, si el rango es de 0 a 999, se extraen tres
dígitos, siempre, aquellos que están en las mismas posiciones.
Un problema potencial, al calcular x^2, es que sea demasiado grande y exceda el
máximo rango del valor que se está utilizando. Es importante, al aplicar este método
de dispersión, utilizar siempre las mismas posiciones para todas las claves.
Plegamiento
La técnica del plegamiento se utiliza cuando el valor entero del campo clave elegido
sea demasiado grande, pudiendo ocurrir que no pueda ser almacenado en memoria.
Consiste en partir la clave x en varias partes x1, x2, x3, …, xn, y la combinación de
las partes de un modo conveniente (a menudo sumando las partes) da como
resultado la dirección del registro.
Cada parte xi, con la excepción a lo sumo de la última, tiene el mismo número de
dígitos que la dirección especificada.
h(x) = x1 + x2 + x3 + … + xr
En la operación que se realiza para el cálculo de la función hash, se desprecian los
dígitos más significativos que se obtienen del acarreo. Generalmente se utiliza esta
técnica para transformar una clave muy grande en otra más pequeña, y a
continuación se aplica la función hash de aritmética modular.
La suma de las partes puede realizarse de dos formas
• El plegado por desplazamiento consiste en sumar las partes directamente.
• Si la claves es una cadena de caracteres, los dígitos de cada carácter vienen
determinados por el valor decimal de la secuencia de cotejo correspondiente (ASCII,
EBCDIC, etc.).
9
Ventajas plegamiento:
Puede ser la técnica más fácil de calcular.
Desventajas plegamiento:
Produce resultados bastante erráticos, a menos que la longitud de la llave sea
aproximadamente igual a la longitud de la dirección.
Se pueden producir colisiones y necesitar métodos para resolverlas.
Posee un espacio de tamaño fijo. Aumentar el tamaño del archivo relativo creado al
usar una de estas funciones, implica cambiar la función hash, para que se refiera a
un espacio mayor y volver a cargar y reorganizar de nuevo los datos.
El método de plegamiento también incorpora las ventajas y desventajas de las
funciones de hash:
La eficiencia de una función hash depende de:
1. La distribución de los valores de llave que realmente se usan
2. El número de valores de llave que realmente están en uso con respecto al tamaño
del espacio de direcciones
3. El número de registros que pueden almacenarse en una dirección dada sin causar
una colisión
4. La técnica usada para resolver el problema de las colisiones
Ventajas de la búsqueda por hashing
1. Se pueden usar los valores naturales de la llave, puesto que se traducen
internamente a direcciones fáciles de localizar.
2. Se logra independencia lógica y física, debido a que los valores de las llaves son
independientes del espacio de direcciones.
3. No se requiere almacenamiento adicional para los índices.
Desventajas de la búsqueda por hashing
1. No pueden usarse registros de longitud variable
2. El archivo no está clasificado
3. No permite llaves repetidas
4. Solo permite acceso por una sola llave
10
Costos de la búsqueda por hashing
• Tiempo de procesamiento requerido para la aplicación de la función hash
• Tiempo de procesamiento y los accesos E/S requeridos para solucionar las
colisiones.
Algunos ejemplos del método de plegamiento.
Si dividimos los números de 8 cifras en 3, 3 y 2 cifras y se suman, dará otro número
de tres cifras (y si no, se cogen las tres últimas cifras):13000000 -->
130=130+000+00
• 12345678 --> 123+456+78=657
• 71140205 --> 118 --> 711+402+051=118
• 13602499 --> 136+024+99=259
• 25000009 --> 250+000+09=259
Análisis peor, mejor y caso promedio
• El peor caso para una tabla hash y para un árbol binario es el de la lista
enlazada. Esto ocurre cuando todas las claves se dispersan al mismo slot.
• El mejor caso para una tabla de hash es cuando todas las claves se
dispersan en distintos slots.
• El caso promedio de una tabla de hash ocurre cuando en ocasiones las
claves producen colisiones.
Métodos para resolver colisiones
Área de Desborde:
La forma más sencilla de resolver las colisiones es simplemente crear para cada
dirección de la tabla, una lista encadenada de todos los elementos cuyas llaves
mapean al mismo índice.
Cuando se busque una clave se tendrá que recorrer la lista que le corresponda
hasta encontrar el elemento buscado. El factor de carga será l = N/M, que va a ser
el largo promedio de cada lista.
(N = número de elementos insertados, M = cantidad de listas)
Las listas pueden dejarse desordenadas o bien mantenerlas ordenadas. Lo más
frecuente es usar listas desordenadas porque es más fácil de implementar, y es más
eficiente, vamos a tener una Inserción de orden constante y una búsqueda
proporcional a l.
11
Sondeo lineal:
Cuando se presenta una colisión, simplemente se busca, avanzando de a un lugar
por vez, el próximo lugar vacío en la tabla, y se guarda ahí la clave si no está
repetida.
La inspección comienza en la posición a la cual lleva la función hash, ahí se tienen
tres posibles situaciones: si la posición actual de la tabla contiene un ítem cuya clave
es igual a la que buscamos, entonces tenemos un hit, si la posición de la tabla está
vacía, tenemos una pérdida, de otra manera seguimos con la próxima posición en
el siguiente índice, continuando (volviendo al principio de la tabla si llegamos al final)
hasta que encontremos o una pérdida o un hit.
Doble Hashing:
El cual una segunda función es usada para manejar la resolución de colisiones. La
segunda función debe ser elegida con cuidado, de otra manera el programa puede
no funcionar. No puede haber ningún caso en que la segunda función se evalué a
cero, ya que esto generaría un ciclo infinito, también es importante que el valor de
la segunda función sea relativamente primo al tamaño de la tabla, de otra manera
las secuencias serían muy cortas.
Encadenamiento de Sinónimos:
Es la manera de mejorar la eficiencia de un archivo relativo que utiliza calculo de
direcciones, sin directorio auxiliar para guiar la recuperación de registros ,mantiene
una lista de registros, con la misma dirección de origen, no reduce el numero de
colisiones, pero reduce los tiempos de acceso para recuperar los registros que no
se encuentran en su localidad de origen.
Se puede utilizar con el método abierto y de desborde.
Siempre trabaja mejor que la solución de colisiones sin encadenamiento de
sinónimos al menos que se use el método de búsqueda en el directorio para
registrar donde están realmente almacenados los registros.
Direccionamiento por Cubetas:
Es un bloque de espacio o cubetas que pueden acomodar ocurrencias múltiples de
registros, en lugar de asignar celdas individuales a registros.
Cuando una cubeta es desbordada, alguna nueva localización deberá ser
encontrada para el registro , cada cubeta principal generalmente tendrá un
apuntador a una cadena de registros, en el área de sobrecupo, que tendrían que
hacer almacenados en la cubeta principal, pero que terminaron, en su lugar, en una
cubeta de sobrecupo.
Una cubeta de sobrecupo podría acomodar registros que fueran direccionados
hacia diferentes cubetas principales
12

Más contenido relacionado

La actualidad más candente

Presentacion recursividad
Presentacion recursividadPresentacion recursividad
Presentacion recursividadjambslide
 
Metodos de Búsqueda
Metodos de BúsquedaMetodos de Búsqueda
Metodos de BúsquedaPedro Avaria
 
Exposicion Busqueda
Exposicion BusquedaExposicion Busqueda
Exposicion BusquedaAngie Suarez
 
Algoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaAlgoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaJavier Alvarez
 
Búsqueda secuencial en tabla ordenada
Búsqueda secuencial  en tabla ordenadaBúsqueda secuencial  en tabla ordenada
Búsqueda secuencial en tabla ordenadaEdwin Chavarria
 
02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglosFranco Guamán
 
Abb diferencias entre c++ y java
Abb diferencias entre c++ y javaAbb diferencias entre c++ y java
Abb diferencias entre c++ y javaFranco Guamán
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busquedaJuan Navarro
 
Manual de uso de la función BUSCARH
Manual de uso de la función BUSCARHManual de uso de la función BUSCARH
Manual de uso de la función BUSCARHAlejandra Ayala
 
Búsqueda binaria iterativa
Búsqueda binaria iterativaBúsqueda binaria iterativa
Búsqueda binaria iterativaOmar Daza
 
Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busquedaOsirysRock
 
Método de búsqueda binaria
Método de búsqueda binariaMétodo de búsqueda binaria
Método de búsqueda binariaJose Altamiranda
 

La actualidad más candente (17)

Presentacion recursividad
Presentacion recursividadPresentacion recursividad
Presentacion recursividad
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Metodos de Búsqueda
Metodos de BúsquedaMetodos de Búsqueda
Metodos de Búsqueda
 
Exposicion Busqueda
Exposicion BusquedaExposicion Busqueda
Exposicion Busqueda
 
Algoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaAlgoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y Búsqueda
 
Búsqueda secuencial en tabla ordenada
Búsqueda secuencial  en tabla ordenadaBúsqueda secuencial  en tabla ordenada
Búsqueda secuencial en tabla ordenada
 
Analisissss
AnalisissssAnalisissss
Analisissss
 
02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos
 
Abb diferencias entre c++ y java
Abb diferencias entre c++ y javaAbb diferencias entre c++ y java
Abb diferencias entre c++ y java
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Manual de uso de la función BUSCARH
Manual de uso de la función BUSCARHManual de uso de la función BUSCARH
Manual de uso de la función BUSCARH
 
EXPOSICION HASH
EXPOSICION HASHEXPOSICION HASH
EXPOSICION HASH
 
Búsqueda binaria iterativa
Búsqueda binaria iterativaBúsqueda binaria iterativa
Búsqueda binaria iterativa
 
Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busqueda
 
Método de búsqueda binaria
Método de búsqueda binariaMétodo de búsqueda binaria
Método de búsqueda binaria
 
Ordenamientos rápido y mezcla
Ordenamientos rápido y mezclaOrdenamientos rápido y mezcla
Ordenamientos rápido y mezcla
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 

Similar a Informe analisis de algoritmos

Algoritmo de busqueda truncamiento
Algoritmo de busqueda truncamientoAlgoritmo de busqueda truncamiento
Algoritmo de busqueda truncamientojaviervilugron
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busquedaclaudia1824
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busquedamcamila25
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busquedaAngie Romero
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busquedaAngie Romero
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busquedaAngie Romero
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busquedaAngie Romero
 
Estructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaEstructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaJosé Antonio Sandoval Acosta
 
Introducción a los motores de búsqueda
Introducción a los motores de búsquedaIntroducción a los motores de búsqueda
Introducción a los motores de búsquedanachopg
 
Introducción a los motores de búsqueda
Introducción a los motores de búsquedaIntroducción a los motores de búsqueda
Introducción a los motores de búsquedanachopg
 
Josemanueunidad4 mapaconceptual
Josemanueunidad4 mapaconceptualJosemanueunidad4 mapaconceptual
Josemanueunidad4 mapaconceptualK Manuel TN
 
Métodos de búsqueda
Métodos de búsquedaMétodos de búsqueda
Métodos de búsquedabrayan000
 
Métodos de búsqueda
Métodos de búsquedaMétodos de búsqueda
Métodos de búsquedabrayan000
 
Gestión basica de la información
Gestión basica de la informaciónGestión basica de la información
Gestión basica de la informaciónjess10D
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaEuniceLeguiasGonzale
 

Similar a Informe analisis de algoritmos (20)

Algoritmo de busqueda truncamiento
Algoritmo de busqueda truncamientoAlgoritmo de busqueda truncamiento
Algoritmo de busqueda truncamiento
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busqueda
 
Metodo de busqueda binario koby
Metodo de busqueda binario kobyMetodo de busqueda binario koby
Metodo de busqueda binario koby
 
Busqueda de datos
Busqueda de datosBusqueda de datos
Busqueda de datos
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busqueda
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busqueda
 
Metodos de busqueda
Metodos de busquedaMetodos de busqueda
Metodos de busqueda
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busqueda
 
metodos de busqueda
metodos de busquedametodos de busqueda
metodos de busqueda
 
Estructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaEstructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de Búsqueda
 
base de datos
base de datos base de datos
base de datos
 
Presentación1
Presentación1Presentación1
Presentación1
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Introducción a los motores de búsqueda
Introducción a los motores de búsquedaIntroducción a los motores de búsqueda
Introducción a los motores de búsqueda
 
Introducción a los motores de búsqueda
Introducción a los motores de búsquedaIntroducción a los motores de búsqueda
Introducción a los motores de búsqueda
 
Josemanueunidad4 mapaconceptual
Josemanueunidad4 mapaconceptualJosemanueunidad4 mapaconceptual
Josemanueunidad4 mapaconceptual
 
Métodos de búsqueda
Métodos de búsquedaMétodos de búsqueda
Métodos de búsqueda
 
Métodos de búsqueda
Métodos de búsquedaMétodos de búsqueda
Métodos de búsqueda
 
Gestión basica de la información
Gestión basica de la informaciónGestión basica de la información
Gestión basica de la información
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y Busqueda
 

Más de Juan Monsalve Constanzo (7)

Problemas
ProblemasProblemas
Problemas
 
Grafos
GrafosGrafos
Grafos
 
Recorrido de grafos
Recorrido de grafosRecorrido de grafos
Recorrido de grafos
 
Representacion de grafos
Representacion de grafosRepresentacion de grafos
Representacion de grafos
 
Informe insercion
Informe insercionInforme insercion
Informe insercion
 
Cuadro
CuadroCuadro
Cuadro
 
Codigos hanoi
Codigos hanoiCodigos hanoi
Codigos hanoi
 

Último

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Último (11)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Informe analisis de algoritmos

  • 1. 16-4-2014 Algoritmos de búsqueda y ordenamiento Tema Plegamiento Juan Monsalve Constanzo, Valentina Torres Riquelme PROFESORA PILAR PARDO HIDALGO
  • 2. Contenido Introducción....................................................................................................................................... 2 Tipos de busquedas......................................................................................................................... 3 1 Búsqueda Lineal........................................................................................................................ 3 2 Búsqueda binaria ...................................................................................................................... 4 3 Búsqueda en textos.................................................................................................................. 5 4 Arboles de búsqueda................................................................................................................ 6 5 Búsqueda por transformación de Claves (Hashing)............................................................ 7 Funciones de hash........................................................................................................................... 8 Truncamiento ................................................................................................................................ 8 Aritmética modular ....................................................................................................................... 9 Mitad del cuadrado....................................................................................................................... 9 Plegamiento................................................................................................................................... 9 Ventajas plegamiento: ........................................................................................................... 10 Desventajas plegamiento:..................................................................................................... 10 Ventajas de la búsqueda por hashing..................................................................................... 10 Desventajas de la búsqueda por hashing .............................................................................. 10 Costos de la búsqueda por hashing........................................................................................ 11 Algunos ejemplos del método de plegamiento...................................................................... 11 Análisis peor, mejor y caso promedio ..................................................................................... 11 Métodos para resolver colisiones ................................................................................................ 11 Área de Desborde: ..................................................................................................................... 11 Sondeo lineal: ............................................................................................................................. 12 Doble Hashing: ........................................................................................................................... 12 Encadenamiento de Sinónimos: .............................................................................................. 12 Direccionamiento por Cubetas:................................................................................................ 12 1
  • 3. Introducción En el presente informe se encuentran diferentes métodos de búsquedas de datos almacenados y de ordenamiento, se centra en el método de hashing de plegamiento, pero para analizarlo de mejor manera debemos primero de comprender los demás métodos, cada uno explicando brevemente como operan. Al analizar el método de plegamiento se presentan problemas llamados colisiones, estas colisiones pueden ser tratadas con diferentes métodos, los cuales son mencionados y explicados, dentro de los cuales se deberá elegir el mejor para cada caso, ya que es fundamental realizar la elección indicada para optimizar la posterior búsqueda de los datos. 2
  • 4. Tipos de búsquedas 1. Búsqueda Lineal 2. Búsqueda Binaria 3. Búsqueda en Textos 4. Arboles de búsqueda. 5. Búsqueda por transformación de Claves (Hashing) 1 Búsqueda Lineal La situación óptima es que el registro buscado sea el primero en ser examinado. El peor caso es cuando las llaves de todos los n registros son comparados con k (lo que se busca). El caso promedio es n/2 comparaciones. 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. Principales Aplicaciones. Los archivos secuenciales son típicamente utilizados en aplicaciones de proceso de lotes Y son óptimos para dichas aplicaciones si se procesan todos los registros. La organización secuencias de archivos es la única que es fácil de usar tanto en disco como en cinta. Un ejemplo claro para utilizar esta técnica de búsqueda es cuando se tiene una base de datos no muy grande en un negocio pequeño donde los registros más usados son llamados con frecuencia, es aquí donde esta técnica es fuerte, ya que se aplica a un patrón de búsqueda pequeño, sencillo y manejable; es decir como si fuera una descripción, es uno tras otro. 3
  • 5. 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. Se puede aplicar tanto a datos en listas lineales (Vectores, Matrices, etc.) como en árboles binarios de búsqueda. Los prerrequisitos principales para la búsqueda binaria son: • La lista debe estar ordenada en un orden específico de acuerdo al valor de la llave. • Debe conocerse el número de registros. La búsqueda binaria consiste en dividir el array por su elemento medio en dos subarrays más pequeños, y comparar el elemento con el del centro. Si coinciden, la búsqueda se termina. Si el elemento es menor, debe estar (si está) en el primer subarray, y si es mayor está en el segundo. Suponiendo que la lista está almacenada como un array, los índices de la lista son: Menor = 0 y mayor = n-1 y n es el número de elementos del array, los pasos a seguir: 1. Calcular el índice del punto central del array Central = (menor + mayor)/2 (división entera) 2. Comparar el valor de este elemento central con la clave: Clave = central, si es así se termina la búsqueda. Clave < central, se repite el proceso en la primera mitad. Clave > central, se repite el proceso en la segunda mitad. 4
  • 6. 3 Búsqueda en textos La búsqueda de patrones en un texto es un problema muy importante en la práctica. Sus aplicaciones en computación son variadas, como por ejemplo la búsqueda de una palabra en un archivo de texto o problemas relacionados con biología computacional, en donde se requiere buscar patrones dentro de una secuencia de ADN, la cual puede ser modelada como una secuencia de caracteres (el problema es más complejo que lo descrito, puesto que se requiere buscar patrones en donde ocurren alteraciones con cierta probabilidad, esto es, la búsqueda no es exacta). Se utilizan las siguientes convenciones: • n denotará el largo del texto en donde se buscará el patrón, es decir, texto = a1 a2 ... an. • m denotará el largo del patrón a buscar, es decir, patrón = b1 b2 ... bm. Dentro podemos encontrar: Algoritmo de fuerza bruta Se alinea la primera posición del patrón con la primera posición del texto, y se comparan los caracteres uno a uno hasta que se acabe el patrón, esto es, se encontró una ocurrencia del patrón en el texto, o hasta que se encuentre una discrepancia. Algoritmo Boyer-Moore Hasta el momento, los algoritmos de búsqueda en texto siempre comparan el patrón con el texto de izquierda a derecha. Sin embargo, suponga que la comparación ahora se realiza de derecha a izquierda: si hay una discrepancia en el último carácter del patrón y el carácter del texto no aparece en todo el patrón, entonces éste se puede deslizar m posiciones sin realizar ninguna comparación extra. En particular, no fue necesario comparar los primeros m-1 caracteres del texto, lo cual indica que podría realizarse una búsqueda en el texto con menos de n comparaciones; sin embargo, si el carácter discrepante del texto se encuentra dentro del patrón, éste podría desplazarse en un número menor de espacios. 5
  • 7. 4 Arboles de búsqueda Árbol binario La mayoría de los árboles binarios son de búsqueda Un árbol binario no vacío, de raíz R, es un árbol binario de búsqueda si: En caso de tener subárbol izquierdo, la raíz R debe ser mayor que el valor máximo almacenado en el subárbol izquierdo, y que el subárbol izquierdo sea un árbol binario de búsqueda. En caso de tener subárbol derecho, la raíz R debe ser menor que el valor mínimo almacenado en el subárbol derecho, y que el subárbol derecho sea un árbol binario de búsqueda. Para una fácil comprensión queda resumido en que es un árbol binario que cumple que el subárbol izquierdo de cualquier nodo (si no está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío) contiene valores mayores. Para estas definiciones se considera que hay una relación de orden establecida entre los elementos de los nodos. Que cierta relación esté definida, o no, depende de cada lenguaje de programación. De aquí se deduce que puede haber distintos árboles binarios de búsqueda para un mismo conjunto de elementos. La altura h en el peor de los casos siempre el mismo tamaño que el número de elementos disponibles. Y en el mejor de los casos viene dada por la expresión h = ceil(log_2(c+1)), donde ceil indica redondeo por exceso. El interés de los árboles binarios de búsqueda (ABB) radica en que su recorrido en inorden proporciona los elementos ordenados de forma ascendente y en que la búsqueda de algún elemento suele ser muy eficiente. Dependiendo de las necesidades del usuario que trate con una estructura de este tipo, se podrá permitir la igualdad estricta en alguno, en ninguno o en ambos de los subárboles que penden de la raíz. Permitir el uso de la igualdad provoca la aparición de valores dobles y hace la búsqueda más compleja. Un árbol binario de búsqueda no deja de ser un caso particular de árbol binario 6
  • 8. 5 Búsqueda por transformación de Claves (Hashing) Hasta ahora las técnicas de localización de registros vistas, emplean un proceso de búsqueda que implica cierto tiempo y esfuerzo. El método de transformación de claves nos permite encontrar directamente el registro buscado en tablas o archivos que no se encuentran necesariamente ordenados, en un tiempo independiente de la cantidad de datos. A diferencia de una búsqueda indexada por claves ordinaria, donde usamos el valor de las claves como índices de un arreglo y necesitamos indispensablemente que los mismos sean enteros distintos dentro de un rango equivalente al rango de la tabla, utilizar el método de Hashing nos permite manejar aplicaciones de búsqueda donde no tenemos claves con características tan limitadas. El resultado es un método de búsqueda completamente diferente a los métodos basados en comparaciones, ahora en vez de navegar por las estructuras comparando palabras clave con las claves en los items, tratamos de referenciar items en una tabla directamente haciendo operaciones aritméticas para transformar claves en direcciones de la tabla. Esto último se logra implementando una Función Hash, que se va a encargar de dicha transformación. Idealmente, todas las claves deberían corresponder con direcciones diferentes, pero es muy frecuente que dos o más claves diferentes sean transformadas a la misma dirección, cuando esto pasa, se dice que se presenta una Colisión. Es por eso que también se debe implementar algún proceso de resolución de Colisiones, que se va a encargar de tratar tales situaciones. Uno de los métodos de resolución de colisiones que existen usa Listas enlazadas y se lo denomina “encadenamiento directo” o “Hashing abierto” el cual es muy útil en situaciones dinámicas, donde el número de elementos es difícil de predecir por adelantado. 7
  • 9. Funciones de hash La función hash es la que se va a encargar de transformar las claves en direcciones de la tabla. Se puede definir la “función ideal” como aquella que distribuya a todos los elementos lo más uniformemente posible sobre la gama de valores índice, es decir, si tenemos una tabla que puede almacenar N items, entonces requerimos de una función que transforme claves a enteros en el rango [0, N-1]. Existen distintas funciones de hashing: Truncamiento Consiste en tomar algunos dígitos de la clave y formar con ellos una dirección. Este método es de los más sencillos, pero es también de los que ofrecen menos uniformidad en la distribución de las claves. Sea K la clave del dato a buscar. K está formada por los dígitos d1, d2, ... , dn. La función hash queda definida por la siguiente fórmula: H(K) = elegirdígitos (d1d2...dn) + 1) La elección de los dígitos es arbitraria. Podrían tomarse los dígitos de las posiciones impares o de las pares. Luego podría unírseles de izquierda a derecha o de derecha a izquierda. La suma de una unidad a los dígitos seleccionados es para obtener un valor entre 1 y 100. En todas las funciones hash anteriores se presentan ejemplos de claves numéricas. Sin embargo, en la realidad las claves pueden ser alfabéticas o alfanuméricas. En general, cuando aparecen letras en las claves se suele asociar a cada una un entero a efectos de convertirlas en numéricas. A B C D ... Z 01 02 03 04 …27 Si por ejemplo la clave fuera ADA, su equivalente numérica sería 010401. Si hubiera combinación de letras y números, se procedería de la misma manera. Por ejemplo, dada una clave Z4F21, su equivalente numérica sería 2740621. Otra alternativa sería, para cada carácter, tomar el valor decimal asociado según el código ASCII. Una vez obtenida la clave en su forma numérica, se puede utilizar normalmente cualquiera de las funciones. 8
  • 10. Aritmética modular U na función de dispersión que utiliza la aritmética modular genera valores dispersos calculando el residuo de la división entera entre la clave x y el tamaño de la tabla m. h(x) = x mod m Mitad del cuadrado Esta técnica de obtener direcciones dispersas consiste, en primer lugar, en calcular el cuadrado de la clave x, y a continuación extraer de x^2, los dígitos que se encuentran en ciertas posiciones. El número de dígitos a extraer depende del rango de dispersión que se desea obtener. Así, si el rango es de 0 a 999, se extraen tres dígitos, siempre, aquellos que están en las mismas posiciones. Un problema potencial, al calcular x^2, es que sea demasiado grande y exceda el máximo rango del valor que se está utilizando. Es importante, al aplicar este método de dispersión, utilizar siempre las mismas posiciones para todas las claves. Plegamiento La técnica del plegamiento se utiliza cuando el valor entero del campo clave elegido sea demasiado grande, pudiendo ocurrir que no pueda ser almacenado en memoria. Consiste en partir la clave x en varias partes x1, x2, x3, …, xn, y la combinación de las partes de un modo conveniente (a menudo sumando las partes) da como resultado la dirección del registro. Cada parte xi, con la excepción a lo sumo de la última, tiene el mismo número de dígitos que la dirección especificada. h(x) = x1 + x2 + x3 + … + xr En la operación que se realiza para el cálculo de la función hash, se desprecian los dígitos más significativos que se obtienen del acarreo. Generalmente se utiliza esta técnica para transformar una clave muy grande en otra más pequeña, y a continuación se aplica la función hash de aritmética modular. La suma de las partes puede realizarse de dos formas • El plegado por desplazamiento consiste en sumar las partes directamente. • Si la claves es una cadena de caracteres, los dígitos de cada carácter vienen determinados por el valor decimal de la secuencia de cotejo correspondiente (ASCII, EBCDIC, etc.). 9
  • 11. Ventajas plegamiento: Puede ser la técnica más fácil de calcular. Desventajas plegamiento: Produce resultados bastante erráticos, a menos que la longitud de la llave sea aproximadamente igual a la longitud de la dirección. Se pueden producir colisiones y necesitar métodos para resolverlas. Posee un espacio de tamaño fijo. Aumentar el tamaño del archivo relativo creado al usar una de estas funciones, implica cambiar la función hash, para que se refiera a un espacio mayor y volver a cargar y reorganizar de nuevo los datos. El método de plegamiento también incorpora las ventajas y desventajas de las funciones de hash: La eficiencia de una función hash depende de: 1. La distribución de los valores de llave que realmente se usan 2. El número de valores de llave que realmente están en uso con respecto al tamaño del espacio de direcciones 3. El número de registros que pueden almacenarse en una dirección dada sin causar una colisión 4. La técnica usada para resolver el problema de las colisiones Ventajas de la búsqueda por hashing 1. Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar. 2. Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones. 3. No se requiere almacenamiento adicional para los índices. Desventajas de la búsqueda por hashing 1. No pueden usarse registros de longitud variable 2. El archivo no está clasificado 3. No permite llaves repetidas 4. Solo permite acceso por una sola llave 10
  • 12. Costos de la búsqueda por hashing • Tiempo de procesamiento requerido para la aplicación de la función hash • Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones. Algunos ejemplos del método de plegamiento. Si dividimos los números de 8 cifras en 3, 3 y 2 cifras y se suman, dará otro número de tres cifras (y si no, se cogen las tres últimas cifras):13000000 --> 130=130+000+00 • 12345678 --> 123+456+78=657 • 71140205 --> 118 --> 711+402+051=118 • 13602499 --> 136+024+99=259 • 25000009 --> 250+000+09=259 Análisis peor, mejor y caso promedio • El peor caso para una tabla hash y para un árbol binario es el de la lista enlazada. Esto ocurre cuando todas las claves se dispersan al mismo slot. • El mejor caso para una tabla de hash es cuando todas las claves se dispersan en distintos slots. • El caso promedio de una tabla de hash ocurre cuando en ocasiones las claves producen colisiones. Métodos para resolver colisiones Área de Desborde: La forma más sencilla de resolver las colisiones es simplemente crear para cada dirección de la tabla, una lista encadenada de todos los elementos cuyas llaves mapean al mismo índice. Cuando se busque una clave se tendrá que recorrer la lista que le corresponda hasta encontrar el elemento buscado. El factor de carga será l = N/M, que va a ser el largo promedio de cada lista. (N = número de elementos insertados, M = cantidad de listas) Las listas pueden dejarse desordenadas o bien mantenerlas ordenadas. Lo más frecuente es usar listas desordenadas porque es más fácil de implementar, y es más eficiente, vamos a tener una Inserción de orden constante y una búsqueda proporcional a l. 11
  • 13. Sondeo lineal: Cuando se presenta una colisión, simplemente se busca, avanzando de a un lugar por vez, el próximo lugar vacío en la tabla, y se guarda ahí la clave si no está repetida. La inspección comienza en la posición a la cual lleva la función hash, ahí se tienen tres posibles situaciones: si la posición actual de la tabla contiene un ítem cuya clave es igual a la que buscamos, entonces tenemos un hit, si la posición de la tabla está vacía, tenemos una pérdida, de otra manera seguimos con la próxima posición en el siguiente índice, continuando (volviendo al principio de la tabla si llegamos al final) hasta que encontremos o una pérdida o un hit. Doble Hashing: El cual una segunda función es usada para manejar la resolución de colisiones. La segunda función debe ser elegida con cuidado, de otra manera el programa puede no funcionar. No puede haber ningún caso en que la segunda función se evalué a cero, ya que esto generaría un ciclo infinito, también es importante que el valor de la segunda función sea relativamente primo al tamaño de la tabla, de otra manera las secuencias serían muy cortas. Encadenamiento de Sinónimos: Es la manera de mejorar la eficiencia de un archivo relativo que utiliza calculo de direcciones, sin directorio auxiliar para guiar la recuperación de registros ,mantiene una lista de registros, con la misma dirección de origen, no reduce el numero de colisiones, pero reduce los tiempos de acceso para recuperar los registros que no se encuentran en su localidad de origen. Se puede utilizar con el método abierto y de desborde. Siempre trabaja mejor que la solución de colisiones sin encadenamiento de sinónimos al menos que se use el método de búsqueda en el directorio para registrar donde están realmente almacenados los registros. Direccionamiento por Cubetas: Es un bloque de espacio o cubetas que pueden acomodar ocurrencias múltiples de registros, en lugar de asignar celdas individuales a registros. Cuando una cubeta es desbordada, alguna nueva localización deberá ser encontrada para el registro , cada cubeta principal generalmente tendrá un apuntador a una cadena de registros, en el área de sobrecupo, que tendrían que hacer almacenados en la cubeta principal, pero que terminaron, en su lugar, en una cubeta de sobrecupo. Una cubeta de sobrecupo podría acomodar registros que fueran direccionados hacia diferentes cubetas principales 12