Ecco un inizio approssimativo della soluzione di questo problema che coinvolge distribuzioni uniformi e carico massimo.
Invece di cassonetti e sfere o urne o scatole o secchi o m e n, le persone (p) e le porte (d) saranno utilizzate come denominazioni.
Esiste un valore previsto esatto per ciascuna porta a cui è assegnato un determinato numero di persone. Ad esempio, con 5 persone e 5 porte, la porta massima prevista è esattamente 1.2864 {(1429-625)/625} sopra la media (p/d) e la porta minima è esattamente -0.9616 {(24-625)/625 } sotto la media. Il valore assoluto della distanza della porta più alta rispetto alla media è un po 'più grande della porta più piccola perché tutte le persone potrebbero attraversare una porta, ma non meno di zero può attraversare una delle porte.Con un gran numero di persone (p/d> 3000), la differenza tra il valore assoluto della distanza della porta più alta dalla media e la porta più bassa diventa trascurabile.
Per un numero dispari di porte, la porta centrale è essenzialmente zero e non è scalabile, ma tutte le altre porte sono scalabili da determinati valori che rappresentano p = d. Questi valori arrotondati per d = 5 sono:
-1,163 -0,495 0 * 0,495 1,163 * si avvicina lentamente zero dal -0.12
Da questi valori, è possibile calcolare il numero previsto di persone per qualsiasi numero di persone passando attraverso ciascuna delle 5 porte, inclusa la porta massima. Ad eccezione della porta ordinata media, la differenza dalla media è scalabile di sqrt (p/d).
Così, per p = 50.000 e D = 5:
Previsto numero di persone che attraverso la porta massima, che potrebbe essere una qualsiasi delle 5 porte, = 1.163 * sqrt (p/d) + p/d. = 1.163 * sqrt (10.000) + 10.000 = 10.116.3 Per p/d < 3.000, il risultato di questa equazione deve essere leggermente aumentato.
Con più persone, la porta centrale si avvicina lentamente a zero da -0.11968 a p = 100 ep = 5. Può sempre essere arrotondato a zero e, come le altre 4 porte, ha una discreta differenza.
I valori per 6 ante sono: -1,272 -0,643 -0,202 0,202 0,643 1,272
Per 1000 porte, i valori approssimati sono: -3.25, -2.95, -2.79 ... 2.79, 2.95, 3.25
Per ogni d e p, esiste un valore previsto esatto per ciascuna porta ordinata. Si spera che una buona approssimazione (con un errore relativo < 1%) esista. Qualche professore o matematico da qualche parte deve saperlo.
Per testare la distribuzione uniforme, è necessario un numero di sessioni ordinate in media (750-1000 funziona bene) piuttosto che un numero maggiore di persone. Non importa cosa, le differenze tra le sessioni valide sono grandi. Questa è la natura della casualità. Le collisioni sono inevitabili. *
I valori previsti per 5 e 6 porte sono stati ottenuti mediante il calcolo della forza bruta pura utilizzando numeri interi a 640 bit e facendo la media della convergenza dei valori assoluti delle porte opposte corrispondenti. Per d = 5 e p = 170: -6,63901 -2,95905 -0,119342 2,81054 6,90686 (27,36099 31,04095 33,880658 36,81054 40,90686) Per d = 6 e p = 108: -5,19024 -2,7711 -0,973979 0,734434 2,66716 5,53372 (12,80976 15.2289 17.026021 18.734434 20.66716 23.53372)
Spero che tu possa distribuire uniformemente i tuoi dati.
- È quasi garantito che tutti i figli di George Foreman o una situazione simile combatteranno contro la tua funzione di hash. E una corretta pianificazione contingente è il lavoro di tutti i bravi programmatori.
Grazie per il vostro impegno. Dato un input "puramente" casuale, stavo cercando di verificare una funzione hash confrontando le sue prestazioni con alcuni risultati teorici. Dato che Balls in Bins offre semplici probabilità per valori facilmente misurabili, mi aspettavo di poter verificare facilmente la mia funzione di hash.Ma poi è stato presentato il "carico di ordini" di max-load, tuttavia quello con il '3' sembrava promettente - ma è' log2' o 'loge' (sto pensando base e w.h.p :)? – philcolbourn
Forse non è possibile quantificare questo valore, ma il modo in cui il documento presentato sembrava dare speranza. Prendo la tua idea di tracciare il comportamento del massimo carico per vedere se sono all'interno di un fattore costante, ma anche con una grande tabella di dire 65k slot, il massimo carico di w.h.p potrebbe essere 4 - quindi il fattore costante è importante. – philcolbourn
Inoltre, in realtà non avresti intenzione di riempire il tuo hash table di dimensione N con N hash, ma questo setpoint sembra consentire di testare qualsiasi funzione hash che sarebbe carina e mantenere sotto controllo gli argomenti delle prestazioni della funzione hash - per me, essere in grado di dire che una funzione di hash si comporta correttamente vale molto di più che dire a qualcuno che "questa funzione di hash funziona bene per lunghe stringhe di testo". – philcolbourn