Nie, twój algorytm nie jest skalowalny. To, co zrobiłem wcześniej, to wydawanie liczb szeregowo (za każdym razem +1), a następnie przepuszczanie ich przez operację XOR, aby pomieszać bity, dając mi pozornie losowe liczby. Oczywiście nie są one losowe, ale w oczach użytkowników tak wyglądają.
[Edytuj] Dodatkowe informacje
Logika tego algorytmu wygląda tak, że używasz znanej sekwencji do generowania unikalnych liczb, a następnie deterministycznie nimi manipulujesz, aby nie wyglądały już seryjnie. Ogólnym rozwiązaniem jest użycie jakiejś formy szyfrowania, która w moim przypadku była przerzutnikiem XOR, ponieważ działa tak szybko, jak to możliwe, i spełnia gwarancję, że liczby nigdy się nie zderzyją.
Możesz jednak użyć innych form szyfrowania, jeśli chcesz, aby bardziej losowo wyglądające liczby niż szybkość (powiedzmy, że nie musisz generować wielu identyfikatorów na raz). Teraz ważnym punktem przy wyborze algorytmu szyfrowania jest „gwarancja, że liczby nigdy się nie zderzą”. Sposobem na udowodnienie, czy algorytm szyfrowania może spełnić tę gwarancję, jest sprawdzenie, czy zarówno oryginalna liczba, jak i wynik szyfrowania mają tę samą liczbę bitów i czy algorytm jest odwracalny (bijection).
[Podziękowania dla Adama Lissa &CesarB za rozwinięcie rozwiązania]