Vous êtes sur la page 1sur 14

Introducción

En este trabajo relacionado con la Aritmética Modular se mencionarán y


explicarán los tipos de algoritmos de búsqueda, los métodos de transformación de
claves, desventajas del hashing. Explicaremos también qué pasa cuando existe
coincidencia de direcciones, explicando con ejemplos los casos propuestos.

1
ANÁLISIS ALGORITMOS

Algoritmos de Búsqueda

La forma en que funciona un algoritmo de búsqueda es lograr ubicar


información dentro de una colección de datos dados. Lo que cabe destacar de
esto, es saber si un elemento pertenece o no a una estructura de datos, en caso
de pertenecer se necesita saber el índice de la lista en el que se encuentra el
elemento.

Entre los Algoritmos de Búsqueda los que más destacan son: Búsqueda
Secuencial o lineal, Búsqueda Binaria y las Técnicas de Hashing.

2
Búsqueda lineal o secuencial.

La búsqueda lineal es la técnica más sencilla para encontrar un elemento en


una lista de datos, esto consiste en recorrer un arreglo elemento a elemento e ir
comparando con el valor deseado (clave), hasta que se encuentre o finalice el
arreglo.

La búsqueda finaliza exitosamente, es decir encontró el dato buscado, lo


que se necesita conocer es en qué posición fue encontrado el dato buscado,
también está la posibilidad de que la búsqueda termine sin éxito, esto es cuando
se determina que no se obtiene ningún registro con esa llave. Esto se puede
aplicar en todos los tipos de búsqueda.

El proceso en sí de la búsqueda lineal es comenzar a comparar desde la


primera casilla del arreglo y se observan una a una las casillas hasta que se
encuentra el elemento o hasta terminar con las casillas de la lista sin obtener el
resultado.

En la búsqueda lineal no requiere que el arreglo se encuentre en algún


orden en particular ya que existe la misma probabilidad de que el valor se
encuentre en el primer elemento (el mejor caso) o en el último elemento (el peor
caso), por lo tanto en promedio el programa tendrá que comparar el valor buscado
con la mitad de los elementos del arreglo.

Algunas desventajas de la búsqueda lineal es que el método funciona bien


con arreglos pequeños o para arreglos no ordenados.
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 utilizarse para hacer las búsquedas.

Ejemplo:

3
Complejidad de búsqueda lineal

MEJOR CASO:
Si tenemos mucha 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, su complejidad será O (1).

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 condiciones del
bucle mientras y para la llamada al método. Por lo tanto, la cantidad de tiempo es
de la forma an + b para ciertas constantes ay b. En notación O, O (an+b) = O
(an) = O(n).

CASO MEDIO:
Supongamos que cada elemento almacenado tiene la misma probabilidad de
ser buscado. La media se puede calcular 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 Media = (Total / n) = a ((n+1) / 2) + b que es O(n).

4
Búsqueda binaria

Para poder utilizar este algoritmo, el arreglo debe estar ordenado y no


deben haber elemento repetidos, esta búsqueda consiste en primer lugar comparar
el componente central del arreglo si este coincide la búsqueda finaliza y si no es el
valor buscado, entonces se divide el arreglo en dos subarreglos más pequeños y se
continua con el que puede contener el valor buscado esto si define al comparar el
valor central y si el elemento que estoy comparando es mayor que el del valor
central entonces continuare la búsqueda con el subarreglo de la derecha y
nuevamente comparando el valor central y generando otros subarreglos en forma
consecutiva hasta dar con el valor a encontrar en este caso termina el algoritmo o
si el tamaño del intervalo de búsqueda queda anulado.

Este mecanismo es muy eficiente para buscar un elemento cualquiera que


esté en una lista ordenada y recibe el nombre de búsqueda binaria o dicotómica
cuya resolución se basa en algoritmo de divisiones sucesivas en mitades.

EJEMPLO

Se intenta buscar el elemento 3 en el arreglo {1,2,3,4,5,6,7,8,9}, se


realizaran los siguientes pasos.

Se toma el elemento central y se divide en dos subarreglos

5
Búsqueda mediante Transformación de Claves (Hashing)

Este método genera claves o llaves que representen de manera casi unívoca
a un documento o conjunto de datos. Este método nos permite aumentar
la velocidad de búsqueda sin necesidad de tener los elementos ordenados. Cuenta
también con la ventaja de que el tiempo de búsqueda es
prácticamente independiente del número de componentes del arreglo.

Una importante desventaja de hashing es que el conjunto de posibles claves


