Questo sito si serve dei cookie per fornire servizi. Utilizzando questo sito acconsenti all'utilizzo dei cookie - Maggiori Informazioni - Acconsento


Atik
Coelum Astronomia
L'ultimo numero uscito
Leggi Coelum
Ora è gratis!
AstroShop
Lo Shop di Astronomia
Photo-Coelum
Inserisci le tue foto
DVD Hawaiian Starlight
Segui in diretta lo sbarco di Philae sulla Cometa
Skypoint

Vai indietro   Coelestis - Il Forum Italiano di Astronomia > Il Mondo dell'Astronomo dilettante > Rudi Mathematici
Registrazione Regolamento FAQ Lista utenti Calendario Cerca Messaggi odierni Segna come letti

Rispondi
 
Strumenti della discussione Modalità  di visualizzazione
Vecchio 06-10-11, 23:45   #41
Erasmus
Utente Super
 
L'avatar di Erasmus
 
Data di registrazione: Feb 2008
Ubicazione: Unione Europea
Messaggi: 5,568
Predefinito Re: Estrazioni casuali

Quote:
Erasmus Visualizza il messaggio
... la probabilità di non aver ancora sballato dopo k sorteggi è 1/k!
Questa è la probabilità che la somma di k numeri casuali tra 0 e 1 non sia maggiore di 1.
[Che questa probabilità valga 1/k! l'abbiamo già visto. Forse sarebbe però il caso di rivederlo senza far uso del concetto di convoluzione. Ma semmai lo faremo dopo]. [...]
Quote:
aspesi Visualizza il messaggio
Questo piacerà senz'altro a Astromauh...
Quel che segue piacerà a Nino I

Costruisco una tabella A di n righe ed n colonne –e quindi una matrice quadrata di n^2 elementi che chiamo A(h, k) – nel modo seguente.
• La prima riga, che però considero la numero 0, ha tutti gli elementi uguali ad 1
1)
A(0, k) = 1 per ogni k per cui 0 ≤ k ≤ n.
• Le righe successive incominciano sempre con 1 e ogni successivo elemento è la somma del precedente e dell'elemento che sta nella stessa colonna della riga precedente
2)
• A(h, k) = A(h, k–1) + A(h–1, k) per ogni h e per ogni k tra 1 ed n inclusi.
Con queste regole viene una tabella così:
Codice:

Colonna ––> 0    1    2    3    4    5    6    7    8    9   10  ...
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Riga 0   |  1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1, ...
Riga 1   |  1,   2,   3,   4,   5,   6,   7    8,   9,  10,  11, ...
Riga 2   |  1,   3,   6,  10,  15,  21,  28,  36,  45,  55,  66, ...
Riga 3   |  1,   4,  10,  20,  35,  56,  84, 120, 165, 220, 286, ...
Riga 4   |  1,   5,  15,  35,  70, 126, 210, 330, 495, 715,1001, ...
Riga 5   |  1,   6,  21,  56, 126, 252, 462, 792,1287,2002,3003, ...
Riga 6   |  1,   7,  28,  84, 210, 462, 924,1716,3003,5005, ..., ...
Riga 7   |  1,   8,  36, 120, 330, 792,1716,3432,6435, ..., ..., ...
Riga 8   |  1,   9,  45, 165, 495,1287,3003,6435, ..., ..., ..., ...
Riga 9   |  1,  10,  55, 220, 715,2002,5005, ..., ..., ..., ..., ...
Riga 10  |  1,  11,  66, 286,1001,3003, ..., ..., ..., ..., ..., ... 
...      |..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ... 
NB. La proprietà con cui la tabella è definita equivale a quest'altra:
• Un elemento qualsiasi è la somma degli elementi della riga precedente dall'inizio fino a quello sulla sua stessa colonna inclusa.

3)
A(h+1, k) = A(h, 0) + A(h, 1) + A(h, 2) + ... + A(h, k) per ogni h e ogni k tra 0 ed n inclusi


Mandiamo a memoria questa proprietà!
Ci servirà per stabilire che la probabilità di non “sballare” dopo k sorteggi vale 1/k!

