Γένεση τυχαίων αριθμών

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
EneMe
Super Moderator
Δημοσιεύσεις: 13307
Εγγραφή: 09 Ιούλ 2002 13:29
Τοποθεσία: Στο κέντρο της Ελλάδας!
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από EneMe » 03 Φεβ 2005 23:42

Συχνά καλούμαστε να δημιουργήσουμε μια σειρά τυχαίων αριθμών. Αυτό εύκολα το πραγματοποιεί κάποια εντολή, ανεξαρτήτως της γλώσσας στην οποία προγραμματίζουμε.

Πώς όμως δημιουργούνται αυτοί οι αριθμοί και κατά πόσο είναι πράγματι τυχαίοι;

Η πραγματικότητα είναι πως τίποτα δεν είναι τυχαίο.

Οι «τυχαίοι» αριθμοί στους οποίους αναφερόμαστε είναι στην πραγματικότητα «ψευδοτυχαίοι».

Κάθε πρόγραμμα έχει κάποιον δικό του αλγόριθμο δημιουργίας λίστας «τυχαίων» αριθμών.

Ένας από τους πιο απλούς είναι η μέθοδος υπολοίπου.


Η μέθοδος υπολοίπου εκφράζεται με τον τύπο:

R(μ) = Κ * R(μ-1) Μοd(b^n)

Όπου είναι:

R(μ) = ο μι-οστός τυχαίος αριθμός
R(μ-1) = ο προηγούμενος τυχαίος αριθμός
Κ = ένας πολλαπλασιαστής
n = o αριθμός ψηφίων που μπορεί να αποθηκεύει ο υπολογιστής
Μοd(b^n) = μια διαδικασία σύμφωνα με την οποία (για την συγκεκριμένη περίπτωση) το γινόμενο Κ*R(μ-1) διαιρείται με τον αριθμό b^n και το υπόλοιπο της διαίρεσης ισούται με R(μ)

Η περίοδος επαναλήψεως για την παραπάνω σχέση είναι 2^(n-2).

Aν θεωρήσουμε ένα παλαιό υπολογιστή (πχ IBM 7094) έχουμε n=35 άρα η περίοδος επανάληψης είναι:
2^(35-2) = 2^33 αριθμοί

Άρα προβλήματα επανεμφάνισης αριθμών πρακτικά δεν υπάρχουν.

Η διαδοχή των αριθμών που παράγονται από τον παραπάνω αλγόριθμο ακολουθεί ομοιόμορφη ορθογωνική κατανομή, δηλαδή κάθε αριθμός έχει την ίδια πιθανότητα με όλους τους άλλους να εμφανιστεί στην διαδοχή.

Αν θεωρήσουμε ότι σαν R(0), αντί κάποιου σταθερού αριθμού, μπορούμε να θέσουμε την τιμή μιας F(x) εξαρτώμενης από τον χρόνο παραγωγής των αριθμών (δηλαδή μια τιμή συνάρτησης που να εξαρτάται από την ώρα), οι παραγόμενοι αριθμοί, για μη περιοδική χρήση του αλγορίθμου, μπορούν να θεωρηθούν «πραγματικά τυχαίοι»

Η παραπάνω μέθοδος είναι υπεραπλουστευμένη, αλλά αποτελεί απλό παράδειγμα για κατανόηση της διαδικασίας που ακολουθείται.

Παράδειγμα:

Θέτουμε K=5, n=4, b=2, R(0)=5

R(1) = 5*5 Mod(2^4) = 9
R(2) = 5*9 Mod(2^4) = 13
R(3) = 5*13 Mod(2^4) = 1
R(4) = 5*1 Mod(2^4) = 5
R(5) = 5*5 Mod(2^4) = 9

Όπως αναμενόταν, η περίοδος επανάληψης είναι 4, δηλαδή παρήχθησαν 4 τυχαίοι αριθμοί μέχρι να υπάρξει επανεμφάνιση.
Τελευταία επεξεργασία από το μέλος EneMe την 04 Φεβ 2005 01:38, έχει επεξεργασθεί 1 φορά συνολικά.


Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από cordis » 03 Φεβ 2005 23:47

όπα του! :P
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
EneMe
Super Moderator
Δημοσιεύσεις: 13307
Εγγραφή: 09 Ιούλ 2002 13:29
Τοποθεσία: Στο κέντρο της Ελλάδας!
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από EneMe » 03 Φεβ 2005 23:51

Eίδες τί μαθαίνει ένας πολιτικός μηχανικός; :P

> Τεχνική της Κυκλοφορίας
>>> Σχεδιασμός Αστικής Κυκλοφορίας
>>>>> Θεωρία Κυκλοφοριακής Ροής
>>>>>>> Προσομοίωση Κυκλοφοριακής Ροής

