Pokud potřebujete asi 10 milionů jedinečných klíčů (například), nejlepším přístupem je vybrat klíčový prostor, který je exponenciálně větší, a začít náhodně generovat. Přečtěte si o narozeninovém paradoxu -- to je hlavní věc, které byste se měli obávat. Pokud chcete 2^n jedinečných a bezpečných klíčů, ujistěte se, že existují alespoň 2^(2 * n) možných hodnot. Zde je hrubý algoritmus O(n log n):
- Použijte klíčový prostor alespoň 2^50 (tedy jinými slovy povolte 2^50 možných jedinečných hodnot) a v celé datové sadě nedojde k téměř žádným kolizím – a kdokoli brutálně vynucuje vaše klíče, mají přibližně stejnou šanci na získání klíče, pokud zkusí 2^25 z nich.
- vygenerujte libovolný počet náhodných čísel, kolik potřebujete
- indexovat databázi na vašem klíči (toto je krok O(n lg n):řazení)
- procházet DB a iterovat celou datovou sadu, aby se ořízly duplikáty (pseudokód níže)
- Smažte duplicitní řádky a máte hotovo.
Pseudokód:
$last = null;
while ($current = getnext()) {
if ($last == $current) {
push($toDelete, $current);
}
$last = $current;
}