Uno sguardo a questa tabella ... e si nota subito che se si scambiano le righe con le colonne non cambia niente. E' una matrice simmetrica (rispetto alla diagonale discendente da sinistra a destra), cioè uguale alla sua trasposta.
4)
A(h, k) = A (k, h)
Ma c'è di più: se si prendono per righe le linee ascendenti da sinistra a destra si nota subito che gli elementi sono i coefficienti binomiali C(r, m) del "Triangolo di Tartaglia".
1
1 2 1
1 3 3 1
1 4 6 4 1
---
Deve essere così perché la proprietà 2) che definisce la matrice, rispetto alle linee oblique ascendenti da sinistra a destra è la stessa proprietà caratteristica dei coefficienti binomiali:
C(r+1,m) = C(r, m–1) + C(r, m).
In sostanza, gli elementi della tabella valgono
5)
A(h, k) = A(k, h) = C(h+k, h) = C(h+k, k)

Ciò permette di calcolare direttamente (senza ricorrenza) gli elementi della tabella essendo notoriamente:
6)
C(n+k, k) = (n+k)!/(n! k!) = [(n+1)(n+2) ·... ·(n+k)]/k!

Tornando al quiz, in luogo di considerare la distribuzione uniforme e continua sull’intervallo 0 ≤ x ≤ 1, consideriamo la distribuzione “discreta” di n razionali – con n grande a piacere – equispaziati su questo intervallo con la legge Xr = (2r + 1)/(2n) per r intero da 0 ad n–1. Il numero T(k, n) di k–tuple sorteggiabili è allora n^k. Se le k–tuple sono tutte equiprobabili, la probabilità di non “sballare” dopo k sorteggi è il rapporto tra il numero di k-tuple la somma dei cui elementi non supera 1 ed il numero totale di k-tuple sorteggiabili n^k.

Se k = 1, evidentemente non si sballa mai.
Siamo allora nella situazione della riga numero 0 della tabella di sopra arrestata per k = h = n.
Il numero di numeri sorteggiabili è in tutto n. Tutti i numeri sono minori di 1: T(n, 1) = n. Ricordando i simboli A(h, k) della tabella di sopra abbiamo dunque:
T(n, 1) = A(n, 1) = A(1, n) = n.

Passiamo al caso k = 2. Siano X1 ed X2 i numeri sorteggiati. Per non sballare deve essere X1 + X2 ≤ 1. Se il primo numero sorteggiato è X1 = (2r+1)/(2n) ed il secondo è (2s+1)/(2n), deve essere 2(r+s)+2 ≤ 2n, ossia s ≤ n–1. Dato X1, cioè r, di tali numeri X2 ce ne sono n–r.
Se dunque r vale n – 1 ce n’è uno solo, se r vale n–2 ce ne sono 2, ... se r vale 0 ce ne sono n. In tutto sono 1 + 2 + 3 + ... + n. Ci troviamo allora nell riga numero 1 della tabella e, per la proprietà caratteristica della tabella, avremo:
T(n, 2) = A(n, 2) = A(2, n) = A(1, 0) + A(1, 1) + A(1, 2)+... + A(1, n) =
= 1 + 2 + 3 + ... + n = n·(n+1)/2.

Passiamo al caso k = 3.
Detto X3 = (2r+1)/(2n), r può variare da 0 ad n – 1. Supponiamolo massimo: r = n–1. Se X1 ed X2 sono minimi, cioè X1 = X2 = 1/(2n) abbiamo X1 + X2 + X3 = [(2n–1)+2]/(2n) = 1+1/(2n) : la terna fa “sballare”.
Fissato r, il numero di coppie per le quali non si sballa è T(r, 2). Il numero di terne con le quali non si sballa è allora
T(n, 3) = T(0, 2) + T(1, 2) + ... +T(n–1, 2) = A(0, 2) + A(1, 2) +...+ A(n–1, 2) = A(n–1, 3) = A(3, n–1)

Supponiamo che per ogni k < m sia T(n, k) = A(n, k) .
[NB. Anche se qualche volta fosse invece T(n, k) = A(n –1, k), un tale errore non inficierebbe l'obiettivo finale perché non cambierebbe il limite di T(n, k)/n^k per n tendente all'infinito]
Per k = m, il numero di m-tuple con le quali non si sballa è allora:

T(n, m) = T(0, m–1) + T(1, m–1) + ... + T(n–1, m–1) =
= A(0, m–1) + A(1, m–1) + ... + A(n–1, m–1) = A(n–1, m) = A(m, n–1).

Tenendo conto della 6) abbiamo infine
T(n, k) = A(k, n–1) = C(n+k–1, k) = [n·(n+1)· ... ·(n+k–1)]/k!

