Perché abbiamo bisogno di un seme in generatori di numeri casuali?

5

Voglio sapere come il generatore di numeri casuali (RNG) funziona in qualsiasi PL (linguaggio di programmazione). So che i metodi casuali hanno brevi periodi. iniziano a ripetere i valori dopo un determinato numero di volte.

Seeds vengono utilizzati per inizializzare i numeri casuali generati dall'RNG. Se qualche PL usa i propri semi, come specificare il mio seme farà alcuna differenza. Ho sentito persone dire che specificare l'aiuto per le sementi in un controllo migliore sulla sequenza generata. Non lo capisco nel suo insieme. Qualcuno potrebbe aiutare per favore. con lo stesso,

    
posta Jasmeet 30.09.2015 - 05:11
fonte

2 risposte

7

I want to know how Random number generator(RNG) works in any PL(Programming language).

Le lingue tendono ad avere le proprie implementazioni di generatori di numeri pseudo-casuali, quindi non puoi sapere come un generatore di numeri pseudo-casuali funziona in qualsiasi linguaggio di programmazione. Inoltre, non c'è molto valore che potremmo aggiungere qui oltre a indirizzarti all'articolo pertinente su Wikipedia.

L'approccio più semplice, tuttavia, che produce risultati abbastanza buoni ed è molto veloce, è quello di tenere traccia dell'ultimo intero emesso, e ogni volta che viene richiesto un intero pseudo-casuale, incrementarlo di uno e quindi moltiplicarlo per un'enorme costante prima di restituirla. Questa moltiplicazione di solito provoca un overflow sostanziale, che viene ignorato. L'effetto è che il modello di bit risultante è casuale per tutti gli scopi pratici. L'incremento di uno è necessario per garantire che se il numero raggiunge mai lo zero, le successive moltiplicazioni non continueranno a produrre zero.

I know the random methods has short periods. i.e they start repeating the values after specific number of time.

Non so come hai avuto l'impressione che i numeri pseudo-casuali abbiano periodi brevi, perché semplicemente non è vero. Generatori di numeri pseudo casuali tendono ad avere periodi enormi.

Seeds are used to initialise the random numbers generated by the RNG. IF any PL uses its own SEEDS, how specifying my seed will make any difference.

Un generatore di numeri pseudo casuali userà il proprio seme solo se non si specifica il proprio seme. Se specifichi il tuo seed, il generatore di numeri pseudo-casuali userà il tuo seed.

I heard people saying that specifying the seed help in better control over the sequence Generated. I don't understand it as a whole. Could any one please help. with the same,

Provalo a casa:

Scrivi un programma che disegna un cielo stellato e poi lo cancella, usando solo GetPixel() e SetPixel() .

Quindi, quello che devi fare è scrivere un ciclo che generi, per esempio, 1000 coppie di coordinate pseudo-casuali e inverta ogni pixel a quelle coordinate. Se il pixel era nero, lo rende bianco. Se era bianco, lo rende nero. Se lo schermo era inizialmente tutto nero, dovrebbero apparire circa 1000 stelle bianche.

Ora, per cancellare le stelle, è possibile cancellare l'intero schermo, ma c'è un modo più interessante per farlo.

Inizializza il tuo generatore di numeri pseudo-casuali con lo stesso seme identico, quindi riapplica il ciclo precedente. Viene generata la stessa identica sequenza di numeri pseudo-casuali, quindi verrà visitato lo stesso set di coordinate, quindi ogni di questi pixel verrà nuovamente invertito, restituendo nuovamente un cielo nero.

    
risposta data 30.09.2015 - 11:16
fonte
8

Diciamo che hai scritto un algoritmo di crittografia che utilizza una sequenza pseudo-casuale di numeri per generare il contenuto crittografato. La tua funzione di crittografia funziona in due modi; puoi crittografare utilizzando una sequenza numerica casuale e quindi decifrare utilizzando la stessa sequenza di numeri casuali.

Non sarebbe bello se in seguito potessi specificare lo stesso seme in modo da poter ottenere lo stesso insieme di numeri da decifrare? Ecco perché abbiamo semi; per produrre la stessa sequenza di numeri "casuali".

Ovviamente, se hai solo bisogno di una sequenza di numeri casuali, puoi usare una semente semi-casuale come le cifre in millisecondi del tempo corrente.

    
risposta data 30.09.2015 - 05:34
fonte

Leggi altre domande sui tag