es siempre mayor al número de espacios disponibles. Es decir, dos o más claves
pueden asignarse a la misma dirección en la tabla de hash. Cuando dos claves se
direccionan a la misma dirección o bucket se dice que hay una colisión, y a las
claves se les denomina sinónimos.

Cuando hay colisiones se requiere de un proceso adicional para encontrar


una posición disponible para la clave. Esto obviamente degrada la eficiencia del
método, por lo que se trata de evitar al máximo esta situación. Una función de
hashing que logra evitar al 100% las colisiones es conocida como hashing
perfecto.

6
Si una empresa tiene 100 empleados, y si a cada empleado se le asigna un
código como número de identificación de 1 a 100, evidentemente puede existir
una correspondencia directa entre la clave y la dirección definida en un vector de
100 elementos.

En otro caso si la empresa tiene 80.000 empleados ya no se puede utilizar


la relación entre la clave y la dirección.
Este método consiste en la transformación de claves (dadas numéricas o
alfanuméricas) en una dirección (índice) dentro del vector.
La correspondencia entre las claves y la dirección en el vector se establece por una
dirección definida de conversión (función hash).

Métodos de transformación de claves.

Existen numerosos métodos de transformación de claves


1. Truncamiento
2. Plegamiento
3. Aritmética Modular
4. Mitad del Cuadrado

7
TRUNCAMIENTO
Ignora parte de la clave y utiliza la parte restante directamente como
índice (Considerando campos no numéricos y sus códigos numéricos) .Si las
claves por ejemplo, son enteros de 8 dígitos y la tabla de transformación
tiene 1000 posiciones entonces el primero, segundo y quinto dígitos desde la
derecha pueden formar la función de conversión.
0
Clave=72588495
:
El truncamiento es un método muy rápido pero falla para distribuir las claves
de modo uniforme.

Ejemplos:

12345678 --> 138

13602499 --> 169

71140205 --> 715

73162135 --> 715

8
PLEGAMIENTO

Consiste en la partición de la clave en diferentes partes y la


combinación de las partes en un modo conveniente (a menudo utilizando
suma o multiplicación) para obtener el índice .La clave x se divide en varias
partes donde cada parte tienen el mismo número de dígitos que la dirección
especificada.
1000 000 a 999 Fx=x1+x2+x3...+xn

625 381 94 625+381+94=1100 100

Esta técnica consiste en la partición de la clave en diferentes partes y


la combinación de las partes en un modo conveniente (a menudo utilizando suma o
multiplicación) para obtener el índice.

Ejemplo 1:

Un entero de 8 dígitos se puede dividir en grupos de tres (3), tres (3) y dos(2)
dígitos, los grupos se suman y se truncan si es necesario para que estén en el rango
adecuado de índices.

Se considera la clave 62538194 y el número de direcciones es 100:


H (clave)=625 + 381 + 94 =1100 se trunca -> H (clave)=100

Ejemplo 2:

El número de identificación de los empleados es el campo clave de una


empresa y consta de cuatro dígitos y las direcciones reales son
100. Se desea calcular las direcciones correspondientes por el método de
plegamiento.

Claves: 4205, 3355, 8148

H(4205) = 42 + 05 = 47
H(3355) = 33 + 55 = 88
H(8148) = 81 + 48 = 129 –> 129-100 =29

9
ARITMÉTICA MODULAR

Convertir la clave a un entero, dividir por el tamaño del rango del


índice y tomar el resto como resultado. La función de conversión utilizada es
MOD (Modulo o resta de división entera).
Donde el mes el tamaño del arreglo con índices de 0 hasta n-1. Los valores
de la función y direcciones van de 0 a n-1 ligeramente menor al tamaño del
array. La mejor elección de los módulos son los números primos.
M=100 F(x) = x mod 100
X=234661234
F(x) =234661234 mod 100 =34
La clave de búsqueda en una cadena de caracteres tal como el
nombre para obtener direcciones de conversión el método más simple es
asignar a cada caracter de la cadena un valor entero (ejemplo A=1, B=2,
C=3, etc.) y sumar los valores de los caracteres en la cadena al resultado se
le aplica entonces el modulo.

Ejemplos:
12345678 --> 7
13602499 --> 1
71140205 --> 6
73062138 --> 6

Ejemplo1:
Un vector T tiene cien posiciones (0..100). Se tiene que las claves
de búsqueda de los elementos de la tabla son enteros positivos.

Calcular la dirección si la clave es: 234661234.