billiaswhs
Δημοσιεύσεις: 346
Εγγραφή: 11 Νοέμ 2004 00:29
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από billiaswhs » 09 Απρ 2005 18:47

Θα ήθελα να ρωτήσω πως μπορώ να δημιουργήσω τυχαίους αριθμούς αλλά μέσα σε ένα συγκεκριμένο διάστημα για παράδειγμα από [5,12] στην C++?
Τελευταία επεξεργασία από το μέλος billiaswhs την 24 Απρ 2005 23:38, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από cordis » 09 Απρ 2005 21:55

Κώδικας: Επιλογή όλων

...
tyxaios[i] = (rand()%(MEXRI-APO))+APO; 
...
από: http://forum.coderz.gr/viewtopic.php?p=876#876
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter


Άβαταρ μέλους
deninho
Super Moderator
Δημοσιεύσεις: 7066
Εγγραφή: 17 Ιαν 2004 16:01
Τοποθεσία: σ'άλλη διάσταση
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από deninho » 28 Ιουν 2005 16:25

Άσχετο, και επειδή διάβαζα ένα σχετικό άρθρο, τυχαίοι αριθμοί (που δεν υπάρχει περίπτωση να τους προβλέψεις ακόμα και αν ξέρεις την συνάρτηση) δεν μπορουν να δημιουργηθούν όταν βάζεις ως μονάδα εισαγωγής κάτι τυχαίο; Δηλαδή, το πόσο pixel τηα κουνηθεί το mouse, το πόσες φορές το δευτερόλεπτο πατάς τα πλήκτρα στο πληκτρολόγιο, την ένταση του θορύβου κλπ κλπ; Απλά για να συμπληρώσω το θέμα...

Άβαταρ μέλους
EneMe
Super Moderator
Δημοσιεύσεις: 13307
Εγγραφή: 09 Ιούλ 2002 13:29
Τοποθεσία: Στο κέντρο της Ελλάδας!
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από EneMe » 29 Ιουν 2005 17:44

Φυσικά! Το αναφέρω στο πρώτο post (έχω πάρει παράδειγμα την ώρα)...

Άβαταρ μέλους
deninho
Super Moderator
Δημοσιεύσεις: 7066
Εγγραφή: 17 Ιαν 2004 16:01
Τοποθεσία: σ'άλλη διάσταση
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από deninho » 30 Ιουν 2005 18:39

ομολογώ ότι δεν το πρόσεξα... με είχαν μεγέψει όλα αυτά που έγραφες...


alaou
Δημοσιεύσεις: 8
Εγγραφή: 20 Ιουν 2005 09:56

Γένεση τυχαίων αριθμών

Δημοσίευση από alaou » 03 Μάιος 2006 03:37

Καλά ρε μάγκες όλα αυτά αλλά εγώ παίζω ΚΙΝΟ και δεν θέλω να μου βάζει τυχαίους αριθμούς στο δελτίο ο ΟΠΑΠ....
Πως θα μπορούσα να κάνω το PC να "γεννήσει" 12 ή 11 ή 10 αριθμούς τυχαίους από το 1-80?

marten91
Δημοσιεύσεις: 68
Εγγραφή: 07 Ιαν 2006 17:34

Γένεση τυχαίων αριθμών

Δημοσίευση από marten91 » 03 Μάιος 2006 08:45

paidia....

xriazomai epeigontos....ena progr i script pou na dialegei ena ari8mo apo to 1 eos ton ari8mo pou tou exo orisei.....

eida auto to tut alla den ksero se ti glossa einai...qbasic?ti?

se poio prog mporo na to kano auto pou zitao??
an mporeite apantiste mou analytika!

euxaristo poly!

Άβαταρ μέλους
greekbytes
WebDev Moderator
Δημοσιεύσεις: 2438
Εγγραφή: 15 Νοέμ 2002 15:42
Τοποθεσία: Αθήνα
Επικοινωνία:

Γένεση τυχαίων αριθμών

Δημοσίευση από greekbytes » 03 Μάιος 2006 12:32

random.php

Κώδικας: Επιλογή όλων

<? echo rand&#40;1,$_GET&#91;"max"&#93;&#41;; ?>
ανέβασέ το ή τρέξτο σε localhost δίνοντας random.php?max=100 (όπου 100 βάζεις αυτό που θες κάθε φορά)

marten91
Δημοσιεύσεις: 68
Εγγραφή: 07 Ιαν 2006 17:34

Γένεση τυχαίων αριθμών

Δημοσίευση από marten91 » 03 Μάιος 2006 15:13

se euxaristo file greekbytes!!!!!
na se kala!

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης