2015-04-20 9 views
6

Sto provando a progettare un generatore di numeri casuali che genera numeri casuali da 0-11. Ma ho bisogno di progettarlo considerando che ho già un generatore di numeri casuali che genera numeri casuali da 0-5.Tutti i numeri da 0-11 dovrebbero essere generati con uguale probabilità.Progettazione di un generatore di numeri casuali

sono andato attraverso questo link

Nel link l'equazione utilizzata è 5*foo() + foo() -5 cui foo() genera numero 1-5 (non 0-5)

1. For each value of first foo(), there can be 5 possible combinations for values of second foo(). So, there are total 25 combinations possible. 
2. The range of values returned by the above equation is 1 to 25, each integer occurring exactly once. 
3. If the value of the equation comes out to be less than 22, return modulo division by 7 followed by adding 1. Else, again call the method recursively. The probability of returning each integer thus becomes 1/7. 

Ora posso cambiare la funzione che il modulo a essa per 12 e recurse la funzione se il numero supera 24, nella funzione che è definita nel link sopra? Se no allora non sto capendo cosa è sbagliato.

In alternativa mi sono imbattuto in questo

consente di chiamare la funzione di generatore di numeri casuali f(6) che genera il numero 0-5.

(f(6)+f(6)+f(6))%12; 

Se non che cosa soluzione alternativa può dedurre i? Ho bisogno di aiuto nel fare questo task.Maybe mi manca something.The fermo qui è ogni numero compreso tra 0-11 dovrebbe avere uguale probabilità di generation.Other di f(6) Non posso usare altre funzioni. Solo manipolazioni matematiche.

+0

Benvenuti in SO: SE. Per favore leggi [chiedi]. Il tuo post dovrebbe essere migliorato in due direzioni: includi le sezioni pertinenti relative alle risorse collegate nel tuo post (nel caso in cui la risorsa venga spostata o cancellata) e fornisca il codice del tuo tentativo corrente. In bocca al lupo! – mins

+0

è buono? Non ho bisogno di un codice, ho fornito quello che ho tentato ... ho fatto del mio meglio, ma penso ancora che mi manchi qualcosa. – Nilesh

+0

Quello che stai facendo sembra ragionevole, ma lo lascerò a qualcuno che lo possa _prove_. Sono arrugginito e le lezioni che ho preso a riguardo sono state un po 'di tempo fa. –

risposta

2

Ci sono molti modi per farlo, ma in questo caso vorrei andare per:

f(6) + 6*f(2) 

dove

f(2) = f(6)%2 

La probabilità è uniforme perché si ha una probabilità uniforme per ottenere un numero da 0 a 5 e una probabilità uniforme di spostarlo nell'intervallo 6-11.

1

Chiamiamo il generatore 0.6 g6(). Se calcoli (6 * g6()) + g6(), otterrai un'uniforme pari a 0,35. Ora dividi per 3 e avrai un'uniforme pari a 0, 11.

Problemi correlati