Si clave=234661234
Y el tamaño del rango del vector = 101. Entonces:
234661234 MOD 101 = 56

10
Ejemplo2:
Se tiene un array con 100 posiciones para guardar las claves de los
empleados. Aplicar las funciones para cada uno de los siguientes
empleados:

3205 7148 2345

Usando la Aritmética Modular (Método de la división)


Escojo un numero primo próximo a 100 (m=97). Aplico la función hash H(x)
=X/m

H(3205)=4 H(7148)=67 H(2345)=17

EJEMPLO 3:
Que se debe hacer cuando las claves son distintas y la dirección
es la misma en el caso del método de división.

El tamaño del arreglo N=100, sus direcciones van de 1-100.

Sea K1 = 7259 H(K1) = (7259 mod 100)+1=60

K2 = 9359 H(K2) = (9359 mod 100)+1=60

Claves distintas y direcciones iguales estamos en presencia de una colisión.

Se aplica N igual a un valor primo en lugar de utilizar el N=100

H(K1)=(7259 mod 97) +1 = 82

H(K2)=(9359 mod 97) + 1 = 48

Con N= 97 se ha eliminado la colisión ya que las direcciones ahora son


distintas.

11
MITAD DEL CUADRADO

Este método consiste en calcular el cuadrado de la clave x. La


función de conversión se define como F(x)=C donde C se obtiene eliminado
dígitos de ambos extremos de x2; para todas las claves se deben usar las
mismas posiciones de x2. Ejemplo:
Una empresa tiene 80 empleados y cada uno de ellos tiene un número de
identificación de 4 dígitos y el conjunto de direcciones de memoria varia en
un rango de 0 a 100 calcular las direcciones que se obtendrán al aplicar
mitad del cuadrado.

Clave x x2 4 y 5
4205 176 82 025 82
7148 510 93 904 93
3350 112 22 500 22

Ejemplos:

136*136=18496 --> 84

730*730=532900 --> 29

301*301=90601 --> 06

625*625=390625 --> 06

12
Cuadro comparativo

Búsqueda por transformación de claves (Hashing)


Búsqueda lineal Búsqueda binaria
Truncamiento Plegamiento Aritmética modular Mitad del cuadrado

Este método de búsqueda Requiere que el vector se

no requiere ningún encuentre ordenado para Los registros del campo clave no necesitan estar ordenados de acuerdo a los valores del campo clave.

requisito por parte del realizar la búsqueda.


Orden del vector
vector.

Toma el valor a encontrar Examina primero el Ignora parte de la consiste en la partición Convierte la clave a un entero, Consiste en calcular el

y lo compara con cada elemento central del vector, clave y utiliza la de la clave en se divide por el tamaño del cuadrado de la clave x.

uno de los valores hasta comparándolo si no es parte restante diferentes partes y la rango del índice y toma el resto La función de conversión se

que lo encuentra o divide el vector y sigue con directamente como combinación de las como resultado. La función que define como: H(x)=c

Características termina de leer el vector las subpartes, hasta que índice partes en un modo se utiliza es el MOD(módulo o Donde c se obtiene

encuentra el valor o termine conveniente (a menudo resto de la división entera). eliminando dígitos a ambos

el vector. utilizando suma o lados de x2

Multiplicación) para

obtener el índice.

No encontrar en el vector No encontrar en el vector el Cuando existen Cuando la última parte Cuando el vector es de un Cuando la clave a ordenar es

el valor a buscar. valor a buscar. claves diferentes y que depende del largo tamaño definido y el resultado impar se toma el digito del

los índices del número, si es par y es mayor que ese tamaño se le medio y el anterior o se

obtenidos son las divisiones sea resta el mismo. puede tomar el siguiente,

iguales en número impar quedara según sea definido el


Excepciones
diferentes la última división algoritmo.

búsquedas diferente, lo mismo en

caso contrario y según

como se definido el

algoritmo.

13
Conclusión
Debido a las propiedades reversibles que caracterizan a la aritmética
modular, es posible utilizarla en operaciones de cifrado y descifrado, al tener su
función inversa, pudiendo lograr tanto la codificación y decodificación de
información. Podemos darnos cuenta de la importancia que presenta la aritmética
modular en la seguridad, en el ámbito de la información. Es interesante también
como se complementa con las operaciones matemáticas.
En este trabajo de investigación abordamos el tema de la aritmética modular,
en conjunto con otros temas relacionados con los algoritmos de búsqueda,
exponiendo ejemplos y dando un claro ejemplo de su funcionamiento.

14

Vous aimerez peut-être aussi