Sicché la probabilità di non “sballare” dopo k sorteggi di un numero compreso tra 0 e 1 sorteggiato da un insieme di n numeri equiprobabili è
7)
T(n, k)/(n^k) = {[n·(n+1)· ... ·(n+k–1)]/(n^k)} · (1/k!).


E’ allora evidente che al tendere di n all’infinito T(n, k)/(n^k) tende a 1/k!
-----------------
__________________
Erasmus
«NO a nuovi trattati intergovernativi!»
«SI' alla "Costituzione Europea" federale, democratica e trasparente!»

Ultima modifica di Erasmus : 07-10-11 12:58.
Erasmus non in linea   Rispondi citando
Vecchio 07-10-11, 09:45   #42
aspesi
Utente Super
 
L'avatar di aspesi
 
Data di registrazione: Nov 2009
Ubicazione: Terra dei Walser
Messaggi: 4,383
Predefinito Re: Estrazioni casuali

Quote:
aspesi Visualizza il messaggio
Interrogazione

"Ragazzi, oggi interrogo a tappeto. Siete in 29, ed ho già in mente l'ordine con cui vi interrogherò, ma non ve lo dico. Vi dico solo che Mario sarà interrogato prima di Claudia e prima di Aldo".
Che probabilità ha Giulio di essere interrogato prima di Mario?

La mia soluzione è questa:

1/4 indipendentemente dal numero degli alunni!

I 4 alunni menzionati (Mario, Claudia, Aldo e Giulio) potrebbero essere interrogati in 4! = 24 ordini diversi.

L'affermazione della Prof. ne invalida ben 16;
restano questi 8 casi:
M - C - A - G
M - C - G - A
M - A - C - G
M - A - G - C
M - G - A - C
M - G - C - A
G - M - C - A
G - M - A - C

Come si può vedere, solo due volte su 8 Giulio precede Mario.

E gli altri 25? Possono essere inseriti a piacere prima, dopo o tra i quattro menzionati.


Ultima modifica di aspesi : 07-10-11 09:48.
aspesi non in linea   Rispondi citando
Links Sponsorizzati
Astrel Instruments
Vecchio 07-10-11, 14:17   #43
astromauh
Utente Super
 
L'avatar di astromauh
 
Data di registrazione: Sep 2007
Messaggi: 3,797
Predefinito Re: Estrazioni casuali

Questo quiz l'ho sbagliato due volte.

Perchè avevo calcolato anche una probabilità del 50%, anche se mi sono accorto in tempo che era errata. Le simulazioni non sono sempre attendibili, perchè si può sbagliare ad impostarle.

In questo caso ad esempio, avevo imposto al programma che Claudia fosse interrogata sempre prima di Aldo, mentre questo non è vero.

Quindi attribuivo ad Aldo un valore random da 1 a 29, e dopo a Claudia un valore random tra 1 e Aldo, e questo faceva si che il valore di Claudia fosse mediamente più piccolo di quello che doveva essere.

La procedura corretta era invece quella di generare due valori random da 1 a 29.
In questo modo il valore più piccolo tra i due, non è cosi' piccolo come con il calcolo precedente.


__________________
www.Astrionline.it
Astromauh <a href=http://www.trekportal.it/coelestis/images/icons/icon10.gif target=_blank>http://www.trekportal.it/coelestis/i...ons/icon10.gif</a>
astromauh non in linea   Rispondi citando
Vecchio 08-10-11, 00:56   #44
Erasmus
Utente Super
 
L'avatar di Erasmus
 
Data di registrazione: Feb 2008
Ubicazione: Unione Europea
Messaggi: 5,568
Predefinito Re: Estrazioni casuali

Quote:
astromauh Visualizza il messaggio
La procedura corretta era invece quella di generare due valori random da 1 a 29.
In questo modo il valore più piccolo tra i due, non è cosi' piccolo come con il calcolo precedente.

