Edición de «Final 03/05/17 (Algoritmos II)»

De Cuba-Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 48: Línea 48:


La forma de arreglarlo sería convertir una de las operaciones en generador.
La forma de arreglarlo sería convertir una de las operaciones en generador.
Además, las operaciones <code>disminuir hielo</code> y <code>incrementar_agua</code> no respetan el comportamiento automático que el enunciado da a entender.


b) El TAD podría estar mejor. En la operación <code>empujar</code> no hace falta que se pasen la distancia y el i, ya que una determina la otra inequívocamente. Lo arreglaría tener solo como parámetro uno de los dos.
b) El TAD podría estar mejor. En la operación <code>empujar</code> no hace falta que se pasen la distancia y el i, ya que una determina la otra inequívocamente. Lo arreglaría tener solo como parámetro uno de los dos.


== Ejercicio 2 ==
== Ejercicio 2 ==
Supongamos que extendemos el TAD Diccionario agregándole una operación RestricciónDeRango(x,y), con x<=y, que elimina del diccionario todos los valores que son menores que x o mayores que y. Por ejemplo, si las claves son reales, luego de una operación RestricciónDeRango(x,y) el diccionario contendría solamente las claves en el intervalo cerrado [x,y]. Proponga una estructura de datos para implementar eficientemente tanto las operaciones tradicionales de diccionario como la nueva operación, considerando los siguientes casos:
Supongamos que extendemos el TAD Diccionario agregándole una operación RestricciónDeRango(x,y), con x<=y, que elimina del diccionario todos los valores que son mayores que x o menores que y. Por ejemplo, si las claves son reales, luego de una operación RestricciónDeRango(x,y) el diccionario contendría solamente las claves en el intervalo cerrado [x,y]. Proponga una estructura de datos para implementar eficientemente tanto las operaciones tradicionales de diccionario como la nueva operación, considerando los siguientes casos:
 
a) Se puede asumir que x e y están en el diccionario.
 
b) No se puede asumir que x e y están en el diccionario.


=== Soluciones ===
a) Se ruede asumir que x e y están en el diccionario.
a) Skip-list?


b) Skip-list?
b) No se puede asumir que x e y están en el diccionario.


== Ejercicio 3 ==
== Ejercicio 3 ==
Línea 75: Línea 68:
== Ejercicio 5 ==
== Ejercicio 5 ==
Suponiendo que un programador tiene un error en una implementación de un diccionario con hashing doble, de modo que una de las dos funciones devuelve el mismo valor (distinto de 0), describir lo que sucede en cada situación (cuando es la primera función la que está mal y cuando lo es la segunda).
Suponiendo que un programador tiene un error en una implementación de un diccionario con hashing doble, de modo que una de las dos funciones devuelve el mismo valor (distinto de 0), describir lo que sucede en cada situación (cuando es la primera función la que está mal y cuando lo es la segunda).
=== Solución ===
En el hashing doble, el hash se calcula como <math>h(k,i) = (h_1(k) + i * h_2(k)) mod |T|</math>, con <math>k</math> siendo la clave, <math>i</math> siendo el número de intento, y <math>|T|</math> siendo la longitud del arreglo de claves.
En el primer caso, la función de hash tendría colisiones siempre en el primer intento, ya que en ese caso, <math>h(k,0) = h_1(k) mod |T|</math>, y <math>h_1(k)</math> siempre devolvería el mismo valor.
Luego, si hay una colisión para <math> h(k, i) = c + i * h_2(k) </math>, siendo <math> h_1(k) = c </math>, se produciría aglomeración secundaria, ya que:
<math>\forall i,  h_1(k1) == h_1(k2) \implies h(k1,i) == h(k2,i) </math>.
En el segundo caso, ni bien haya una colisión en <math>h_1</math>, habrá una colisión en la función de hash total, ya que <math>h(k,i) = (h_1(k) + i * constante) mod |T|</math>. Esto produciría aglomeración primaria.
[[Category: Finales]]
Ten en cuenta que todas las contribuciones a Cuba-Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Cuba-Wiki:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: