Jump to content

o que é hash table


eduardo_souza
 Share

Recommended Posts

Quando falei sobre a duvida de hash table, eu queria saber como usar e nao o que era. Não me interesso em saber o que, quero saber como usa essa m****

O que é hash table e como usá-la em c++?

Bem eu sei que o meu português não é o melhor mas eu acho que "o que é hash table?" responde-se "hash table é". Recomendo-te moderação na linguagem "m****" não é apropriado para um forum deste.
Link to comment
Share on other sites

Podes sempre adicionar um campo "índice" e quando precisares de eles ordenados ires buscar os dados pela forma normal.

Explica melhor como é que consegues obter os dados ordenados de uma forma eficiente sff. Este "campo índice" parece-me muito vago.

O que tinha pensado (e acho que se costuma usar) é uma árvore auxiliar com esta informação.

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Existem umas colecções q ordem logo na inserção e são extremamente eficientes.

No caso do C# tens por exemplo o SortedSet, em java tb há um set q faz isso.

Em c++ não me lembro, mas pesquisa por Set em c++, pode ser q encontres alguma coisa.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Uma hashtable é uma estrutura de dados, não é um propriamente uma peça de software. Uma implementação de uma hashtable que inclua coisas como índices numéricos e afins, deixa de ser uma hashtable para ser tambem outra coisa.

Outra coisa que acho curiosa é que quando se fala nestes temas vem sempre o pessoal com a questão da performance e dos microsegundos que se podem poupar ou de algumas dezenas de bytes por se usar esta ou aquela estrutura de dados.

Têm noção que em 95%+ dos casos, o que se ganha em termos de facilidade de implementação é ridiculamente mais significativo que esses milisegundos?

Exemplo, se quiseres por exemplo manipular dados com índices literais, podes usar uma hashtable para tornares o código mais claro e mais facil.

Exemplo

$calorias[pera] = 40000;
$calorias[chocolate] = 15000;
$calorias[agua] = zero

$alimento = 'chocolate'

print "o alimento ".$alimento." tem ". $calorias[$alimeto] . "calorias.";

acho que isto é bem mais claro do que andar com índices numéricos para trás e para a frente. Se é mais rápido, tenho que chamar ou o flash ou o super-homem e perguntar-lhes.

Link to comment
Share on other sites

Existem umas colecções q ordem logo na inserção e são extremamente eficientes.

No caso do C# tens por exemplo o SortedSet, em java tb há um set q faz isso.

Em c++ não me lembro, mas pesquisa por Set em c++, pode ser q encontres alguma coisa.

Em C++ existe a classe set da STL. É eficiente, mas pode não ser suficiente. Uma hash table é muito mais eficiente para inserções e pesquisas (e.g. para dicionários), mas, a meu ver, não para obter os elementos ordenados.

Outra coisa que acho curiosa é que quando se fala nestes temas vem sempre o pessoal com a questão da performance e dos microsegundos que se podem poupar ou de algumas dezenas de bytes por se usar esta ou aquela estrutura de dados.

Pedrotuga, isso depende sempre o tamanho do problema. Para problemas relativamente pequenos pode ser irrelevante usar uma ou outra coisa. Claro que se deve optar pelo mais simples possível. No entanto, considerando um dicionário, se tiveres 100.000 ou 1.000.000 palavras a diferença não é simplesmente de milisegundos e pode condicionar a tua aplicação.

edit:  já agora, aproveito para recordar um post de um empregado da google, onde disse que tava a procurar formas de melhorar um algoritmo de O(N log N) para O( N ). Desta forma, poupariam 1 mês!! de processamento 🙂

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Sim tudo bem, mas tipo, as hashtables são usadas em 99% dos casos por motivos de simplicidade de código como o que indiquei. Raríssimas são as vezes que questões de performance ditam a sua utilização. Eu uso hashtables diariament e não me lembro de uma vez que o tenha feito por motivos de performance. No entanto 90%+ das discussões são sobre a sua performance.

É falhar o alvo. Keep it simple, not fancy.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.