---------------------
Secondo me, conviene andare il più ... pedissequamente possibile (infischiandosene dell'efficienza nei riguardi del tempo di esecuzione del programma).

Io la simulazione la farei dunque cosi:
A) Assegno a Giulio, Mario, Claudia e Aldo dei numeri precisi (per esempio rispettivamente i numeri 1, 2, 3 e 4).
Quindi continuo a ripetere il sorteggio completo dei numeri tra 1 e 29 e man mano che li genero li metto in ordine crescente su un array A di indice da 1 e 29.
sorteggio ultimato individuo in esso le posizioni degli elementi che valgono 2, 3 o 4 {che sono i nomi locali di Mario, Claudia e Aldo}.
Siano rispettivamente
A[h] = 2; {questo è il nome locale di Mario}
A[j] = 3; {questo è il nome locale di Claudia}
A[k] = 4; {questo è il nome locale di Aldo}
Quindi guardo se è verificata la prima proposizione:
« Mario sarà interrogato prima di Claudia e prima di Aldo»
che nel programma diventa
(*) h < j AND h < k
Se è verificata allora
• incremento di 1 il contatore N (con partenza da 0)
• individuo nell'array l'elemento che vale 1 e sia questo A[r] {A[r] è il nome locale di Giulio)
e controllo se è verificata la 2ª proposizione cioè
«Giulio interrogato prime di Mario»
che ora diventa
(**) r < h.
Se questa è verificata incremento di 1 un secondo contatore M.
Mi fermo quando N è grande quanto avevo previsto (un milione?).

La cercata probabilità é il rapporto M/N

---------------------
__________________
Erasmus
«NO a nuovi trattati intergovernativi!»
«SI' alla "Costituzione Europea" federale, democratica e trasparente!»
Erasmus non in linea   Rispondi citando
Vecchio 08-10-11, 05:56   #45
astromauh
Utente Super
 
L'avatar di astromauh
 
Data di registrazione: Sep 2007
Messaggi: 3,797
Predefinito Re: Estrazioni casuali

Quote:
Erasmus Visualizza il messaggio

---------------------
Secondo me, conviene andare il più ... pedissequamente possibile (infischiandosene dell'efficienza nei riguardi del tempo di esecuzione del programma).
Si, hai ragione. In effetti mi ero confuso perchè avevo cominciato con il considerare che per M(Mario) la posizione nell'array potesse variare da 1 a 27, e per C(Claudia) e per A(Aldo), da 2 a 27, oppure da 3 a 28 a secondo di quale dei due fosse interrogato per prima.

Quote:
Io la simulazione la farei dunque cosi:
A) Assegno a Giulio, Mario, Claudia e Aldo dei numeri precisi (per esempio rispettivamente i numeri 1, 2, 3 e 4).
Quindi continuo a ripetere il sorteggio completo dei numeri tra 1 e 29 e man mano che li genero li metto in ordine crescente su un array A di indice da 1 e 29.
No, non esageriamo, non hai bisogno di sorteggiare ogni volta tutte e 29 le posizioni degli studenti, ma solo quelle dei quattro studenti che vengono menzionati nel quiz.

La simulazione è molto più semplice.

Attribuisci dei valori casuali tra 1 e 29 ai tre studenti M, C, A.

Se C<>A and M<C and M<A allora questi valori sono validi, se invece una di queste condizioni non è rispettata, ripeti l'operazione fino a quando non ottieni dei valori che rispettino le condizioni date.

Una volta ottenuti questi valori M, C, A

Attribuisci un valore casuale tra 1 e 29 a G.

Se G è diverso dai valori M, C, A, è un valore valido, se non lo è, ripeti l'operazione finchè non ottieni un valore di G diverso da quello degli altri.

Se G<M incrementa un contatore (Punti) di una unità.

Ripeti questa procedura per un gran numero di Volte (ad es. un milione)

La Probabilità richiesta è data dal rapporto Punti/Volte.




volte=1000000

for v=1 to volte
Do
c= int(rnd *29) + 1
a= int(rnd *29) + 1
m= int(rnd *29) + 1
Loop until c<>a and m<a and m<c

Do
g= int(rnd * 29)+ 1
Loop until g<>m and g<>c and g<>a

if g<m then punti=punti+1
next

response.write("Probabilità=" & punti/volte)


__________________
www.Astrionline.it
Astromauh <a href=http://www.trekportal.it/coelestis/images/icons/icon10.gif target=_blank>http://www.trekportal.it/coelestis/i...ons/icon10.gif</a>
astromauh non in linea   Rispondi citando
Vecchio 08-10-11, 10:55   #46
Erasmus
Utente Super
 
L'avatar di Erasmus
 
Data di registrazione: Feb 2008
Ubicazione: Unione Europea
Messaggi: 5,568
Predefinito Re: Estrazioni casuali

