La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,

Presentaciones similares


Presentación del tema: "1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,"— Transcripción de la presentación:

1 1

2 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario, devolver el nombre del que llama –los números de teléfonos están en el rango de 0 a R = 10 10 -1 –n es el número de los números de teléfonos usados –se desea realizar esto de la manera más eficiente Conocemos dos formas para diseñar este diccionario: -un árbol de búsqueda balanceado (AVL, red-black) con el número de teléfono como llave tiene un tiempo de consulta O(log n) y un espacio O(n). Buen uso del espacio y tiempo de búsqueda, pero se puede reducir el tiempo de búsqueda a constante? -un array indexado por los números de teléfonos tiene un tiempo de consulta óptimo de O(1), pero requiere una gran cantidad de espacio: O(n + R) Pedro

3 3 Otra Solución Una Tabla Hash es una solución alternativa con un tiempo de consulta esperado de O(1) y espacio O(n + N), donde N es el tamaño de la tabla. Como un array, pero con una función que proyecta el rango amplio de llaves en uno más pequeño -e.g., tomar la llave original, mod el tamaño de la tabla, y usarlo como indice Insertar telefono (401-863-7639, Pedro) en la tabla de tamaño 5 -4018637639 mod 5 = 4, pro tanto (401-863-7639, Pedro) se almacena en el cajetin 4 de la tabla Después de varias inserciones pueden existir colisiones! Pedro

4 4 Resolución de Colisiones Usar encadenamiento -Configurar listas de elementos con el mismo índice Complejidad O(n/N)

5 5 De Llaves a Indices La proyección de llaves a índices de una tabla hash se llama funcion hash Una función hash usualmente es la composición de dos proyección, una hash code map y otra compression map. –Un requerimiento esencial de una función hash es proyectar llaves iguales al mismo índice –Una función hash “buena” minimiza la probabilidad de colisiones Java tiene un mértodo hashCode() para la clase Object, que normalmente retorna la dirección de 32-bit de memoria del objeto. Este código hash trabaja mal para objetos Integer y String

6 6 Proyección de códigos Hash Integer cast: para tipos numéricos de 32 bits or less, suma de Componentes: para tipos numéricos acumulación Polynomica: en cadenas, combinar los valores (ASCII or Unicode) a 0 a 1... a n-1 como coeficientes de un polinomio: a 0 + a 1 x +...+ x n-1 a n-1 -Se usa la regla de Horner para evaluar para un valor fijo de x: a 0 + x (a 1 +x (a 2 +... x (a n-2 + x a n-1 )... )) -Si x = 33, 37, 39, o 41produce como mucho 6 colisiones para un vocabulario de 50,000 palabras

7 7 Proyección de Compression comunes Division: h(k) = |k| mod N –N = 2 k es mala –el tamaño de la tabla N se escoge como número primo Multiplicar, Sumar, y Dividir (MSD): h(k) = |ak + b| mod N

8 8 Tratamiento de Colisiones Encadenamiento Direccionamiento abierto -Doble Hashing -Prueba lineal


Descargar ppt "1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,"

Presentaciones similares


Anuncios Google