Interessante Frage, schauen wir uns einige konkrete Fälle an.
Es sei Tasten, n o n Bits, n t o t a l Bits insgesamt , und m Elemente eingefügt. Wir werden versuchen , zunächst eine Funktion zu finden P ( k , n o n , n t o t a l , m ) , das ist die Wahrscheinlichkeit , ein Zustand auftritt.kno nnt o t a lmP( k , no n, nt o t a l, M )
Wenn , dann P ( k , n o n , n t o t a l , m ) sein muss , 0 , dh es ist ein Ding der Unmöglichkeit.km<nonP(k,non,ntotal,m)0
Wenn , dann für die Wahrscheinlichkeit , suchen wir , dass k m Hashes in der gleichen Eimer fallen, kann die erste markieren , wo sollten die anderen gehen. Wir wollen also die Wahrscheinlichkeit ermitteln, dass k m - 1 Hashes in einen bestimmten Eimer fallen.non=1kmkm−1
P(k,1,ntotal,m)=(1/ntotal)(km−1)
Das sind die wirklich einfachen Fälle. Wenn dann wollen wir die Wahrscheinlichkeit finden , dass k m Hashes in landen zwei verschiedene Eimer und mindestens 1 fällt in jedem. Es gibt n t o t a l ( n t o t a l - 1 ) Paare von Schaufeln und die Wahrscheinlichkeit , dass die Hash - Werte in einem bestimmten Land 2 ist ( 2 / n t o t a l ) k mnon=2km21ntotal(ntotal−1)2(2/ntotal)kmDie Wahrscheinlichkeit, dass die Hashes in bis zu Eimern abfallen, ist also:2
ntotal(ntotal−1)(2/ntotal)km
Wir wissen schon , die Wahrscheinlichkeit , dass sie in fällt Eimer Werfen sich also subtrahiert , dass die Wahrscheinlichkeit zu geben , dass sie in genau fallen 2 .12
P(k,2,ntotal,m)=ntotal(ntotal−1)(2/ntotal)km−(1/ntotal)(km−1)
Ich denke, wir können das jetzt verallgemeinern.
P(k,non,ntotal,m)=(ntotalnon)(non/ntotal)km−∑i<noni=1P(k,i,ntotal,m)
Ich bin mir nicht ganz sicher, wie ich diese Formel für die Berechnung besser geeignet machen kann. Naiv implementiert, würde dies zu einer exponentiellen Zeitausführungszeit führen, obwohl es trivial ist, durch Merken eine lineare Zeit zu erreichen. Es geht dann nur darum, das wahrscheinlichste . Mein Instinkt sagt, dass es einen einzelnen Peak geben wird, so dass es möglich sein kann, ihn sehr schnell zu finden, aber naiv kann man definitiv das wahrscheinlichste m in O ( n 2 ) finden .mO(n2)