Pregunta interesante, veamos algunos casos específicos.
Deje que haya claves, bits , bits en total y elementos insertados. Primero intentaremos encontrar una función que es la probabilidad de que ocurra un estado.knonntotalmP(k,non,ntotal,m)
Si , entonces debe ser , es decir, es imposible.km<nonP(k,non,ntotal,m)0
Si , entonces estamos buscando la probabilidad de que los hashes de caigan en el mismo cubo, el primero puede marcar dónde deben ir los otros. Por lo tanto, queremos encontrar la probabilidad de que los hashes caigan en un cubo específico.non=1kmkm−1
P(k,1,ntotal,m)=(1/ntotal)(km−1)
Esos son los casos realmente simples. Si entonces queremos encontrar la probabilidad de que los hashes caigan en cubos distintos y al menos caiga en cada uno. Hay pares de cubos y la probabilidad de que los hashes caigan en un específico es por lo que la probabilidad de que los hashes caigan a cubos es:non=2km21ntotal(ntotal−1)2(2/ntotal)km2
ntotal(ntotal−1)(2/ntotal)km
Ya sabemos la probabilidad de que caigan en cubo, así que restemos eso para dar la probabilidad de que caigan exactamente en .12
P(k,2,ntotal,m)=ntotal(ntotal−1)(2/ntotal)km−(1/ntotal)(km−1)
Creo que podemos generalizar esto ahora.
P(k,non,ntotal,m)=(ntotalnon)(non/ntotal)km−∑i<noni=1P(k,i,ntotal,m)
No estoy exactamente seguro de cómo hacer que esta fórmula sea más adecuada para el cálculo. Implementado ingenuamente, daría como resultado un tiempo de ejecución de tiempo exponencial, aunque es trivial, a través de la memorización, lograr un tiempo lineal. Es solo un caso de encontrar el más probable . Mi instinto dice que habrá un solo pico, por lo que es posible encontrarlo muy rápidamente, pero ingenuamente, definitivamente puedes encontrar el m más probablemente en .mO(n2)