Jika Anda membutuhkan sekitar 10 juta kunci unik (misalnya), pendekatan terbaik adalah memilih ruang kunci yang secara eksponensial lebih besar, dan mulai menghasilkan secara acak. Baca tentang Paradoks Ulang Tahun -- itu adalah hal utama yang harus Anda khawatirkan. Jika Anda menginginkan 2^n kunci unik dan aman, pastikan setidaknya ada 2^(2 * n) nilai yang memungkinkan. Berikut algoritma kasar O(n log n):
- Gunakan ruang kunci minimal 2^50 (jadi, dengan kata lain, izinkan 2^50 kemungkinan nilai unik), dan Anda hampir tidak akan mengalami tabrakan di seluruh kumpulan data -- dan siapa pun yang memaksa kunci Anda secara kasar akan memiliki peluang genap untuk mendapatkan kunci jika mereka mencoba 2^25 kunci.
- menghasilkan angka acak sebanyak yang Anda butuhkan
- indeks database pada kunci Anda (ini adalah langkah O(n lg n):pengurutan)
- laman melalui DB dan ulangi seluruh kumpulan data untuk memangkas duplikat (kode semu di bawah)
- Hapus baris duplikat, dan selesai.
Kode semu:
$last = null;
while ($current = getnext()) {
if ($last == $current) {
push($toDelete, $current);
}
$last = $current;
}