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

Odpowiedz Nowy wątek
2011-08-20 20:53
losowy
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

Pozostało 580 znaków

2011-08-20 21:14
Rev
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.


Pozostało 580 znaków

2011-08-20 21:25
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.

Pozostało 580 znaków

2011-08-21 16:47
losowy
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.

Pozostało 580 znaków

2011-08-22 09:48
studenciak
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).

ja stawiam, że O(log(n)) jest bliżej prawdy niż O(1) - krwq 2011-08-30 11:38

Pozostało 580 znaków

2011-08-24 17:58
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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