興味深い質問、いくつかの特定のケースを見てみましょう。
そこであるとするキー、N 、O 、N上のビット、N T O 、T Lの合計とのビットM挿入要素。最初に、状態が発生する確率である関数P (k 、n o n、n t o t a l、m )を見つけようとします。knonntotalmP(k,non,ntotal,m)
場合、次にP (K 、N oは、N、N T O 、T 、L、Mが)でなければならない0、すなわち、それは不可能です。km<nonP(k,non,ntotal,m)0
場合、k m 個のハッシュが同じバケットに入る可能性を探しています。最初のハッシュは他のハッシュがどこに行くべきかをマークできます。そのため、k m − 1ハッシュが特定のバケットに入る確率を見つけたいと思います。non=1kmkm−1
P(k,1,ntotal,m)=(1/ntotal)(km−1)
それは本当に簡単なケースです。場合、k mが2つの異なるバケットに着地し、それぞれに少なくとも1つのバケットが落ちる確率を求めます。あるN T O 、T L(N T O 、T L - 1 )バケットの組と、任意の特定におけるハッシュランド確率2がある(2 / N T O 、T L)のk Mはnon=2km21ntotal(ntotal−1)2(2/ntotal)kmそのため、ハッシュが最大バケットに入る確率は次のとおりです。2
ntotal(ntotal−1)(2/ntotal)km
それらがバケットに収まる確率はすでにわかっているので、それらを減算して、正確に2に収まる確率を求めます。12
P(k,2,ntotal,m)=ntotal(ntotal−1)(2/ntotal)km−(1/ntotal)(km−1)
今、これを一般化できると思います。
P(k,non,ntotal,m)=(ntotalnon)(non/ntotal)km−∑i<noni=1P(k,i,ntotal,m)
この式をより計算しやすくする方法が正確にはわかりません。単純に実装された場合、実行時間は指数関数的になりますが、メモ化を介して線形時間を達成するのは簡単です。その場合、最も可能性の高いを見つけるだけです。私の本能によれば、単一のピークが存在するため、非常に迅速に検出できる可能性がありますが、単純にO (n 2)で最も可能性の高いmを見つけることができます。mO(n2)