Mam system, który wymaga unikalnego 6-cyfrowego kodu do przedstawienia obiektu i staram się wymyślić dobry algorytm do ich generowania. Oto wstępnie reqs:Unikalny kod w stylu Tinyurl: potencjalny algorytm zapobiegający kolizjom
- ja przy użyciu układu bazowego 20 (bez nasadki, liczb, samogłoski i l dla większej przejrzystości i zły słów)
- baza-20 umożliwia 64 miliony kombinacji
- Będę wstawiać potencjalnie 5-10 tysięcy wpisów na raz, więc teoretycznie użyłbym wkładek luzem, co oznacza, że użycie unikalnego klucza prawdopodobnie nie będzie wydajne lub ładne (szczególnie jeśli zaczyna być mnóstwem kolizji)
- To nie jest z qu estion aby wypełnić 10% kombinacji więc istnieje duży potencjał dla wielu kolizji
- Chcę upewnić się, że kody są dla kolejnych
miałem pojęcia, co zabrzmiało jak to działa, ale Nie jestem wystarczająco dobry z matematyki, aby dowiedzieć się, jak ją zaimplementować: jeśli zaczynam od 0 i zwiększam o N, to konwertuję na base-20, wydaje się, że powinna być pewna wartość dla N, która pozwala mi liczyć każdą wartość z 0-6999999 przed powtórzeniem którejkolwiek.
Na przykład, począwszy od 0 do 9, stosując n = 3 (a więc 10 mod 3): 0, 3, 6, 9, 2, 5, 8, 1, 4, 7
jest jakiś magiczna metoda matematyczna do wyznaczania wartości N dla pewnej większej liczby, która jest w stanie zliczyć cały zakres bez powtarzania? W idealnej sytuacji wybrana przeze mnie liczba przeskakuje w taki sposób, że nie było oczywiste, że istnieje wzór, ale nie jestem pewien, jak to możliwe.
Alternatywnie, algorytm mieszający, który zagwarantowałby wyjątkowość dla wartości 0-64 miliona, działałby, ale jestem zbyt głupi, aby wiedzieć, czy to możliwe.
Liczby pierwsze ... Sądzę, że jestem naprawdę zły w matematyce; wydaje się oczywiste w miejscu. Dziękuję wszystkim, którzy odpowiedzieli. Udzieliłem uznania phantombrain za udzielenie pierwszej odpowiedzi. –
Od kiedy wspomniałeś tinyurl, moja odpowiedź na to pytanie może mieć zastosowanie: http://stackoverflow.com/questions/1051949/map-incrementing-integer-range-to-six-digit-base-26-max-but-unpredictably/1052896 # 1052896 – FogleBird
Nie zapomnij podwoić kodów, aby stały się niesekwencyjne. – Beta