[Cascavel-pm] algorítmo de busca e ordenação
Luis Campos de Carvalho
monsieur_champs em yahoo.com.br
Sexta Outubro 29 07:10:12 CDT 2004
Alceu R. de Freitas Jr. wrote:
> Olá monges,
> Alguém saberia me dizer quão eficiente é fazer uma
> busca por um item dentro de um hash?
Aproximadamente O(1), ou constante.
No máximo, dependendo do seu algorítmo de calculo do hash index,
alguma coisa perto de O((1/n)(Ln(n))), muito pequeno. Ah! Este algorítmo
é do livro do D. Knuth.
> Por exemplo,
> tenho um hash com nomes de alunos com chaves, e suas
> notas da última prova como valor.
Certo...
> Como o Perl faz a ordenação/busca por esses valores?
Os valores são indexados "diretamente".
O Perl calcula internamente o hash index correspondente a cada chave
e retorna o valor apontado por este index para você, e tudo acontece
como se o hash table fosse um array:
$value = $hash{$index};
Para obter todos os valores, você pode usar o operador "keys":
foreach $value( keys %hash ){
# do something...
}
Para ordenar os valores de acordo com um criterio qualquer,
implementado na sub &by_order, diga
@ordered_keys = sort \&by_order, keys %hash;
Ou, se você quiser os valores ordenados pela chave, pode fazer
@notas = map { $hash{$_} } sort \&by_order, keys %hash;
> Em que situações é possível utilizar algorítmos mais
> performáticos?
É muito complicado ter performance maior do que um hash table neste
tipo de aplicação. Acredito que uma forma de fazer isto possa ser
implementar seu próprio algorítmo de hash table, usando uma função de
hash especializada (para ter ganhos ínfimos, IMHO).
> "Todo mundo precisa crer em algo. Creio que vou tomar outra cerveja."
> Grouxo Marx
Hey! Eu me lembro disso!
Foi do primeiro encontro dos São Paulo Perl Mongers... :-)
A gente bem que poderia repetir a dose...
Eu estou quase acreditando que o pessoal da lista não curte um pub...
Putamplexos!
--
=======================================================
Luis Campos de Carvalho is BsC in Computer Science,
Certified Oracle DBA, UNIX and Linux lover, Perl
Fanatic and Leader of the Sao Paulo Perl Mongers
http://br.geocities.com/monsieur_champs/
=======================================================
Mais detalhes sobre a lista de discussão Cascavel-pm