Curiosidad sobre __hash__()

Rodrigo Gallardo rodrigo en nul-unu.com
Mie Feb 4 15:07:45 CET 2009


On Wed, Feb 04, 2009 at 10:49:42AM +0100, Francesc Alted wrote:
> A Wednesday 04 February 2009, Pepe Aracil escrigué:
> > Hola lista.
> >
> > Me ha sorprendido que la función hash "solo"
> > devuelva un entero.
> >
> > (1,2,3,4).__hash__()
> > 89902565
> >
> > ¿No os parece que aumenta mucho las probabilidades
> > de que se produzca una colisión no deseada en un
> > diccionario por ej.?
> 
> Bueno, si la función hash está bien elegida, un entero de 32-bit da para 
> 2**31 hash diferentes, y ya tendria que ser grande el diccionario para 
> que esto sea un problema.

Esto es la "paradoja del cumpleaños"

http://en.wikipedia.org/wiki/Birthday_paradox
http://es.wikipedia.org/wiki/Paradoja_del_cumplea%C3%B1os

Suponiendo que la distribución de los hash es uniforme (lo cual
depende de los datos a guardar y de la implementación exacta de la
función) tenemos que con 32 bits, un diccionario de 2^16 = 65536
entradas tiene una probabilidad de 50% de tener una colisión. Con 64
bits, necesita tener 2^32 entradas para la misma probabilidad.
_______________________________________________
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