Quote:
astromauh Visualizza il messaggio
... non hai bisogno di sorteggiare ogni volta tutte e 29 le posizioni degli studenti, ...
Ma io non ho detto che è necessario fare così!
Ho espresso l'idea che, in questo modo "pedissequo" (se vuoi sprecone) la simulazione
1) è giusta
2) è la più facile da implementare (evitando tutti i ragionamenti con cui si possono dedurre – come vedo che fai tu – dall'AND delle due condizioni eventuali riduzioni di casi da esaminare ).

Siccome in antico non c'erano né i computer né le calcolatrici meccaniche o elettromeccaniche, a parte casi elementari, la simulazione era intrattabile al pari dell'esame esaustivo di tutti i casi possibili. Allora il ragionare e applicare i teoremi della teoria della probabilità era fondamentale!
Con l'avvento del calcolo automatico, più veloce è questo meno importante è ridurre il numero di cose da fare; cioè: meno importante è il complicare le cose da fare al fine di ridurne il numero.
Per esempio, tu dici che devi variare in tutti i modi possibili le posizioni di soli 4 elementi su 29.
Vedi che allora devi condizionare il tuo generatore random tra 1 e 29 tranne la prima volta.
[La seconda volta devi fargli evitare la posizione uscita la prima volta, la terza volta fargli evitare le due posizioni già uscite, la quarta volta fargli evitare le tre posizioni già uscite.
Mi dirai: «Mi costa molto poco perché basta ripetere fino a che il numero che esce è diverso da quelli già usciti!»
E' vero: ma è pur sempre il risultato di un ragionamento deduttivo, è quindi una complicazione in più sul programma, E tu mi insegni (anche in questo caso) che a volte si sbagliano le conclusioni diel ragionamento!

Insomma: se non ci sono problemi sul tempo di esecuzione, quando si fa simulazione conviene andare il più terra-terra possibile.

Puoi anche metterla così:
a) Le permutazioni di 29 elementi sono 29! (ventinove fattoriale). Le faccio tutte.
b) Seleziono da esse quelle che rispettano la 1ª condizione. Siano queste N.
c) Da queste N seleziono quelle che rispettano la 2ª condizione. Siano esse M.
d) La probabilità richiesta è M/N.
---------------------
Ma il fare tutte le 29! permutazioni è ... più complicato che il non farle!
Siccome 29! è un numero enorme (più di 2·10^46) ci basterà esaminare un suo campione molto numeroso ma ancora enormemente più piccolo di 29! purché ogni elemento del campione abbia la stessa probabilità (di essere cascato nel campione) di ogni altro.

Non c'è nemmeno bisogno che le singole permutazioni siano tutte distinte una dalle altre se il generatore random è "abbastanza" uniforme" non già sul singolo numero estratto ma proprio sulle singole permutazioni.
[E' questa la pulce che una volta ho messo nell'orecchio di Miza. Lui, poco dopo, mi rispose che aveva controllato e che il suo generatore random andava bene anche nell'estrarre liste di k numeri (diciamoli "vettori ai k dimensioni"). Ma proprio perché mi ha risposto poco dopo, vuol dire che il controllo non gli è costato tempi lunghissimi, ossia che 'sto controllo l'ha fatto per un numero massimo di dimensioni ancora piccoletto (qualche decina?).]

Supponiamo che le permutazioni generate siano equiprobabili.
Ecco allora che il punto a) del programma diventa:
a) Prendo un fottìo di permutazioni scelte a caso tra le 29! possibili.
mentre restano inalterati i punti b), c) e d).

