Aritmetica Modular

14
1 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.

Transcript of Aritmetica Modular

Page 1: Aritmetica Modular

1

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.

Page 2: Aritmetica Modular

2

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.

Page 3: Aritmetica Modular

3

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:

Page 4: Aritmetica Modular

4

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).

Page 5: Aritmetica Modular

5

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

Page 6: Aritmetica Modular

6

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.

Page 7: Aritmetica Modular

7

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

Page 8: Aritmetica Modular

8

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

Page 9: Aritmetica Modular

9

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

Page 10: Aritmetica Modular

10

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

Page 11: Aritmetica Modular

11

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.

Page 12: Aritmetica Modular

12

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

Page 13: Aritmetica Modular

13

Cuadro comparativo

Búsqueda lineal Búsqueda binaria

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

Truncamiento Plegamiento Aritmética modular Mitad del cuadrado

Orden del vector

Este método de búsqueda

no requiere ningún

requisito por parte del

vector.

Requiere que el vector se

encuentre ordenado para

realizar la búsqueda.

Los registros del campo clave no necesitan estar ordenados de acuerdo a los valores del campo clave.

Características

Toma el valor a encontrar

y lo compara con cada

uno de los valores hasta

que lo encuentra o

termina de leer el vector

Examina primero el

elemento central del vector,

comparándolo si no es

divide el vector y sigue con

las subpartes, hasta que

encuentra el valor o termine

el vector.

Ignora parte de la

clave y utiliza la

parte restante

directamente como

índice

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.

Convierte la clave a un entero,

se divide por el tamaño del

rango del índice y toma el resto

como resultado. La función que

se utiliza es el MOD(módulo o

resto de la división entera).

Consiste en calcular el

cuadrado de la clave x.

La función de conversión se

define como: H(x)=c

Donde c se obtiene

eliminando dígitos a ambos

lados de x2

Excepciones

No encontrar en el vector

el valor a buscar.

No encontrar en el vector el

valor a buscar.

Cuando existen

claves diferentes y

los índices

obtenidos son

iguales en

diferentes

búsquedas

Cuando la última parte

que depende del largo

del número, si es par y

las divisiones sea

número impar quedara

la última división

diferente, lo mismo en

caso contrario y según

como se definido el

algoritmo.

Cuando el vector es de un

tamaño definido y el resultado

es mayor que ese tamaño se le

resta el mismo.

Cuando la clave a ordenar es

impar se toma el digito del

medio y el anterior o se

puede tomar el siguiente,

según sea definido el

algoritmo.

Page 14: Aritmetica Modular

14

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.