def isEmpty(map): """ Informa si la tabla de hash se encuentra vacia Args: map: El map Returns: True: El map esta vacio False: El map no esta vacio Raises: Exception """ try: empty = True for pos in range(lt.size(map['table'])): entry = lt.getElement(map['table'], pos + 1) if (entry['key'] is not None and entry['key'] != '__EMPTY__'): empty = False break return empty except Exception as exp: error.reraise(exp, 'Probe:isEmpty')
def increaseKey(iheap, key, newindex): """ Incrementa el indice de un llave Args: iheap: El heap a revisar key: la llave a incrementar newindex: El nuevo indice de la llave Returns: El numero de elementos Raises: Exception """ try: val = map.get(iheap['qpMap'], key) elem = lt.getElement(iheap['elements'], val['value']) elem['index'] = newindex lt.changeInfo(iheap['elements'], val['value'], elem) sink(iheap, val['value']) return iheap except Exception as exp: error.reraise(exp, 'indexheap:increaseKey')
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 Args: map: El map a donde se guarda la pareja key: la llave asociada a la pareja value: el valor asociado a la pareja Returns: El map Raises: Exception """ hash = hashValue(map, key) bucket = lt.getElement(map['table'], hash) entry = me.newMapEntry(key, value) pos = lt.isPresent(bucket, key) if pos > 0: # La pareja ya exista, se reemplaza el valor lt.changeInfo(bucket, pos, entry) else: lt.addLast(bucket, entry) # La llave no existia map['size'] += 1 return map
def delMin(iheap): """ Retorna el menor elemento del heap y lo elimina. Se reemplaza con el último elemento y se hace sink. Args: iheap: El heap a revisar Returns: La llave asociada al mayor indice Raises: Exception """ try: if (iheap['size'] > 0): minIdx = lt.getElement(iheap['elements'], 1) exchange(iheap, 1, iheap['size']) iheap['size'] -= 1 sink(iheap, 1) map.remove(iheap['qpMap'], minIdx['key']) return minIdx['key'] return None except Exception as exp: error.reraise(exp, 'indexheap:delMin')