diff --git a/README.md b/README.md index 67750c61..f25896d0 100644 --- a/README.md +++ b/README.md @@ -2128,6 +2128,59 @@ Com o objetivo de alcançar uma abrangência maior e encorajar novas pessoas a c + + Hash Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/python/hash_table.py b/src/python/hash_table.py new file mode 100644 index 00000000..388abfd8 --- /dev/null +++ b/src/python/hash_table.py @@ -0,0 +1,86 @@ +""" +Implementação de uma hashtable +""" + +import traceback + + +class HashTable: + + def __init__(self, size=10): + self.size = size + self.tables = [[] for _ in range(self.size)] + + def hashing(self, key): + return hash(key) % self.size + + def __setitem__(self, key, value): + hash_key = self.hashing(key) + bucket = self.tables[hash_key] + if bucket: + for index, k_value in enumerate(bucket): + k, v = k_value + if key == k: + bucket[index] = key, value + return + bucket.append((key, value)) + + def __getitem__(self, key): + hash_key = self.hashing(key) + bucket = self.tables[hash_key] + if bucket: + for index, item in enumerate(bucket): + k, value = item + if key == k: + return value + raise KeyError(key) + + def __delitem__(self, key): + hash_key = self.hashing(key) + bucket = self.tables[hash_key] + if bucket: + for index, item in enumerate(bucket): + k, value = item + if key == k: + del bucket[index] + return + raise KeyError(key) + + +if __name__ == '__main__': + + # Cria as tabelas de dispersão + hash_table = HashTable() + + # Insere as chaves e valores + for i in range(143): + hash_table[i] = hex(round(i * 23)) + + # Deletar item + print("Deletar chave 0 de valor: ", hash_table[0]) + del hash_table[0] + + # Procurar item + print('Valor da chave 23: ', hash_table[23]) + + # Subscrever um valor de uma chave + hash_table[1] = 'TESTE DE SUBSCREVER' + + # Exibir dispersão + for i, table in enumerate(hash_table.tables): + print("Table {index} -> {table} Len -> {len}". + format(index=i + 1, + table=table, + len=len(table))) + + # Tentar deletar uma chave que não existe + try: + del hash_table[493084] + except KeyError: + print(traceback.print_exc()) + + # Tentar acessar uma chave que não existe + try: + print(hash_table[493084]) + except KeyError: + print(traceback.print_exc())