Als je bijvoorbeeld ongeveer 10 miljoen unieke sleutels nodig hebt, kun je het beste een sleutelruimte kiezen die exponentieel groter is en willekeurig beginnen te genereren. Lees over de Verjaardagsparadox -- het is het belangrijkste waar u zich zorgen over moet maken. Als u 2^n unieke en veilige sleutels wilt, zorg er dan voor dat er ten minste 2^(2 * n) mogelijke waarden zijn. Hier is een ruw O(n log n) algoritme:
- Gebruik een sleutelruimte van minimaal 2^50 (met andere woorden, laat 2^50 mogelijke unieke waarden toe), en je zult nauwelijks botsingen hebben in je hele dataset -- en iedereen die brutaal je sleutels forceert, zal dat doen hebben ongeveer gelijke kansen om een sleutel te krijgen als ze er 2^25 proberen.
- genereer zoveel willekeurige getallen als je nodig hebt
- indexeer de database op uw sleutel (dit is de O(n lg n) stap:de sortering)
- blader door de database en herhaal de hele dataset om duplicaten bij te knippen (pseudocode hieronder)
- Verwijder de dubbele rijen en je bent klaar.
Pseudocode:
$last = null;
while ($current = getnext()) {
if ($last == $current) {
push($toDelete, $current);
}
$last = $current;
}