Naturalmente non c'è bisogno di registrare le permutazioni prima di esaminarle. C'è bisogno solo di contare quante sono che soddisfano la prima condizione e, tra queste, quante sono che soddisfano la seconda. Il conteggio lo posso fare man mano che genero le permutazioni.
Mi servono allora tre contatori. Uno che conta le permutazioni generate in modo che il programma termini quando è raggiunto il fottìo voluto; uno che cresce di un'unità quando è verificata la 1ª condizione ed un terzo che cresce di 1 quando, essendo già verificata la 1ª condizione, è verificata anche la seconda.
Codice:
Costanti: F = <fottìo> {che credo abbastanza numeroso per i miei scopi}
Variabili: k, M ed N numeri interi;
              D array di 29 interi dal 1° al 29-esimo;
              p numero non intero {probabilità richiesta}
{Inizio}
      k:=0; N:=0; M:=0;
      Continua a ripetere
          {inizio}
              k:= k +1; 
              D:= <random_permutazione degli interi da 1 a 29>;
              se <D verifica la condizione 1> allora
                {inizio}  
                    N:=N+1;
                    se <D verifica la condizione 2> allora M:=M+1
               {fine}
              a meno che non succeda k = F {= voluto fottìo di permutazioni da esaminare} 
          {fine}
      p:= M/N;  <scrivi dove  sai tu i numeri F, N, M e p>
{Fine}.
Il programma può essere ..." filosoficamente " interpretato così:
• Fin che no so niente l'interrogazione può avvenire con ordine qualsiasi.
• Venuto a sapere che l'ordine rispetterà due condizioni
• • Scarto le disposizioni con ordine tale da non rispettare la prima condizione e conto le rimanenti.
• • Fra quelle non scartate guardo quante rispettano anche la seconda e le conto.

--------------


P.S.
Se fai anche il rapporto N/F, individui pure la probabilità che venga rispettata la prima condizione
__________________
Erasmus
«NO a nuovi trattati intergovernativi!»
«SI' alla "Costituzione Europea" federale, democratica e trasparente!»

Ultima modifica di Erasmus : 08-10-11 13:14.
Erasmus non in linea   Rispondi citando
Links Sponsorizzati
Telescopi Artesky
Vecchio 08-10-11, 19:30   #47
astromauh
Utente Super
 
L'avatar di astromauh
 
Data di registrazione: Sep 2007
Messaggi: 3,797
Predefinito Re: Estrazioni casuali

