Collisioni hash attese
Distribuisca 100 chiavi in 128 contenitori e, in media, più della metà delle chiavi finisce per condividere un contenitore, con un fattore di carico di 0,78125. Ottiene anche chiavi isolate, contenitori vuoti e occupati, chiavi in eccesso e collisioni a coppie. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- N
- 100
- M
- 128
- Fattore di carico
- 0,78125
- Chiavi in collisione attese
- 53,9975057729
- Chiavi singole attese
- 46,0024942271
- Bucket occupati attesi
- 69,5768323316
Quando si disperdono n chiavi distinte in modo uniforme in m contenitori, alcune condividono uno slot anche con un fattore di carico modesto. L'intuizione sottostima l'occupazione: si ricorda la probabilità del paradosso dei compleanni che almeno una coppia collida e si tratta quella probabilità come se fosse un conteggio. Questa calcolatrice delle collisioni hash attese risponde a un'altra domanda di dimensionamento. Impiega il modello classico delle palline e delle urne — ciascun elemento sceglie uno degli m contenitori in modo indipendente e uniforme — e restituisce il numero atteso di chiavi in collisione, cioè quelle che non sono sole nel proprio contenitore. Accanto a quella cifra principale riporta chiavi singleton, contenitori occupati e vuoti, chiavi di trabocco oltre il primo occupante, collisioni a coppie e il fattore di carico n diviso per m. L'aritmetica è un'identità in forma chiusa valutata nello spazio logaritmico, pienamente deterministica, senza campionamento Monte Carlo e senza modello linguistico. Serve a dimensionare una tabella hash, regolare un fattore di carico, confrontare uno spazio hash a 32 bit con uno più stretto o verificare un'affermazione di occupazione da manuale prima di impegnare memoria.
Cosa misurano le chiavi in collisione attese nel modello palline e urne
Lanci n palline in modo indipendente e uniforme in m urne e ottiene il modello standard di un hash uniforme. Una chiave in collisione è una pallina che condivide l'urna con almeno un'altra. Non è la stessa grandezza della probabilità del paradosso dei compleanni che almeno due palline condividano un'urna, né il numero di coincidenze a coppie.
Per pianificare la capacità di solito si vuole un conteggio: quante chiavi, in media, non ottengono uno slot privato, quanti contenitori restano vuoti mentre altri traboccano, e quante chiavi extra si accatastano sul primo occupante. La linearità del valore atteso dà risposte pulite senza simulazione. Fissi una chiave qualsiasi.
Le altre n meno una mancano il contenitore di quella chiave con probabilità uno meno uno su m, così la chance che la chiave scelta sia singleton è (1 − 1/m) elevata a n meno uno. Moltiplichi per n e ottiene il numero atteso di chiavi singleton. Sottragga da n e ottiene il numero atteso di chiavi in collisione: n volte uno meno (1 − 1/m) alla n meno uno.
Lo stesso argomento di occupazione produce il numero atteso di contenitori vuoti, m volte (1 − 1/m) alla n, e quindi quello dei contenitori occupati. Le chiavi di trabocco sono gli elementi oltre il primo in ciascun contenitore occupato, uguali a n meno occupati. Le collisioni a coppie equivalgono a n su due diviso per m, perché qualsiasi coppia specifica cade insieme con probabilità uno su m.
Il fattore di carico è semplicemente n su m. Insieme, queste cifre dicono se una tabella proposta è a corto di contenitori, è solo occupata, o sta già pagando una tassa di lunghezza di catena che un m maggiore toglierebbe.
Contratto di ingresso, formule, stabilità numerica ed errori
Invii due interi obbligatori: n, il numero di elementi, e m, il numero di contenitori. Entrambi i valori devono essere interi finiti entro i limiti pubblicati: n da uno a un bilione, e m da uno a un bilione, il che copre esempi d'aula, mappe in memoria e uno spazio hash a 32 bit completo di quattro miliardi duecento novantaquattro milioni novecentosessantasette mila duecentonovantasei slot.
Dopo la convalida il motore valuta le potenze di uno meno uno su m in spazio logaritmico come l'esponenziale dell'esponente per log1p di meno uno su m, così n e m grandi non vanno in underflow verso uno zero silenzioso come farebbe un ciclo ingenuo di moltiplicazioni.
I casi speciali restano esatti: un solo elemento non collide mai; un solo contenitore con due o più elementi fa collidere ogni chiave; un esponente zero è trattato come uno affinché (1 − 1/m) alla potenza zero non diventi uno zero alla zero indeterminato. È un oracolo di conteggio atteso sotto un hash uniforme e indipendente, non un simulatore di una particolare funzione hash né una calcolatrice di probabilità di collisione.
Pianificazione della capacità, limiti, prezzo e dove servono i numeri
Usi lo strumento del browser quando sceglie la dimensione di una tabella, confronta fattori di carico o spiega a un gruppo perché un fattore di carico pari a uno lascia ancora una quota ampia di chiavi a condividere un contenitore. Aumenti m finché le chiavi in collisione attese o quelle di trabocco scendono sotto il bilancio di livello di servizio, poi tenga un margine di crescita.
Confronti il risultato con una probabilità del paradosso dei compleanni se le serve anche la chance che esista una collisione; quella probabilità satura vicino a uno molto prima che il conteggio atteso di chiavi in collisione diventi grande, ed è per questo che i due strumenti rispondono a ticket diversi. I risultati sono pienamente deterministici: gli stessi n e m producono sempre lo stesso vettore di occupazione, così può fissare esempi in prove e materiali didattici. Non c'è modello linguistico, né servizio esterno di statistica, né casualità.
Casi d'uso
Dimensionamento di tabelle hash e mappe
Prenda n uguale al numero di chiavi dell'insieme di lavoro e vari m (slot della tabella) finché le chiavi in collisione attese e quelle di trabocco restano sotto il bilancio di latenza.
Occupazione di frammenti e partizioni di cache
Tratti i frammenti come contenitori e le chiavi in arrivo come palline per stimare quante chiavi condividono una partizione calda prima di aggiungere capacità o ridisperdere.
Oracoli deterministici per lezioni e prove
Corsi, piattaforme di colloquio e suite di CI invocano un oracolo di occupazione stabile che rifiuta n o m inferiori a uno e restituisce campi identici per ingressi identici.
Domande frequenti
Che cos'è una chiave in collisione in questa calcolatrice?
Una chiave che non è sola nel proprio contenitore. Il conteggio atteso è n meno il numero atteso di singleton. È un conteggio atteso, non la probabilità che almeno una coppia collida.
In che cosa differisce dal paradosso dei compleanni?
Il paradosso dei compleanni restituisce P(almeno un giorno condiviso). Questo strumento restituisce conteggi di occupazione attesi per regolare l'hash: chiavi in collisione, trabocco, contenitori vuoti e collisioni a coppie nel modello palline e urne.
Che succede se n o m è inferiore a 1?
Servono almeno un elemento e almeno un contenitore; zero e i valori negativi vengono rifiutati e non addebitati.
La calcolatrice delle collisioni hash attese è gratuita?
Lo strumento del browser gira gratis sul Suo dispositivo.
Quanti contenitori restano vuoti in media?
Il valore atteso è il numero di contenitori per la probabilità che nessuna chiave cada in un contenitore dato. Con 100 chiavi in 128 contenitori, quasi metà dei contenitori resta vuota, anche se più della metà delle chiavi condivide il posto.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/hash-expected-collisions \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":100,"m":128}'const res = await fetch("https://api.kit.forhosting.com/dev/hash-expected-collisions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 100,
"m": 128
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hash-expected-collisions",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 100,
"m": 128
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hash-expected-collisions", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":100,"m":128}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":100,"m":128}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hash-expected-collisions", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"n": 100,
"m": 128
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_expected_collisions",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_n | 1000000000000 |
max_m | 1000000000000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Contratto di ingresso, formule, stabilità numerica ed errori
Sono accettati gli alias items, keys o balls per n, e buckets o bins per m. Campi assenti, non interi, n o m inferiori a uno e valori sopra i massimi falliscono con invalid_input e non vengono addebitati. Il corpo JSON ripete n e m, poi restituisce load_factor, expected_colliding_keys, expected_singleton_keys, expected_occupied_buckets, expected_empty_buckets, expected_collision_buckets, expected_overflow_keys, expected_pairwise_collisions e una stringa formula che riformula le due identità principali.
Pianificazione della capacità, limiti, prezzo e dove servono i numeri
Usi l'API quando uno script, un ambiente di colloquio, un taccuino di taratura di basi dati o un controllo di integrazione continua ha bisogno di JSON stabile per molte coppie (n, m) sotto lo stesso contratto. Ogni richiesta riuscita è un articolo fatturabile a $0.002; la convalida fallita non consuma saldo. Gli intervalli pubblicati tengono la valutazione in forma chiusa dentro double IEEE-754 ordinari e coprono ogni tabella hash che si dimensionerebbe a mano. Colleghi l'endpoint a tutorial sulle tabelle hash, pianificatori di frammenti di cache, controlli di occupazione affini a Bloom o oracoli di colloqui di programmazione in cui preferisce le identità esatte palline e urne a istogrammi di campionamento approssimato che non si stabilizzano mai del tutto.
Domande tecniche
Come si stimano le collisioni hash attese per n chiavi e m contenitori?
Invii gli interi n (elementi) e m (contenitori) a dev.hash_expected_collisions. La risposta include expected_colliding_keys = n*(1-(1-1/m)^(n-1)), più occupati, vuoti, trabocco, a coppie e load_factor.