Curiosidad sobre __hash__()

Jesus Cea jcea en jcea.es
Lun Feb 9 20:57:00 CET 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Francesc Alted wrote:
> Ya veo.  Sin embargo, no entiendo porqué se dice que dividiendo por 8 la 
> distribución de hashes es más homegénea (dividir por una constante no 
> veo que afecte a la distribución de una función).

El tema es que si __hash__() es la dirección de memoria, ésta estará
alineada, normalmente en múltiplo de 4 u 8 bytes. Es decir, los 2 o 3
bits de menor peso serán siempre cero. No nos ayudan nada a mejorar la
aleatoriedad del hash. Diviendo por 8 tiramos esos bits y hacemos sitio
para otros.

> O sea, que de manera consistente, la hash sin dividir parece que saca 
> más rendimiento (un 15%) que la dividida por 8.  No sé, lo mismo el 
> rendimiento depende de la plataforma (o no he hecho bien los cálculos).

Hombre, es que dividir por 8 en tu código también consume recursos. En
tu caso hay ocho millones de divisiones "extras".

Estamos hablando de hacer esto en C, no en Python. No consume recursos y
la dispersión de bits de "__hash__()" es mejor.

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea en jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea en jabber.org         _/_/    _/_/          _/_/_/_/_/
.                              _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBSZCKU5lgi5GaxT1NAQL1jwP/dXqcwDtce+IuHaV9XF8IJ3/ILLL6Tsdb
wt4Qbx4VsJcAEICHaAqi/0+GtGKLr4SKT3JscdhonOiin+322aobvL01fAWkt8/B
qzIJty7bEl18Kxc6HcFayaxon1MB3ipcMLXdUybHbiK303f80BTuvA13bsYBQibF
yMHgmxbI378=
=qTNW
-----END PGP SIGNATURE-----
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es