Quote:
Erasmus Visualizza il messaggio
Ma io non ho detto che è necessario fare così!
Ho espresso l'idea che, in questo modo "pedissequo" (se vuoi sprecone) la simulazione
1) è giusta
2) è la più facile da implementare (evitando tutti i ragionamenti con cui si possono dedurre – come vedo che fai tu – dall'AND delle due condizioni eventuali riduzioni di casi da esaminare ).
Se lo scopo è quello di evitare degli errori, il tuo "sistema" ha un effetto contrario, perchè introduce un calcolo in più, che potrebbe contenere degli errori.

Generare delle permutazioni di 29 elementi si può fare in diversi modi.

Un metodo potrebbe essere quello di generare 29 numeri casuali, e se questi numeri risultano tutti diversi tra loro, convalidare il risultato.

Questo metodo è estremamente pesante in termini di lavoro del processore, perchè le probabilità che questi numeri siano tutti diversi tra loro sono pochissime.

Questo metodo è basato sullo stesso principio che ho adottato nel mio programma, solo che funziona bene se gli elementi in gioco sono pochi, ma malissimo se sono 29.

Un'altra possibilità sarebbe quella di generare queste permutazioni casuali di 29 elementi, e di scartare i doppioni, mano a mano che si presentano. Ma questo metodo risulta laborioso perchè ogni volta bisognerebbe confrontare un nuovo numero estratto con quelli estratti in precedenza per accertarsi che sia diverso.

In realtà esiste un altro metodo per generare delle permutazioni casuali di 29 elementi, senza sprechi ed in modo veloce ed efficiente. Lo avevo illustrato su questo forum, qualche tempo fa.

Credo che non ho impostato la simulazione nel modo che suggerisci, perchè non avevo l'algoritmo che genera delle permutazioni casuali a portata di mano, ma c'ho pensato anch'io.

Solo che nel nostro problema non ci interessa nulla della posizione di tutti e 29 elementi, ma solo quella dei quattro elementi citati.

Quindi per quale ragione agiresti in modo pedissequo?

Se nel generare i quattro valori casuali mi accerto che siano tutti diversi, faccio la stessa cosa che farei se volessi generare delle permutazioni casuali di 29 elementi.

Ma che mi frega di sapere in che ordine sono stati interrogati Guendalina, Francesca, Roberto ecc. se non vengono citati nel problema?

Il mio programma fa le stesse cose che farebbe il programma immaginato da te, ossia genera delle posizioni casuali per i quattro studenti, accertandosi che non ci siano doppioni, e verifica che sia rispettata la condizione imposta, ossia che m<a and m<c

Il tuo programma fa le stesse cose che fa il mio, aggiungendovi delle altre cose che però sono perfettamente inutili.

Il bello è che tu queste cose le capisci perfettamente, ma allora qual è il tuo punto?

La verità è che quel diavolo di Aspesi c'ha "fregati" a tutti e due, perchè il suo quiz non richiedeva una simulazione, ma era sufficiente verificare quante delle possibili permutazioni di quattro elementi, soddisfavano le condizioni poste.

__________________
www.Astrionline.it
Astromauh <a href=http://www.trekportal.it/coelestis/images/icons/icon10.gif target=_blank>http://www.trekportal.it/coelestis/i...ons/icon10.gif</a>
astromauh non in linea   Rispondi citando
Vecchio 08-10-11, 19:48   #48
aspesi
Utente Super
 
L'avatar di aspesi
 
Data di registrazione: Nov 2009
Ubicazione: Terra dei Walser
Messaggi: 4,383
Predefinito Re: Estrazioni casuali

Quote:
astromauh Visualizza il messaggio
Generare delle permutazioni di 29 elementi si può fare in diversi modi.

Un metodo potrebbe essere quello di generare 29 numeri casuali, e se questi numeri risultano tutti diversi tra loro, convalidare il risultato.

Questo metodo è estremamente pesante in termini di lavoro del processore, perchè le probabilità che questi numeri siano tutti diversi tra loro sono pochissime.
Vorrei ben vedere...
Questa probabilità è 3,44*10^(-12) tre ogni millle miliardi di prove....

Quote:
astromauh Visualizza il messaggio
Solo che nel nostro problema non ci interessa nulla della posizione di tutti e 29 elementi, ma solo quella dei quattro elementi citati.

Quindi per quale ragione agiresti in modo pedissequo?

La verità è che quel diavolo di Aspesi c'ha "fregati" a tutti e due, perchè il suo quiz non richiedeva una simulazione, ma era sufficiente verificare quante delle possibili permutazioni di quattro elementi, soddisfavano le condizioni poste.


Ehehe...

Ciao
aspesi non in linea   Rispondi citando
Vecchio 08-10-11, 20:06   #49
astromauh
Utente Super
 
L'avatar di astromauh
 
Data di registrazione: Sep 2007
Messaggi: 3,797
Predefinito Re: Estrazioni casuali

1234 4231 1432 1243 3214 4213 3412 3241 1324 4321
1423 1342 2134 4132 2431 2143 3124 4123 3421 3142
2314 4312 2413 2341


GMAC CMAG GCAM GMCA AMGC CMGA ACGM AMCG GAMC CAMG
GCMA GACM MGAC CGAM MCAG MGCA AGMC CGMA ACMG AGCM
MAGC CAGM MCGA MACG

GMAC CMAG GCAM GMCA AMGC CMGA ACGM AMCG GAMC CAMG
GCMA GACM MGAC CGAM MCAG MGCA AGMC CGMA ACMG AGCM
MAGC CAGM MCGA MACG

Quote:
Erasmus Visualizza il messaggio
P.S.
Se fai anche il rapporto N/F, individui pure la probabilità che venga rispettata la prima condizione
La probabilità è 1/3.
__________________
www.Astrionline.it
Astromauh <a href=http://www.trekportal.it/coelestis/images/icons/icon10.gif target=_blank>http://www.trekportal.it/coelestis/i...ons/icon10.gif</a>
astromauh non in linea   Rispondi citando
Vecchio 09-10-11, 04:49   #50
Erasmus
Utente Super
 
L'avatar di Erasmus
 
Data di registrazione: Feb 2008
Ubicazione: Unione Europea
Messaggi: 5,568
Predefinito Re: Estrazioni casuali

Quote:
astromauh Visualizza il messaggio
Un'altra possibilità sarebbe quella di generare queste permutazioni casuali di 29 elementi, e di scartare i doppioni, mano a mano che si presentano. Ma questo metodo risulta laborioso perchè ogni volta bisognerebbe confrontare un nuovo numero estratto con quelli estratti in precedenza per accertarsi che sia diverso.
Non mi pare che sia troppo laborioso accertare che un numero random tra 1 e 29 sia distinto da quelli già precedentemente prodotti.

In pascal mi ricordo che c'era il tipo set (= insieme) di elementi di qualsiasi tipo. L'appartenenza o meno di x all'insieme S era espressa dalla seguente funzione booleana predefinita (tramite la parola riservata in):
x in S
.
L'unione di due insiemi si esprimeva col " + "
Supposto che Random(1, N) fosse una precedente routine function che producesse un intero casuale tra 1 ed N inclusi, l'aggiunta ad S di un nuovo elemento casuale non ancora presente in S poteva essere ottenuta con le istruzioni:
k:=Random(1, N);
while k in S do k:=Random(1, N);
S:= S + [k]:


Ma anche senza disporre di una tanto comodo iinguaggio, si può sempre procedere (per esempio) ... come è spiegato qua sotto.

a) Numero random tra 1 e N
Possiedo un generatore random di reali tra 0 e 1.
Un numero intero casuale k tra 1 ed N inclusi è questo: {
k:=int(N*random) + 1; {dove int(x) significa <parte intera del reale x>}
if k=N+1 then k:=k–1;

Un altro modo potrebbe essere quello di costruire un intero tra 1 e 2^c, dove c è l'esponente intero tale che 2^(c–1) < N ≤ 2^c con la routine seguente
Codice:

ripeti
   k:=1;
   x:=1;
   per c volte di seguito fa
        {inizio}
            y:=int(random); 
            se y > 0 allora k:=k+x;
             x:=2*x
        {fine}
a meno che non sia k < N+1 
B) Permutazione random degli N interi tra 1 ed N inclusi
Suppongo di possedere un generatore random di numeri interi tra 1 ed N compresi (prodotti, per esempio, con uno dei due metodi di sopra), ossia una funzione – che chiamo random(1, N) – per la quale con l'istruzione [size=3]
k:=random(1, N)[/size]

