Witam,
Przed chwilą naszła mnie taka myśl..
Załóżmy że, lotek jest ustawiany i po skończeniu obstawiania komputer liczy jakie numery nie zostały obstawione. Jakim algorytmem wy byście to napisali i jak myślicie ile czasu potrzebowałby na to domowy komputer?
Przecież w tzw. "Dużym Lotku" (czyli dzisiaj "Lotto") jest tylko niecałe 14 milionów kombinacji liczb. Dla komputera to kaszka z mleczkiem. Nawet jeśli zakodujemy to zupełnie naiwnie. Można bez problemu zrobić tablicę booleanów (byte'ów, intów...) o takim rozmiarze, tj. mielibyśmy jedną komórkę dla każdej z kombinacji. Potem można lecieć wszystkie kupony (każdy kupon to wybór jednej kombinacji z owych 14 milionów) i dla kupony z kombinacją K odhaczyć K-tą kombinację w tablicy. Taki przelot ma złożoność liniową. Potem wystarczy zrobić drugi przelot -- również liniowy -- aż do pierwszej nieodhaczonej komórki. Ona (jeśli takowa istnieje) będzie reprezentowała kombinację, której nikt nie skreślił. Czyli dalej złożoność liniowa, O(n). Współczesny komputer nawet się nie spoci dla n=14 mln. Kilka chwil i mamy wynik.
Nio właśnie zastanawiam się czy utworzyć taką tablice to kaszka z mleczkiem dla komputera i jak ją rozsądnie utworzyć..
14mln dla jakiejś bazy danych to Pikuś, pan Pikuś. Nie takie bazy danych się robi.
Ale powiedźcie mi jak byście stworzyli tą bazę z wszystkimi kombinacjami? Jak już raz się ją stworzy to będzie, ale wydaje mi się, że stworzenie pliku txt z takimi kombinacjami potrwało by kilka/kilkanaście godzin.
Ale powiedźcie mi jak byście stworzyli tą bazę z wszystkimi kombinacjami? Jak już raz się ją stworzy to będzie, ale wydaje mi się, że stworzenie pliku txt z takimi kombinacjami potrwało by kilka/kilkanaście godzin.
Dla bazy danych 14 mln to niewiele. Ale i dla pamięci. Tablica bajtów dałaby 14 MB. Szału nie robi. Jak na aplikacyjkę, która ma zostać odpalona raz, to nawet nie opłaca się kombinować z pakowaniem tego do bitów (w końcu wystarczy flaga było/nie było), co zmniejszyłoby rozmiar tablicy do mniej niż 2 MB ;).
Nie, nie trwałoby godzin.
Ja pewnie w ogóle nie tworzyłbym wypisu wszystkich kombinacji. Pierwsze, co mi przychodzi do głowy (z kapelusza) to napisanie funkcji, która odwzoruje wartość -- liczbę całkowitą -- z zakresu od 1 do 14 mln na kombinację liczb (tudzież vice versa). Funkcja po prostu numerowałaby/indeksowałaby kombinacje, czyli skreślenia. Np. indeks i=0 oznaczałaby kombinację K=(1, 2, 3, 4, 5, 6). Indeks i=1 kombinację K=(1, 2, 3, 4, 5, 7), indeks i=2 skreślenie K=(1, 2, 3, 4, 5, 8) i tak dalej.
Odczytując poszczególne kupony, transformowałbym kombinację K na indeks i. Indeks i byłby oczywiście indeksem w mojej tablicy. Potem by mi wyszło, że dla i=1500666 w tablicy mam "false". Żeby mój program wyświetlił co to za kombinacja liczb, musiałbym dokonać transformacji odwrotnej: indeksu i na kombinację K.
hmm, teraz wydaje mi się to rozsądniejsze.. Zobaczę z ciekawości ile mi zajmie wygenerowanie wszystkich kombinacji do pliku txt.
Hmm, chyba za dużo mi się wydawało.. Niezbyt szybkim algorytmem potrwało to parę minut, zaraz zmierzę to jeszcze raz za pomocą ctime, a plik ważył troszkę ponad 250MB.
Stworzenie pliku Marne 871 sekund na procku x2 1.6
a na co mi plik? przecie żeby lotto działało terminale muszą łączyć się z centralą i stąd centrala cały czas wie wszystko
Większą trudność przy ustawianiu lotka sprawiałoby:
a) policzenie dla jakiego wyniku losowania łączna suma nagród jest najmniejsza,
b) znalezienie innego, realistycznie wyglądającego wyniku, dającego łączną sumę nagród bliską minimum, jeżeli z a) wyniknie np. 3,4,5,6,7,8,
c) "ustawienie" maszyny losującej.
qrwk to zastanawia mnie jak Ty to napisałeś..
to zbyt dobry interes, by mógł paść choć cień podejrzenia, ale z drugiej strony - znając naturę ludzką....
a że ludzie wierzą w "systemy" i to że piłeczki są pamiętliwe to inna historia
o przypomniało mnie mi się coś ciekawego
znany jest system :-) 162 zakładów gwarantujących trójkę, to na razie rekord świata i chyba nawet nie udowodniono, że możliwy jest krótszy zestaw. Kombinowałem z tym trochę ale nie wskórałem wiele.
Kopernik napisał(a)
Ale powiedźcie mi jak byście stworzyli tą bazę z wszystkimi kombinacjami? Jak już raz się ją stworzy to będzie, ale wydaje mi się, że stworzenie pliku txt z takimi kombinacjami potrwało by kilka/kilkanaście godzin.
No tak nie do końca:
[hauleth@NIUNIOBOOK ~]$ time seq 1 14000000 > test.txt
real 0m11.132s
user 0m10.609s
sys 0m0.257s