-
Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 21:16:00.0 alle 2010-03-29 21:16:00.0Il metodo esposto in
http://insulae.net/pub/estrazione.pdf
(versione più recente)
è teoricamente corretto, ma in pratica può dare dei problemi.
Ad esempio, supponiamo che le tre probabilità siano 1/3, 1/3, 1/3. In tal caso, usando un numero finito d di cifre decimali, saranno rappresentate da
0,333333...33333
0,333333...33333
0,333333...33333
la cui somma dà
0,999999...99999
Che fare del caso escluso, la cui probabilità è
0,000000...00001
molto piccola ma corrispondente, nel caso di molte estrazioni, a un numero di elementi estratti diverso da zero? Che fare di quegli elementi estratti?
È corretto assegnarli a caso, di volta in volta, a uno degli altri tre casi?
E nel caso generale?
sassofono, illuminaci.
-
Re: Estrazione errata da un array- Scritto da:
> Il metodo esposto in
> http://insulae.net/pub/estrazione.pdf
> (versione più recente)
> è teoricamente corretto, ma in pratica può dare
> dei
> problemi.
>
> Ad esempio, supponiamo che le tre probabilità
> siano 1/3, 1/3, 1/3. In tal caso, usando un
> numero finito d di cifre decimali, saranno
> rappresentate
> da
>
> 0,333333...33333
> 0,333333...33333
> 0,333333...33333
>
> la cui somma dà
>
> 0,999999...99999
>
> Che fare del caso escluso, la cui probabilità è
>
> 0,000000...00001
>
> molto piccola ma corrispondente, nel caso di
> molte estrazioni, a un numero di elementi
> estratti diverso da zero? Che fare di quegli
> elementi
> estratti?
>
> È corretto assegnarli a caso, di volta in volta,
> a uno degli altri tre
> casi?
> E nel caso generale?
>
>
sassofono, illuminaci.
Irrilevante. Stiamo parlando di estrazioni casuali, non di dividere una torta con il massimo della precisione. Per quanto tu possa inventarti un algoritmo molto buono DIFFICILMENTE alla fine delle estrazioni (dopo milioni e milioni di estrazioni) avrai esattamente 1/3 1/3 1/3, tuttalpiù avrai qualcosa che ci si avvicina.
-----------------------------------------------------------
Modificato dall' autore il 29 marzo 2010 21.27
------------------------------------------------------------
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 22:06:00.0 alle 2010-03-29 22:06:00.0> > Il metodo esposto in
> > http://insulae.net/pub/estrazione.pdf
> > (versione più recente)
> > è teoricamente corretto, ma in pratica può dare
> > dei problemi.
> >
> > Ad esempio, supponiamo che le tre probabilità
> > siano 1/3, 1/3, 1/3. In tal caso, usando un
> > numero finito d di cifre decimali, saranno
> > rappresentate
> > da
> >
> > 0,333333...33333
> > 0,333333...33333
> > 0,333333...33333
> >
> > la cui somma dà
> >
> > 0,999999...99999
> >
> > Che fare del caso escluso, la cui probabilità è
> >
> > 0,000000...00001
> >
> > molto piccola ma corrispondente, nel caso di
> > molte estrazioni, a un numero di elementi
> > estratti diverso da zero? Che fare di quegli
> > elementi
> > estratti?
> >
> > È corretto assegnarli a caso, di volta in volta,
> > a uno degli altri tre
> > casi?
> > E nel caso generale?
> >
> >
sassofono, illuminaci.
>
> Irrilevante. Stiamo parlando di estrazioni
> casuali, non di dividere una torta con il massimo
> della precisione. Per quanto tu possa inventarti
> un algoritmo molto buono DIFFICILMENTE alla fine
> delle estrazioni (dopo milioni e milioni di
> estrazioni) avrai esattamente 1/3 1/3 1/3,
> tuttalpiù avrai qualcosa che ci si
> avvicina.
È vero ma questo difettuccio introduce un 'bias'.-
Re: Estrazione errata da un array
- Scritto da:
> > > Il metodo esposto in
> > > http://insulae.net/pub/estrazione.pdf
> > > (versione più recente)
> > > è teoricamente corretto, ma in pratica può
> dare
> > > dei problemi.
> > >
> > > Ad esempio, supponiamo che le tre probabilità
> > > siano 1/3, 1/3, 1/3. In tal caso, usando un
> > > numero finito d di cifre decimali, saranno
> > > rappresentate
> > > da
> > >
> > > 0,333333...33333
> > > 0,333333...33333
> > > 0,333333...33333
> > >
> > > la cui somma dà
> > >
> > > 0,999999...99999
> > >
> > > Che fare del caso escluso, la cui probabilità
> è
> > >
> > > 0,000000...00001
> > >
> > > molto piccola ma corrispondente, nel caso di
> > > molte estrazioni, a un numero di elementi
> > > estratti diverso da zero? Che fare di quegli
> > > elementi
> > > estratti?
> > >
> > > È corretto assegnarli a caso, di volta in
> volta,
> > > a uno degli altri tre
> > > casi?
> > > E nel caso generale?
> > >
> > >
sassofono, illuminaci.
> >
> > Irrilevante. Stiamo parlando di estrazioni
> > casuali, non di dividere una torta con il
> massimo
> > della precisione. Per quanto tu possa inventarti
> > un algoritmo molto buono DIFFICILMENTE alla fine
> > delle estrazioni (dopo milioni e milioni di
> > estrazioni) avrai esattamente 1/3 1/3 1/3,
> > tuttalpiù avrai qualcosa che ci si
> > avvicina.
>
> È vero ma questo difettuccio introduce un 'bias'.
Infinitesimale, quindi inesistente.-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 23:08:00.0 alle 2010-03-29 23:08:00.0> > > > Il metodo esposto in
> > > > http://insulae.net/pub/estrazione.pdf
> > > > (versione più recente)
> > > > è teoricamente corretto, ma in pratica può
> > dare
> > > > dei problemi.
> > > >
> > > > Ad esempio, supponiamo che le tre
> probabilità
> > > > siano 1/3, 1/3, 1/3. In tal caso, usando un
> > > > numero finito d di cifre decimali, saranno
> > > > rappresentate
> > > > da
> > > >
> > > > 0,333333...33333
> > > > 0,333333...33333
> > > > 0,333333...33333
> > > >
> > > > la cui somma dà
> > > >
> > > > 0,999999...99999
> > > >
> > > > Che fare del caso escluso, la cui
> probabilità
> > è
> > > >
> > > > 0,000000...00001
> > > >
> > > > molto piccola ma corrispondente, nel caso di
> > > > molte estrazioni, a un numero di elementi
> > > > estratti diverso da zero? Che fare di quegli
> > > > elementi
> > > > estratti?
> > > >
> > > > È corretto assegnarli a caso, di volta in
> > volta,
> > > > a uno degli altri tre
> > > > casi?
> > > > E nel caso generale?
> > > >
> > > >
sassofono, illuminaci.
> > >
> > > Irrilevante. Stiamo parlando di estrazioni
> > > casuali, non di dividere una torta con il
> > massimo
> > > della precisione. Per quanto tu possa
> inventarti
> > > un algoritmo molto buono DIFFICILMENTE alla
> fine
> > > delle estrazioni (dopo milioni e milioni di
> > > estrazioni) avrai esattamente 1/3 1/3 1/3,
> > > tuttalpiù avrai qualcosa che ci si
> > > avvicina.
> >
> > È vero ma questo difettuccio introduce un
> 'bias'.
>
> Infinitesimale, quindi inesistente.
Non è infinitesimale, perché i calcolatori fanno i calcoli con un numero finito di cifre e
0,000...0001 è piccolo ma non nullo.-
Re: Estrazione errata da un arrayScritto daavvelentaniCubicolarioil 2010-03-30 06:54:00.0 alle 2010-03-30 06:54:00.0Trollate totali: 18184
- Scritto da:
> > > > > Il metodo esposto in
> > > > > http://insulae.net/pub/estrazione.pdf
> > > > > (versione più recente)
> > > > > è teoricamente corretto, ma in pratica può
> > > dare
> > > > > dei problemi.
> > > > >
> > > > > Ad esempio, supponiamo che le tre
> > probabilità
> > > > > siano 1/3, 1/3, 1/3. In tal caso, usando
> un
> > > > > numero finito d di cifre decimali, saranno
> > > > > rappresentate
> > > > > da
> > > > >
> > > > > 0,333333...33333
> > > > > 0,333333...33333
> > > > > 0,333333...33333
> > > > >
> > > > > la cui somma dà
> > > > >
> > > > > 0,999999...99999
> > > > >
> > > > > Che fare del caso escluso, la cui
> > probabilità
> > > è
> > > > >
> > > > > 0,000000...00001
> > > > >
> > > > > molto piccola ma corrispondente, nel caso
> di
> > > > > molte estrazioni, a un numero di elementi
> > > > > estratti diverso da zero? Che fare di
> quegli
> > > > > elementi
> > > > > estratti?
> > > > >
> > > > > È corretto assegnarli a caso, di volta in
> > > volta,
> > > > > a uno degli altri tre
> > > > > casi?
> > > > > E nel caso generale?
> > > > >
> > > > >
sassofono, illuminaci.
> > > >
> > > > Irrilevante. Stiamo parlando di estrazioni
> > > > casuali, non di dividere una torta con il
> > > massimo
> > > > della precisione. Per quanto tu possa
> > inventarti
> > > > un algoritmo molto buono DIFFICILMENTE alla
> > fine
> > > > delle estrazioni (dopo milioni e milioni di
> > > > estrazioni) avrai esattamente 1/3 1/3 1/3,
> > > > tuttalpiù avrai qualcosa che ci si
> > > > avvicina.
> > >
> > > È vero ma questo difettuccio introduce un
> > 'bias'.
> >
> > Infinitesimale, quindi inesistente.
>
> Non è infinitesimale, perché i calcolatori fanno
> i calcoli con un numero finito di cifre
> e
>
> 0,000...0001 è piccolo ma non nullo.
cambia base. poi parliamo di sqrt(2).I think happiness is love
- Vladimir Putin-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 12:50:00.0 alle 2010-03-30 12:50:00.0> cambia base. poi parliamo di sqrt(2).
Esiste una base in cui qualsiasi numero ha una rappresentazione con un numero finito di cifre decimali?
E in ogni caso dal lato pratico a me serve del codice che si possa scrivere anche in PHP
Perché ogni volta che prendo in mano un uovo ne cavo peli su peli?
-
Re: Estrazione errata da un arrayScritto daavvelentaniCubicolarioil 2010-03-30 15:31:00.0 alle 2010-03-30 15:31:00.0Trollate totali: 18184
- Scritto da:
> > cambia base. poi parliamo di sqrt(2).
>
> Esiste una base in cui qualsiasi numero ha una
> rappresentazione con un numero finito di cifre
> decimali?
ovviamente no. ma tu qui stai parlando di probabilita`, le probabilita` di solito vengono da delle frequenze, quindi di solito la scelta giusta e` rappresentare direttamente le frequenze (btw i numeri floating point sono in base 2 quindi non e` solo 1/3 a non avere rappresentazione finita, anche 1/5)
I think happiness is love
- Vladimir Putin-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 15:52:00.0 alle 2010-03-30 15:52:00.0> > > cambia base. poi parliamo di sqrt(2).
> >
> > Esiste una base in cui qualsiasi numero ha una
> > rappresentazione con un numero finito di cifre
> > decimali?
>
> ovviamente no. ma tu qui stai parlando di
> probabilita`, le probabilita` di solito vengono
> da delle frequenze, quindi di solito la scelta
> giusta e` rappresentare direttamente le frequenze
Infatti il metodo esposto nel PDF si basa su questo: in pratica le probabilità saranno date, sotto forma di numeri con un certo numero di cifre decimali, la cui somma darà uno.
Ma le probabilità secondo la teoria classica corrispondono a rapporti fra casi favorevoli e casi possibili: quindi in certi tipi di problemi le probabilità saranno frazioni, ed ecco che saltano fuori numeri come 1/3, 2/5...
> (btw i numeri floating point sono in base 2
> quindi non e` solo 1/3 a non avere
> rappresentazione finita, anche 1/5)
Sono INFINITI
Urge una soluzione, sto aspettando che il mio cervello faccia KA-RANK!-
Re: Estrazione errata da un arrayScritto daavvelentaniCubicolarioil 2010-03-30 16:13:00.0 alle 2010-03-30 16:13:00.0Trollate totali: 18184
- Scritto da:
> Infatti il metodo esposto nel PDF si basa su
> questo:
i metodo esposto nel PDF e` esposto in modo estremamente contorto, non ho voglia di capirlo.
> in pratica le probabilità saranno date,
> sotto forma di numeri con un certo numero di
> cifre decimali, la cui somma darà
> uno.
>
> Ma le probabilità secondo la teoria classica
> corrispondono a rapporti fra casi favorevoli e
> casi possibili: quindi in certi tipi di problemi
> le probabilità saranno frazioni, ed ecco che
> saltano fuori numeri come 1/3,
> 2/5...
apparte il fatto che le probabilita` nella teoria classica sono R, non usare numeri floating point se vuoi rappresentare esattamente frazioni. E` piuttosto semplice.
I think happiness is love
- Vladimir Putin-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 17:25:00.0 alle 2010-03-30 17:25:00.0> i metodo esposto nel PDF e` esposto in modo
> estremamente contorto, non ho voglia di
> capirlo.
NOOO! È sintetizzato in modo estremamente lineare, e sono solo due pagine.-
Re: Estrazione errata da un arrayScritto daavvelentaniCubicolarioil 2010-03-30 17:29:00.0 alle 2010-03-30 17:29:00.0Trollate totali: 18184
- Scritto da:
> > i metodo esposto nel PDF e` esposto in modo
> > estremamente contorto, non ho voglia di
> > capirlo.
>
> NOOO! È sintetizzato in modo estremamente
> lineare, e sono solo due
> pagine.
blah.I think happiness is love
- Vladimir Putin-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 23:00:00.0 alle 2010-03-30 23:00:00.0> > > i metodo esposto nel PDF e` esposto in modo
> > > estremamente contorto, non ho voglia di
> > > capirlo.
> >
> > NOOO! È sintetizzato in modo estremamente
> > lineare, e sono solo due
> > pagine.
>
> blah.
-
-
-
-
-
-
-
-
-
-
-
-
Re: Estrazione errata da un array
- Scritto da:
> Il metodo esposto in
> http://insulae.net/pub/estrazione.pdf
> (versione più recente)
> è teoricamente corretto, ma in pratica può dare
> dei
> problemi.
>
> Ad esempio, supponiamo che le tre probabilità
> siano 1/3, 1/3, 1/3. In tal caso, usando un
> numero finito d di cifre decimali, saranno
> rappresentate
> da
>
> 0,333333...33333
> 0,333333...33333
> 0,333333...33333
>
> la cui somma dà
>
> 0,999999...99999
>
> Che fare del caso escluso, la cui probabilità è
>
> 0,000000...00001
>
> molto piccola ma corrispondente, nel caso di
> molte estrazioni, a un numero di elementi
> estratti diverso da zero? Che fare di quegli
> elementi
> estratti?
>
> È corretto assegnarli a caso, di volta in volta,
> a uno degli altri tre
> casi?
> E nel caso generale?
>
>
sassofono, illuminaci.
Hai un belink alla prima discussione?-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 22:08:00.0 alle 2010-03-29 22:08:00.0> > Il metodo esposto in
> > http://insulae.net/pub/estrazione.pdf
> > (versione più recente)
> > è teoricamente corretto, ma in pratica può dare
> > dei
> > problemi.
> >
> > Ad esempio, supponiamo che le tre probabilità
> > siano 1/3, 1/3, 1/3. In tal caso, usando un
> > numero finito d di cifre decimali, saranno
> > rappresentate
> > da
> >
> > 0,333333...33333
> > 0,333333...33333
> > 0,333333...33333
> >
> > la cui somma dà
> >
> > 0,999999...99999
> >
> > Che fare del caso escluso, la cui probabilità è
> >
> > 0,000000...00001
> >
> > molto piccola ma corrispondente, nel caso di
> > molte estrazioni, a un numero di elementi
> > estratti diverso da zero? Che fare di quegli
> > elementi
> > estratti?
> >
> > È corretto assegnarli a caso, di volta in volta,
> > a uno degli altri tre
> > casi?
> > E nel caso generale?
> >
> >
sassofono, illuminaci.
>
> Hai un belink alla prima discussione?
http://www.forumdeitroll.it/m.aspx?m_id=2480815
http://www.forumdeitroll.it/m.aspx?m_id=2481564&m_...
ma il PDF contiene un'esposizione più sintetica.
-
Re: Estrazione errata da un array
- Scritto da: suoranciata
>
> - Scritto da:
> > Il metodo esposto in
> > http://insulae.net/pub/estrazione.pdf
> > (versione più recente)
> > è teoricamente corretto, ma in pratica può dare
> > dei
> > problemi.
> >
> > Ad esempio, supponiamo che le tre probabilità
> > siano 1/3, 1/3, 1/3. In tal caso, usando un
> > numero finito d di cifre decimali, saranno
> > rappresentate
> > da
> >
> > 0,333333...33333
> > 0,333333...33333
> > 0,333333...33333
> >
> > la cui somma dà
> >
> > 0,999999...99999
> >
> > Che fare del caso escluso, la cui probabilità è
> >
> > 0,000000...00001
> >
> > molto piccola ma corrispondente, nel caso di
> > molte estrazioni, a un numero di elementi
> > estratti diverso da zero? Che fare di quegli
> > elementi
> > estratti?
> >
> > È corretto assegnarli a caso, di volta in volta,
> > a uno degli altri tre
> > casi?
> > E nel caso generale?
> >
> >
sassofono, illuminaci.
>
> Hai un belink alla prima discussione?
Grazie all'egregio dott. ing. sarrusofono che su piagnucolio esasperante ha ripristinato i servizi di proott search, ti recupero il mio sfavillante post:
http://www.forumdeitroll.it/m.aspx?m_id=2480943
che ciclando, ahimé, due volte, permette di avere il risultato sperato anche quando la somma non è uno.
-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 22:22:00.0 alle 2010-03-29 22:22:00.0> ti recupero il mio sfavillante post:
> http://www.forumdeitroll.it/m.aspx?m_id=2480943
> che ciclando, ahimé, due volte, permette di avere
> il risultato sperato anche quando la somma non è
> uno.
>
Devo essere cieco, dov'è che cicla due volte?
//numeri da estrarre
var n = [1,2,3,4]
//Quantità di probabilità di ogni numero
var a = [0.50, 0.25, 0.25, 0];
//ogni b[i] è la somma di a[i] + b[i-1] o quasi
var b = [a[0], a[0]+a[1], a[0]+a[1]+a[2], a[0]+a[1]+a[2]+a[3] ];
//b = [0.50,0.75,1,1]
// == 1, è la somma di tutti i valori di a
var S = b[b.length-1];
var rndv = rnd()*S;
for (int i=0;i<b.length;i++)
if (b[i]>=rndv)
return n[i];
Dov'è che questo codice essenzialmente differisce da quello nel PDF, tratto da questo?-
Re: Estrazione errata da un array
- Scritto da:
> > ti recupero il mio sfavillante post:
> > http://www.forumdeitroll.it/m.aspx?m_id=2480943
> > che ciclando, ahimé, due volte, permette di
> avere
> > il risultato sperato anche quando la somma non è
> > uno.
> >
>
> Devo essere cieco, dov'è che cicla due volte?
>
> //numeri da estrarre
> var n = [1,2,3,4]
> //Quantità di probabilità di ogni numero
> var a = [0.50, 0.25, 0.25, 0];
> //ogni b[i] è la somma di a[i] + b[i-1] o quasi
> var b = [a[0], a[0]+a[1], a[0]+a[1]+a[2],
> a[0]+a[1]+a[2]+a[3]
> ];
> //b = [0.50,0.75,1,1]
>
> // == 1, è la somma di tutti i valori di a
> var S = b[b.length-1];
>
> var rndv = rnd()*S;
> for (int i=0;i<b.length;i++)
> if (b[i]>=rndv)
> return n[i];
>
> Dov'è che questo codice essenzialmente differisce
> da quello nel PDF, tratto da
> questo?
b lo inizializzo io in modo spicciolo perché sono 4 numeri, immagina un array da 1 mln di elementi...-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 23:06:00.0 alle 2010-03-29 23:06:00.0
- Scritto da: suoranciata
>
> - Scritto da:
> > > ti recupero il mio sfavillante post:
> > >
> http://www.forumdeitroll.it/m.aspx?m_id=2480943
> > > che ciclando, ahimé, due volte, permette di
> > avere
> > > il risultato sperato anche quando la somma
> non
> è
> > > uno.
> > >
> >
> > Devo essere cieco, dov'è che cicla due volte?
> >
> > //numeri da estrarre
> > var n = [1,2,3,4]
> > //Quantità di probabilità di ogni numero
> > var a = [0.50, 0.25, 0.25, 0];
> > //ogni b[i] è la somma di a[i] + b[i-1] o quasi
> > var b = [a[0], a[0]+a[1], a[0]+a[1]+a[2],
> > a[0]+a[1]+a[2]+a[3]
> > ];
> > //b = [0.50,0.75,1,1]
> >
> > // == 1, è la somma di tutti i valori di a
> > var S = b[b.length-1];
> >
> > var rndv = rnd()*S;
> > for (int i=0;i<b.length;i++)
> > if (b[i]>=rndv)
> > return n[i];
> >
> > Dov'è che questo codice essenzialmente
> differisce
> > da quello nel PDF, tratto da
> > questo?
>
> b lo inizializzo io in modo spicciolo perché sono
> 4 numeri, immagina un array da 1 mln di
> elementi...
Sì, costruisci l'array prima del ciclo invece che l'elemento corrente durante il ciclo. Che differenza comporta con le probabilità?
S cosa fa? A me pare che S = 1.
Una possibile risposta l'ho trovata:
Supponiamo p0 = 2/3, p1 = 1/3
per i calcoli pratici
p0 = 0,667
p1 = 0,333
supponendo, per amplificare, che questo particolare computer faccia i calcoli a 3 cifre decimali. L'arrotondamento, secondo le consuete regole degli arrotondamenti, dà due probabilità che sommate danno 1.
In questo caso il corretto arrotondamento risolve il problema.
Ma funziona in tutti i casi? No:
se p0 = p1 = p2 = 1/3 = 0,333 per i calcoli pratici,
l'arrotondamento lascia fuori uno 0,001. Assegnarlo a uno dei tre elementi lo privilegia in modo arbitrario.
b = [0,333, 0,666, 0,999]
che fare quando il numero estratto a caso è > 0,999?
Per non rompere la casualità dei risultati proponevo di assegnarlo a caso a uno degli altri tre intervalli, ma mi chiedevo con che criterio.
Si potrebbe sorteggiare un numero casuale in [0, 0,999[ (non più [0, 1[) e assegnare il risultato spurio all'intervallo in cui cade questo nuovo numero.
Ma funzionerà in tutti i casi in cui si hanno probabilità che, troncate a d cifre decimali, assommano a meno di uno?
Mi sento la testa piena di biglie.
-
Re: Estrazione errata da un array
- Scritto da:
>
> - Scritto da: suoranciata
> >
> > - Scritto da:
> > > > ti recupero il mio sfavillante post:
> > > >
> > http://www.forumdeitroll.it/m.aspx?m_id=2480943
> > > > che ciclando, ahimé, due volte, permette di
> > > avere
> > > > il risultato sperato anche quando la somma
> > non
> > è
> > > > uno.
> > > >
> > >
> > > Devo essere cieco, dov'è che cicla due volte?
> > >
> > > //numeri da estrarre
> > > var n = [1,2,3,4]
> > > //Quantità di probabilità di ogni numero
> > > var a = [0.50, 0.25, 0.25, 0];
> > > //ogni b[i] è la somma di a[i] + b[i-1] o
> quasi
> > > var b = [a[0], a[0]+a[1], a[0]+a[1]+a[2],
> > > a[0]+a[1]+a[2]+a[3]
> > > ];
> > > //b = [0.50,0.75,1,1]
> > >
> > > // == 1, è la somma di tutti i valori di a
> > > var S = b[b.length-1];
> > >
> > > var rndv = rnd()*S;
> > > for (int i=0;i<b.length;i++)
> > > if (b[i]>=rndv)
> > > return n[i];
> > >
> > > Dov'è che questo codice essenzialmente
> > differisce
> > > da quello nel PDF, tratto da
> > > questo?
> >
> > b lo inizializzo io in modo spicciolo perché
> sono
> > 4 numeri, immagina un array da 1 mln di
> > elementi...
>
> Sì, costruisci l'array prima del ciclo invece che
> l'elemento corrente durante il ciclo. Che
> differenza comporta con le
> probabilità?
>
> S cosa fa? A me pare che S = 1.
>
> Una possibile risposta l'ho trovata:
>
> Supponiamo p0 = 2/3, p1 = 1/3
> per i calcoli pratici
> p0 = 0,667
> p1 = 0,333
> supponendo, per amplificare, che questo
> particolare computer faccia i calcoli a 3 cifre
> decimali. L'arrotondamento, secondo le consuete
> regole degli arrotondamenti, dà due probabilità
> che sommate danno
> 1.
> In questo caso il corretto arrotondamento risolve
> il
> problema.
>
> Ma funziona in tutti i casi? No:
> se p0 = p1 = p2 = 1/3 = 0,333 per i calcoli
> pratici,
> l'arrotondamento lascia fuori uno 0,001.
> Assegnarlo a uno dei tre elementi lo privilegia
> in modo
> arbitrario.
> b = [0,333, 0,666, 0,999]
> che fare quando il numero estratto a caso è >
> 0,999?
>
> Per non rompere la casualità dei risultati
> proponevo di assegnarlo a caso a uno degli altri
> tre intervalli, ma mi chiedevo con che
> criterio.
> Si potrebbe sorteggiare un numero casuale in [0,
> 0,999[ (non più [0, 1[) e assegnare il risultato
> spurio all'intervallo in cui cade questo nuovo
> numero.
>
> Ma funzionerà in tutti i casi in cui si hanno
> probabilità che, troncate a d cifre decimali,
> assommano a meno di
> uno?
>
> Mi sento la testa piena di biglie.
http://www.google.com/search?q=recursion
-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 23:17:00.0 alle 2010-03-29 23:17:00.0>
http://www.google.com/search?q=recursion

Vorrei evitarla. Ogni calcolo ricorsivo esce dal regno delle formule matematiche e si addentra nella foresta degli algoritmi, campo in cui sono poco ferrato.
-
-
Re: Estrazione errata da un array
> S cosa fa? A me pare che S = 1.
Immagina di avere due mele grandi e due piccole tali che il raggio delle mele grandi è 8cm e di quelle piccole 5cm. Immagina che stiano in un cesto e decidiamo arbitrariamente che la probabilità di estrazione sia proporzionale al volume occupato.
S non sarà uno, ma sarà la somma dei volumi delle 4 mele.-
Re: Estrazione errata da un array
- Scritto da: suoranciata
>
> > S cosa fa? A me pare che S = 1.
>
> Immagina di avere due mele grandi e due piccole
> tali che il raggio delle mele grandi è 8cm e di
> quelle piccole 5cm. Immagina che stiano in un
> cesto e decidiamo arbitrariamente che la
> probabilità di estrazione sia proporzionale al
> volume
> occupato.
> S non sarà uno, ma sarà la somma dei volumi delle
> 4
> mele.
Per chiarezza sostituisco nel codice che avevo postato.var n = [1,2,3,4] //numero assegnato a ogni mela var a = [~523.59,~523.59,~2144.66,~2144.66]; var b = []; for (var i=0;i<a.length;i++) { b[i] = (i>0)?b[i-1]+a[i]:a[i]; } //risultato: //b = [523.59,1047.18,3191.84,5336.50] // == 1, è la somma di tutti i valori di a var S = b[b.length-1]; //risultato: //S = 5336.50
etc.etc..
-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-29 23:21:00.0 alle 2010-03-29 23:21:00.0> > S cosa fa? A me pare che S = 1.
>
> Immagina di avere due mele grandi e due piccole
> tali che il raggio delle mele grandi è 8cm e di
> quelle piccole 5cm. Immagina che stiano in un
> cesto e decidiamo arbitrariamente che la
> probabilità di estrazione sia proporzionale al
> volume
> occupato.
> S non sarà uno, ma sarà la somma dei volumi delle
> 4 mele.
Mele?
Non possiamo fare degli esempi con dei numeri astratti? 
Inizio a capire cosa vuoi dire. Nel caso
a = [0,3 0,3 0,3]
b = [0,3 0,6 0,9],
gli intervalli hanno tutti la stessa ampiezza e la probabilità di estrarre il numero in uno di essi è esattamente 1/3.
Devo rimuginarci per vedere se questa pseudo-normalizzazione funziona in tutti i casi.
-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 00:08:00.0 alle 2010-03-30 00:08:00.0> Devo rimuginarci per vedere se questa
> pseudo-normalizzazione funziona in tutti i
> casi.
Devo provare vari esempi di frazioni la cui somma dia uno, ma che ridotte a numeri decimali subiscano arrotondamenti per difetto.-
non riesco a trovare esempiScritto daNon Autenticatoil 2010-04-01 23:17:00.0 alle 2010-04-01 23:17:00.0> > Devo rimuginarci per vedere se questa
> > pseudo-normalizzazione funziona in tutti i
> > casi.
>
> Devo provare vari esempi di frazioni la cui somma
> dia uno, ma che ridotte a numeri decimali
> subiscano arrotondamenti per difetto.
CACCHIO!
Il caso 1/3 1/3 1/3 se la cava ugualmente. Vorrei capire se per caso o se è sempre così, ma non riesco a trovare altri esempi di frazioni che:
sommate diano esattamente 1
corrispondano a numeri periodici con cifre da 1 a 4, in modo che l'arrotondamento sia per difetto.
-----
Per il momento appoggio qui questo appunto, domani lo uppo.
-
-
-
-
-
-
-
-
-
Re: Estrazione errata da un arrayScritto daNon Autenticatoil 2010-03-30 08:26:00.0 alle 2010-03-30 08:26:00.0
- Scritto da:
> Il metodo esposto in
> http://insulae.net/pub/estrazione.pdf
> (versione più recente)
> è teoricamente corretto, ma in pratica può dare
> dei
> problemi.
>
> Ad esempio, supponiamo che le tre probabilità
> siano 1/3, 1/3, 1/3. In tal caso, usando un
> numero finito d di cifre decimali, saranno
> rappresentate
> da
>
> 0,333333...33333
> 0,333333...33333
> 0,333333...33333
>
> la cui somma dà
>
> 0,999999...99999
>
> Che fare del caso escluso, la cui probabilità è
>
> 0,000000...00001
>
> molto piccola ma corrispondente, nel caso di
> molte estrazioni, a un numero di elementi
> estratti diverso da zero? Che fare di quegli
> elementi
> estratti?
>
> È corretto assegnarli a caso, di volta in volta,
> a uno degli altri tre
> casi?
> E nel caso generale?
>
>
sassofono, illuminaci.
secondo me la somma deve essere 1, se non può esserlo bisogna decidere cosa cazzo fare. assegnare un infinitesimo in più a un intervallo a caso secondo me è una soluzione.
-