Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
    def test_MapEntry(self):
        """
         
        """
        key = 'book1'
        value = 'Title 1'
        entry = me.newMapEntry(key, value)

        print(entry)
        print(me.getKey(entry))
        print(me.getValue(entry))
Esempio n. 4
0
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
Esempio n. 5
0
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