ottengo un numero intero k casuale tra 1 ed N.
Allora:
• Assumo una variabile A di tipo array unidimensionale di N interi tra 1 ed N inclusi e azzero tutti i suoi N elementi.
• Produco il primo k casuale tra 1 e 29 e lo carico al primo posto dell'array A
• Continuo a produrre k casuali tra 1 e N. Se il nuovo k casuale non è già presente nell'array A lo carico nel posto successivo a quelli già occupati. Se era già presente ripeto la produzione fino a che ne trovo uno non ancora presente (e carico questo nel prossimo posto non ancora occupato). Arrivato ad averne caricati N–1, potrei anche cercare quale numero k è ancora assente e schiaffarlo all'N-esimo posto. La routine della ricerca di questo numero k ancora assente potrebbe essere la seguente:
Codice:

h:=0; 
j.=0;
k:=0
ripeti
     h.=h+1;        {cerco se è presente o no il numero h; se non c'è provo con h+1}
     ripeti             {confronto gli elementi di A con h a partire da A[1] 
          j:=j+1;
          se A[j]= h  allora allora j=0
     a meno che non sia ( (j=0) oppure (j=N–1) );   
     se j = N–1 allora k=h
a meno che non sia (k > 0) 
Chiamo Last(A, N) una routine come questa che mi completa la permutazione casuale degli N interi tra 1 ed N caricati sull'arrey A una volta che A sia stato caricato fino all'(N–1)-esimo elemento.
L'algoritmo della produzione random potrebbe essere questo.
Codice:

A[1]:=Random(1, N);
Per h da 2 ad N fa A[h]:=0;
h.=1;
ripeti
     h.=h+1;
     j:=0; OK:=1
     ripeti
           j:=j+1
           k:=Random(1, N);
           se ( (OK=1) e (k = A[j] ) allora (OK=0);
     a meno che non sia (j=h) e (OK = 1);
     A[h]:= k
a meno che non sia (h = N–1);
A[N]:=Last(A, N) 
Ciao, ciao
__________________
Erasmus
«NO a nuovi trattati intergovernativi!»
«SI' alla "Costituzione Europea" federale, democratica e trasparente!»

Ultima modifica di Erasmus : 09-10-11 04:53.
Erasmus non in linea   Rispondi citando
Rispondi


Links Sponsorizzati
Geoptik

Strumenti della discussione
Modalità  di visualizzazione

Regole di scrittura
Tu non puoi inserire i messaggi
Tu non puoi rispondere ai messaggi
Tu non puoi inviare gli allegati
Tu non puoi modificare i tuoi messaggi

codice vB è Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato


Tutti gli orari sono GMT. Attualmente sono le 03:59.


Powered by vBulletin versione 3.6.7
Copyright ©: 2000 - 2018, Jelsoft Enterprises Ltd.
Traduzione italiana a cura di: vBulletinItalia.it