View Full Version : Casualità e Informatica
Ciao a tutti,
volevo capire come funzionava la casualità nell'informatica, cioè coma fa un metodo come Math.random() di java a tornare un numero casuale? la cosa mi suona davvero strana.. in quanto dalla statistica so che la casualità in se non esiste.. ma è solo creata dalla nostra limitata conoscenza sulle cose! Come fa un computer a scegliere un numero casuale? non ci deve stare un algoritmo programmato dietro? e se è così allora non basterebbe conoscerlo per prevederlo? sono molto confuso sull'argomento.. :confused: chi mi fa un po' di luce? :rolleyes:
;) Grazie
Oceans11
20-02-2007, 13:09
non vorrei dire fesserie ma è proprio come dici tu...in effetti si parla di pseudo-casualità...su l'argomento non sò praticamente niente ma non vedo un altro modo di calcolare numeri se non con un algoritmo!
La soluzione allora è generare una sequenza di numeri "apparentemente casuali", ossia la conoscenza del numero i-esimo offre scarsa riconducibilità alla conoscenza del numero i+1!
Mi sembra che solo a livello hardware si generano numeri veramente casuali...ma non ho idea di come si faccia!
Ciao
RaouL_BennetH
20-02-2007, 13:14
Ciao a tutti,
volevo capire come funzionava la casualità nell'informatica, cioè coma fa un metodo come Math.random() di java a tornare un numero casuale? la cosa mi suona davvero strana.. in quanto dalla statistica so che la casualità in se non esiste.. ma è solo creata dalla nostra limitata conoscenza sulle cose! Come fa un computer a scegliere un numero casuale? non ci deve stare un algoritmo programmato dietro? e se è così allora non basterebbe conoscerlo per prevederlo? sono molto confuso sull'argomento.. :confused: chi mi fa un po' di luce? :rolleyes:
;) Grazie
Da quel poco che so sull'informatica in generale nn saprei risponderti. Voglio però provare lo stesso a fare un ragionamento.
La prima cosa che mi viene in mente, è che l'algoritmo utilizzato per generare il numero casuale possa o aver prefissato una serie di combinazioni in base a qualcosa che avviene in un determinato istante, oppure che possa essere costruito in base a degli eventi o variabili esterne a scelta dell'utente.
Nel primo caso, per esempio, mi verrebbe in mente che potrebbe scegliere come seme l'istante di tempo in cui viene chiamata la funzione di generazione del numero, elevata a potenza di 3 (sempre per esempio) e moltiplicata per il numero di il seriale di un qualche dispositivo fisico espresso in numeri.
Nel secondo caso invece, si potrebbe avere un'arbitrarietà differente in base al momento in cui l'utente decide di generare il numero. Per fare un esempio (spero lolloso perchè di matematico non ha nulla), potrei decidere di codificare i miei stati d'animo come variabili; ad esempio: mal di testa = 1067,89, far elevare a potenza questo numero per i secondi che segna l'orologio di sistema, decidere dargli in pasto anche il numero dei caratteri che formano il titolo del cd che sto ascoltando in questo istante e così via.
Non so quanto giusto sia questo mio ragionamento, dato che sono ignorante in materia, ma spero che fra tante stupidaggini ci sia qualcosa di fondato nelle mie parole :)
RaouL.
Da quel poco che so sull'informatica in generale nn saprei risponderti. Voglio però provare lo stesso a fare un ragionamento.
La prima cosa che mi viene in mente, è che l'algoritmo utilizzato per generare il numero casuale possa o aver prefissato una serie di combinazioni in base a qualcosa che avviene in un determinato istante, oppure che possa essere costruito in base a degli eventi o variabili esterne a scelta dell'utente.
Nel primo caso, per esempio, mi verrebbe in mente che potrebbe scegliere come seme l'istante di tempo in cui viene chiamata la funzione di generazione del numero, elevata a potenza di 3 (sempre per esempio) e moltiplicata per il numero di il seriale di un qualche dispositivo fisico espresso in numeri.
Nel secondo caso invece, si potrebbe avere un'arbitrarietà differente in base al momento in cui l'utente decide di generare il numero. Per fare un esempio (spero lolloso perchè di matematico non ha nulla), potrei decidere di codificare i miei stati d'animo come variabili; ad esempio: mal di testa = 1067,89, far elevare a potenza questo numero per i secondi che segna l'orologio di sistema, decidere dargli in pasto anche il numero dei caratteri che formano il titolo del cd che sto ascoltando in questo istante e così via.
Non so quanto giusto sia questo mio ragionamento, dato che sono ignorante in materia, ma spero che fra tante stupidaggini ci sia qualcosa di fondato nelle mie parole :)
RaouL.
Quindi se è così è come ho detto io.. basta conoscere i criteri che usa l'algoritmo e in linea di massima si può prevedere!
RaouL_BennetH
20-02-2007, 13:40
Quindi se è così è come ho detto io.. basta conoscere i criteri che usa l'algoritmo e in linea di massima si può prevedere!
Uhm, in termini "umani" in teoria si, ma sempre in termini umani credo di no :)
Mi spiego meglio, prendendo come esempio gli algoritmi di cifratura. Pensando al tipo MD5, so che non è possibile risalire all'origine.
Il perchè, sinceramente non lo so ancora, spero che qualche esperto ci illumini entrambi.
Qui si trova qualche informazione:
http://it.wikipedia.org/wiki/Random
yorkeiser
20-02-2007, 13:56
Vengono chiamati pseudo-casuali infatti: si basano su routine matematiche che prendono in input uno o più seed casuali (che derivano dalla lettura di alcune aree "adatte" di memoria, dall'orologio di sistema e altro) per generare delle sequenze di byte che non sono davvero "random", ma che in effetti vi assomigliano molto. I dettagli implementativi, ovviamente, variano in base ai linguaggi e al sistema operativo utilizzato
Nell'informatica e in generale quando si ha a che fare con un sistema deterministico, non si può parlare di casualità ma solo di pseudo-casualità.
Una sequenza completamente casuale di numeri è una sequenza in cui non è possibile determinare a priori il prossimo numero generato. Per dirla in modo diverso: il numero generato non ha alcuna relazione con i numeri generati in precedenza.
All'interno di un software o ad esempio in un circuito elettronico digitale, si ha una situazione diametralmente opposta. Dovendo usare un algoritmo e quindi usare regole e leggi ben precise, il prossimo numero generato è certamente legato in qualche modo ai numeri precedenti.
Nei generatori di numeri pseudo-casuali si cerca di ottenere una sequenza in cui i numeri siano uniformemente distribuiti lungo un certo periodo. Questo periodo è la quantità di numeri generata prima che il generatore ricominci da capo la sequenza. Un generatore di numeri pseudo-casuali è quindi contraddistinto da una "periodicità".
Un elemento importante nei generatori di numeri pseudo-casuali è il "seme", cioè un numero che serve per inizializzare l'algoritmo e che determina la sequenza dei numeri. A parità di algoritmo e di seme, si otterrà sempre la stessa identica sequenza di numeri. E in genere il seme viene stabilito in base ad altri valori che dipendono dallo stato del sistema in quel momento. Tipicamente si usa una informazione legata alla data/ora corrente.
Per finire, generare dei dati completamente casuali è possibile ma ci si deve affidare a dell'hardware specifico. Si devono cioè sfruttare dei fenomeni fisici come ad esempio il rumore termico in certi componenti elettronici o altri fenomeni quantistici, il cui andamento è imprevedibile e che riguarda la fisica della materia.
Nell'informatica e in generale quando si ha a che fare con un sistema deterministico, non si può parlare di casualità ma solo di pseudo-casualità.
cut..
Grazie tante :)
Ziosilvio
20-02-2007, 15:24
http://www.hwupgrade.it/forum/showthread.php?t=1196677
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.