def put (map, key , value): """ Ingresa una pareja llave,valor a la tabla de hash. Si la llave ya existe en la tabla, se reemplaza el valor. Es necesario proveer una función de comparación para las llaves. """ hash = hashValue (map, key) # Se obtiene el hascode de la llave entry = me.newMapEntry (key,value) pos = findSlot (map, key, hash, map['comparefunction']) # Se encuentra la posición correspondiente a hash lt.changeInfo (map['table'], abs(pos), entry) # Se reemplaza el valor anterior (puede ser None) con el nuevo valor map['size'] += 1
def remove(map, key, comparefunction): """ Elimina la pareja llave,valor, donde llave == key. Es necesario proveer la función de comparación entre llaves """ hash = hashValue(map, key) pos = findSlot(map, key, hash, comparefunction) if pos > 0: entry = me.newMapEntry('__EMPTY__', '__EMPTY__') lt.changeInfo(map['table'], pos, entry) map['size'] -= 1
def test_MapEntry(self): """ """ key = 'book1' value = 'Title 1' entry = me.newMapEntry(key, value) print(entry) print(me.getKey(entry)) print(me.getValue(entry))
def put(map, key, value, comparefunction): """ Ingresa una pareja llave,valor a la tabla de hash. Si la llave ya existe en la tabla, se reemplaza el valor. Es necesario proveer una función de comparación para las llaves. """ hash = hashValue(map, key) bucket = lt.getElement( map['table'], hash ) #Se obtiene la lista de elementos en la posicion hash de la tabla entry = me.newMapEntry(key, value) pos = lt.isPresent(bucket, key, comparefunction) if pos > 0: #La pareja ya exista, se reemplaza el valor con la nueva información lt.changeInfo(bucket, pos, entry) else: lt.addLast(bucket, entry) #La llave no existia, se crea una nueva entrada map['size'] += 1
def newMap( capacity, prime, comparefunction): """ Crea una tabla de hash con capacidad igual a capacity (idealment un numero primo). prime es un número primo utilizado para el cálculo de los codigos de hash, si no es provisto se utiliza el primo 109345121. """ scale = rd.randint(1, prime-1) + 1 shift = rd.randint(1, prime) table = lt.newList('ARRAY_LIST') for _ in range(capacity): entry = me.newMapEntry(None, None) lt.addLast (table, entry) hashtable = { 'prime': prime, 'capacity': capacity, 'scale':scale, 'shift':shift, 'table':table, 'comparefunction':comparefunction, 'size':0, 'type':'PROBING'} return hashtable