Sei sulla pagina 1di 3

Algoritmos

Trabajo Practico No 9

Cristhian Martinez1 , Marcos Ibarra2

Núcleo de Investigación y Desarrollo Tecnológico–FPUNA


Universidad Nacional de Asunción–San Lorenzo
1
cristhian jm@hotmail.com, 2 ibarrag84@gmail.com

Abril 2019

Problema 11.3-3: Considere una versión del método de división en el que h(k) = k mod m, donde m = 2p − 1 y
k es una cadena de caracteres interpretada en base 2p . Demuestra que si podemos derivar la cadena x de la cadena
y permutando sus caracteres, entonces x e y tienen el mismo valor hash. Dé un ejemplo de una aplicación en la que
esta propiedad no serı́a deseable en una función hash.

Solución
En primer lugar, observamos que podemos generar cualquier permutación mediante una secuencia de intercam-
bios de pares de caracteres. Se puede probar esta propiedad formalmente, pero informalmente, considerar que tanto
el heapsort como el quicksort funcionan intercambiando pares de elementos y que tienen que ser capaces de producir
cualquier permutación de su matriz de entrada. Por lo tanto, basta con mostrar que si la cadena x puede derivarse
de la cadena y intercambiando un solo par de caracteres, entonces x e y tienen el mismo valor.

Denotemos el carácter i-ésimo en x por xi , y de manera similar para y. La interpretación de x en base 2p es


n−1 n−1 n−1
xi 2ip , y ası́ h(x) = xi 2ip mod (2p − 1). Similarmente h(y) = yi 2ip mod (2p − 1)
P P P
i=0 i=0 i=0

Suponga que x e y son cadenas idénticas de n caracteres excepto que los caracteres en las posiciones a y b son
intercambiados: xa = yb y ya = xb . Sin pérdida de generalidad, dejemos a > b. Tenemos
n−1
X n−1
X
h(x) − h(y) = xi 2ip mod (2p − 1) − yi 2ip mod (2p − 1)
i=0 i=0

Dado 0 ≤ h(x), h(x) < 2p − 1, tenemos que −(2p − 1) < h(x) − h(y) < 2p − 1. Si mostramos que (h(x) − h(y))
mod (2p − 1) = 0, entonces h(x) = h(y).

Dado que las sumas en las funciones hash son las mismas, excepto para los ı́ndices a y b, tenemos

(h(x) − h(y)) mod (2p − 1) = ((xa 2ap + xb 2bp ) − (ya 2ap + yb 2bp )) mod (2p − 1)
= ((xa 2ap + xb 2bp ) − (xa 2ap + xb 2bp )) mod (2p − 1)
= ((xa − xb )2ap − (xa − xb )2bp ) mod (2p − 1)
= ((xa − xb )(2ap − 2bp )) mod (2p − 1)
= ((xa − xb )2bp (2(a−b)p − 1)) mod (2p − 1)
Dada la serie geométrica
a−b−1
X 2(a−b)p − 1
2pi = (1)
i=0
2p − 1
a−b−1 
Si multiplicamos la ecuación 1 por 2p − 1, obtendremos 2(a−b)p − 1 =
P pi
2 (2p − 1). Por lo tanto,
i=0
a−b−1
! !
X
p bp pi p
(h(x) − h(y)) mod (2 − 1) = (xa − xb )2 2 (2 − 1) mod (2p − 1)
i=0
p
Como uno de los factores es 2 − 1, entonces
(h(x) − h(y)) mod (2p − 1) = 0

1
Por lo tanto, h(x) = h(y).

Ejemplo de Aplicación

Un diccionario que contiene palabras expresadas por código ASCII puede ser uno de estos ejemplos cuando cada
carácter del diccionario se interpreta en base 28 = 256 y m = 255. El diccionario, por ejemplo, puede tener palabras
“STOP”, “TOPS”, “SPOT”, “POTS”, todas ellas en la misma ranura.

Un diccionario de ADN también puede ser uno de estos ejemplos. Como sabemos, un ADN es una secuencia
de cuatro bases, “Adenina”, “Citosina”, “Guanina”, “Timina”, que puede ser interpretada en base 22 . Ası́ que los
siguientes ADNs están todos metidos en la misma ranura.
“ACCTG”, “GTCAC”, “TCAGC”, “GACCT”, . . .

Problema 11.4-1: Considere insertar las claves 10, 22, 31, 4, 15, 28, 17, 88, 59 en una tabla hash de longitud
m = 11 utilizando el direccionamiento abierto con la función hash auxiliar h0 (k) = k. Ilustre el resultado de insertar
estas claves usando sondeo lineal, usando sondeo cuadrático con c1 = 1 y c2 = 3, y usando doble hashing con
h1 (k) = k y h2 (k) = 1 + (k mod (m − 1)).

Solución

Usamos Tt para representar cada marca de tiempo t comenzando con i = 0, y si encontramos una colisión,
entonces iteramos i de i = 1 a i = m?1 = 10 hasta que no haya colisión.

Prueba Lineal :

Prueba Cuadrático: Se verá idéntico hasta que se produzca una colisión al insertar el quinto elemento

Tenga en cuenta que no hay forma de insertar el elemento 59 ahora, porque las compensaciones que provienen
de c1 = 1 y c2 = 3 solo pueden ser iguales, y se requerirı́a un desplazamiento impar para insertar 59 porque 59
mod 11 = 4 y todas las posiciones vacı́as están en ı́ndices impares.

2
Doble hashing:

Potrebbero piacerti anche