Generowanie losowych, nie powtarzających się ciągów znaków

0

Witam, mam pewien problem. Potrzebuję wygenerować losowy nie powtarzający ciąg znaków (a-z 0-9) o długości np. od 5 do 7 znaków. Prawdopodobieństwo powtórzeń jest co prawda małe, jednak nie wiem jak poradzić sobie z tym, żeby zbytnio bazy MySQL nie obciążyć przy sprawdzaniu. Wraz z ilością takich rekordów jest większa szansa na powtórzenie. Nie wiem jak się za to zabrać. Prosiłbym o naprowadzenie jak mógłbym to ugryźć. Mam nadzieję że w miarę jasno się wyjaśniłem.

Pozdrawiam

0

Jak wygenerujesz dobry ciąg losowy (pogugluj o UUID) to możesz sobie darować sprawdzanie. Szansa na wygenerowanie dwóch takich samych ciągów jest tak mała, że NIE warto się tym przejmować.

Z wikipedii: gdybyś generował miliard tego typu ciągów co sekundę przez następne sto lat, szansa na duplikat wśród nich wynosiłaby 50%.

Windows używa guid do identyfikacji prawie każdej rzeczy w systemie i.. po prostu przyjmuje się, że będą one unikalne.

0

Sztuczka na rozwiązanie tego programu jest prosta. Pierw do kontenera wkładasz kolejno wszystkie znaki . Następnie używasz algorytm tasowania i pobierasz wspomniane pierwsze 5-7 znaków.

0

Rev chyba masz racje, żeby nie przejmować się mam zamiar wygenerować sobie może maksimum 1 tysiąc takich ciągów. Jednak interesuje mnie jak to rozwiązali w skracaniu linków np. populary od Google http://goo.gl/, przecież tam musi być już dużo wygenerowanych takich linków.

0

Może poprzez pole UNIQUE KEY jak rzuci wyjątkiem to znaczy, że się powtarza ;) Jak kolega miał podstawy struktur danych to powinien wiedzieć, że takie rzeczy można sprawdzić w czasie O(1).

0

Spróbuj znaleźć jakieś idealne (bez kolizji) "hashowanie" powiedzmy 2^32 wartości do stringa o odpowiedniej "losowości" i przechowuj tylko tego inta. Będzie to wtedy wyglądało na losowe, a przechowujesz tylko 4 bajty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1