Erwartete Hash-Kollisionen
Verteilen Sie 100 Schlüssel auf 128 Fächer, und im Mittel teilt sich mehr als die Hälfte der Schlüssel ein Fach, bei einem Lastfaktor von 0,78125. Dazu erhalten Sie Einzelschlüssel, leere und belegte Fächer, Überlaufschlüssel und Paarkollisionen. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- N
- 100
- M
- 128
- Lastfaktor
- 0,78125
- Erwartete kollidierende Schlüssel
- 53,9975057729
- Erwartete einzelne Schlüssel
- 46,0024942271
- Erwartete belegte Buckets
- 69,5768323316
Wenn n verschiedene Schlüssel gleichmäßig auf m Fächer verteilt werden, teilen sich einige einen Platz schon bei mäßigem Auslastungsfaktor. Die Intuition unterschätzt die Belegung: man erinnert sich an die Wahrscheinlichkeit des Geburtstagsparadoxons, dass mindestens ein Paar kollidiert, und behandelt diese Wahrscheinlichkeit, als wäre sie eine Anzahl. Dieser Rechner für erwartete Hash-Kollisionen beantwortet eine andere Planungsfrage. Er nutzt das klassische Kugeln-in-Urnen-Modell — jedes Element wählt eines von m Fächern unabhängig und gleichmäßig — und liefert die erwartete Zahl kollidierender Schlüssel, also jener, die in ihrem Fach nicht allein sind. Neben dieser Leitkennzahl meldet er Singleton-Schlüssel, belegte und leere Fächer, Überlaufschlüssel jenseits des ersten Insassen, paarweise Kollisionen und den Auslastungsfaktor n geteilt durch m. Die Arithmetik ist eine geschlossene Identität im Logarithmusraum, vollständig deterministisch, ohne Monte-Carlo-Stichprobe und ohne Sprachmodell. Nutzen Sie ihn, um eine Hashtabelle zu dimensionieren, einen Auslastungsfaktor zu justieren, einen 32-Bit-Hashraum mit einem engeren zu vergleichen oder eine Lehrbuchbehauptung zur Belegung zu prüfen, bevor Sie Speicher festlegen.
Was erwartete kollidierende Schlüssel im Kugeln-in-Urnen-Modell messen
Werfen Sie n Kugeln unabhängig und gleichmäßig in m Urnen und Sie haben das Standardmodell eines gleichmäßigen Hashs. Ein kollidierender Schlüssel ist eine Kugel, die ihre Urne mit mindestens einer anderen teilt. Das ist nicht dieselbe Größe wie die Wahrscheinlichkeit des Geburtstagsparadoxons, dass mindestens zwei Kugeln eine Urne teilen, und nicht die Zahl paarweiser Treffer.
Für die Kapazitätsplanung will man gewöhnlich eine Anzahl: wie viele Schlüssel im Mittel keinen privaten Platz bekommen, wie viele Fächer leer bleiben, während andere überlaufen, und wie viele Extra-Schlüssel sich auf den ersten Insassen stapeln. Die Linearität des Erwartungswerts liefert klare Antworten ohne Simulation. Fixieren Sie einen beliebigen Schlüssel.
Die übrigen n minus eins verfehlen das Fach dieses Schlüssels mit Wahrscheinlichkeit eins minus eins durch m, sodass die Chance, dass der gewählte Schlüssel ein Singleton ist, (1 − 1/m) hoch n minus eins beträgt. Multiplizieren Sie mit n und Sie haben die erwartete Zahl von Singleton-Schlüsseln. Ziehen Sie von n ab und Sie haben die erwartete Zahl kollidierender Schlüssel: n mal eins minus (1 − 1/m) hoch n minus eins.
Dasselbe Belegungsargument liefert die erwartete Zahl leerer Fächer, m mal (1 − 1/m) hoch n, und damit die der belegten Fächer. Überlaufschlüssel sind die Elemente jenseits des ersten in jedem belegten Fach, gleich n minus belegt. Paarweise Kollisionen entsprechen n über zwei geteilt durch m, weil jedes bestimmte Paar mit Wahrscheinlichkeit eins durch m zusammenfällt.
Der Auslastungsfaktor ist einfach n durch m. Zusammen sagen diese Kennzahlen, ob eine vorgeschlagene Tabelle zu wenig Fächer hat, lediglich beschäftigt ist oder bereits eine Kettenlängensteuer zahlt, die ein größeres m beseitigen würde.
Kapazitätsplanung, Grenzen, Preis und wo die Zahlen sich lohnen
Nutzen Sie das Browser-Werkzeug, wenn Sie eine Tabellengröße wählen, Auslastungsfaktoren vergleichen oder einem Team erklären, warum ein Auslastungsfaktor von eins noch einen großen Anteil von Schlüsseln ein Fach teilen lässt. Erhöhen Sie m, bis erwartete kollidierende Schlüssel oder Überlaufschlüssel unter Ihr Dienstbudget fallen, und behalten Sie etwas Wachstumsspielraum. Stellen Sie das Ergebnis einer Wahrscheinlichkeit des Geburtstagsparadoxons gegenüber, wenn Sie auch die Chance brauchen, dass irgendeine Kollision existiert; diese Wahrscheinlichkeit sättigt nahe eins lange bevor die erwartete Anzahl kollidierender Schlüssel groß wird, weshalb die zwei Werkzeuge verschiedene Tickets beantworten.
Die Ergebnisse sind vollständig deterministisch: dieselben n und m ergeben stets denselben Belegungsvektor, sodass Sie Beispiele in Tests und Lehrmaterial festnageln können. Es gibt kein Sprachmodell, keinen externen Statistikdienst und keine Zufälligkeit. Verdrahten Sie den Endpunkt in Hashtabellen-Tutorien, Cache-Fragment-Planer, Bloom-nahe Belegungsprüfungen oder Programmierinterview-Orakel, wo Sie die exakten Kugeln-in-Urnen-Identitäten Näherungs-Stichprobenhistogrammen vorziehen, die nie ganz zur Ruhe kommen.
Anwendungsfälle
Dimensionierung von Hashtabellen und Maps
Setzen Sie n auf die Schlüsselzahl der Arbeitsmenge und durchlaufen Sie m (Tabellenplätze), bis erwartete kollidierende Schlüssel und Überlaufschlüssel unter Ihrem Latenzbudget liegen.
Belegung von Cache-Fragmenten und Partitionen
Behandeln Sie Fragmente als Fächer und ankommende Schlüssel als Kugeln, um zu schätzen, wie viele Schlüssel eine heiße Partition teilen, bevor Sie Kapazität hinzufügen oder neu hashen.
Deterministische Orakel für Unterricht und Tests
Kurse, Interviewplattformen und CI-Suiten rufen ein stabiles Belegungsorakel auf, das n oder m unter eins ablehnt und bei gleichen Eingaben gleiche Felder zurückgibt.
Häufige Fragen
Was ist ein kollidierender Schlüssel in diesem Rechner?
Ein Schlüssel, der in seinem Fach nicht allein ist. Die erwartete Anzahl ist n minus die erwartete Zahl der Singletons. Es ist eine erwartete Anzahl, nicht die Wahrscheinlichkeit, dass mindestens ein Paar kollidiert.
Worin unterscheidet sich das vom Geburtstagsparadoxon?
Das Geburtstagsparadoxon liefert P(mindestens ein geteilter Tag). Dieses Werkzeug liefert erwartete Belegungszahlen zur Hash-Abstimmung: kollidierende Schlüssel, Überlauf, leere Fächer und paarweise Kollisionen im Kugeln-in-Urnen-Modell.
Was geschieht, wenn n oder m unter 1 liegt?
Mindestens ein Element und mindestens ein Fach sind nötig; null und negative Werte werden abgelehnt und nicht berechnet.
Wie viele Fächer bleiben im Mittel leer?
Der Erwartungswert ist die Zahl der Fächer mal der Wahrscheinlichkeit, dass kein Schlüssel in einem bestimmten Fach landet. Bei 100 Schlüsseln in 128 Fächern bleibt fast die Hälfte der Fächer leer, obwohl sich mehr als die Hälfte der Schlüssel einen Platz teilt.
Was sind Überlaufschlüssel?
Das sind die Schlüssel, die in einem belegten Fach nach dem ersten hinzukommen. Ihre Zahl ist die Zahl der Schlüssel minus die belegten Fächer und zeigt, wie viele Schlüssel sich auf einen schon vergebenen Platz stapeln.
Wie groß dürfen Schlüssel- und Fächerzahl sein?
Beide reichen von 1 bis zu einer Billion, genug für Lehrbeispiele, Tabellen im Arbeitsspeicher und einen vollen 32-Bit-Hash-Raum mit 4294967296 Plätzen. Das Ergebnis stammt aus einer geschlossenen Formel, nicht aus einer Simulation.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem 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)Beispiel-Anfrage
{
"n": 100,
"m": 128
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_expected_collisions",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_n | 1000000000000 |
max_m | 1000000000000 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Eingabevertrag, Formeln, numerische Stabilität und Fehler
Senden Sie zwei Pflichtganzzahlen: n, die Zahl der Elemente, und m, die Zahl der Fächer. Beide Werte müssen endliche Ganzzahlen innerhalb der veröffentlichten Grenzen sein: n von eins bis eine Billion, und m von eins bis eine Billion; das deckt Unterrichtsbeispiele, Speicher-Maps und einen vollen 32-Bit-Hashraum von vier Milliarden zweihundertvierundneunzig Millionen neunhundertsiebenundsechzigtausend zweihundertsechsundneunzig Plätzen. Nach der Prüfung wertet die Engine Potenzen von eins minus eins durch m im Logarithmusraum als Exponential des Exponenten mal log1p von minus eins durch m aus, sodass große n und m nicht zu einem stillen Nullwert unterlaufen, wie es eine naive Multiplikationsschleife täte. Sonderfälle bleiben exakt: ein einzelnes Element kollidiert nie; ein einziges Fach mit zwei oder mehr Elementen lässt jeden Schlüssel kollidieren; ein Exponent null wird als eins behandelt, damit (1 − 1/m) hoch null nicht zu einem unbestimmten null hoch null wird. Aliaswerte items, keys oder balls für n sowie buckets oder bins für m werden akzeptiert. Fehlende Felder, Nichtganzzahlen, n oder m unter eins und Werte über den Maxima scheitern mit invalid_input und werden nicht berechnet. Der JSON-Körper wiederholt n und m und liefert dann load_factor, expected_colliding_keys, expected_singleton_keys, expected_occupied_buckets, expected_empty_buckets, expected_collision_buckets, expected_overflow_keys, expected_pairwise_collisions sowie eine Formelzeichenkette, die die zwei Leitidentitäten neu formuliert.
Kapazitätsplanung, Grenzen, Preis und wo die Zahlen sich lohnen
Nutzen Sie die API, wenn ein Skript, eine Interview-Sandbox, ein Abstimmungsnotizbuch für Datenbanken oder eine Dauerintegrationsprüfung stabiles JSON für viele Paare (n, m) unter einem Vertrag braucht. Jede erfolgreiche Anfrage ist ein abrechenbarer Posten zu $0.002; eine fehlgeschlagene Prüfung wird nicht berechnet. Die veröffentlichten Bereiche halten die geschlossene Auswertung in gewöhnlichen IEEE-754-Doubles und decken jede praxisnahe Hashtabelle, die Sie von Hand dimensionieren würden.
Technische Fragen
Wie schätzt man erwartete Hash-Kollisionen für n Schlüssel und m Fächer?
Senden Sie die Ganzzahlen n (Elemente) und m (Fächer) an dev.hash_expected_collisions. Die Antwort enthält expected_colliding_keys = n*(1-(1-1/m)^(n-1)), dazu belegt, leer, Überlauf, paarweise und load_factor.
Ist der Rechner für erwartete Hash-Kollisionen kostenlos?
Das Browser-Werkzeug läuft kostenlos auf Ihrem Gerät. API-Aufrufe nutzen vorausbezahltes KIT-Guthaben zu $0.002 je erfolgreichem Posten; Prüfversagen wird nicht berechnet.