Zufallszahlen-Generator mit Schieberegister implementieren
-
Hallo,
ich hab ein Problem damit mir das Prinzip vorzustellen, wie eine Zufallszahl mit einem Schieberegister und einer XOR-Verknüpfung generiert wird.
Folgende Klassen sind gegeben:class: Random
Random()
Random(long seed)
int next(int bits)class: XOR
bool xor(bool i1, bool i2)class: Register
void shiftLeft(int lsb)
int getBitAt(int position)
getRegisterContent()Wie müsste der Algorithmus in der next()-Methode (Klasse Random) ungefähr aussehen, um die Zahl zu generieren und wie arbeiten XOR und Register dabei zusammen?
-
schau mal hier: http://en.wikipedia.org/wiki/Linear_feedback_shift_register
-
Hm ja danke schonmal.
Wenn ichs richtig verstanden habe, dann gibt der User eine Zahl an den Generator, dieser wird in Bits dargestellt, welche der Grundstein für das Schieberegister und die Random-Zahl ist.
Dort werden an zwei Positionen je ein Bit gewählt, an die xor-Methode gereicht und es wird dementsprechen eine 0 oder 1 zurück gegeben und an die erste Stelle des Registers geschoben. Die letzte Stelle fliegt dafür raus. Dies wird n mal durchgeführt und die Zahl ist mehr oder weniger zufällig.Wie greift man am Besten auf den Integer zu, um die einzelnen Bits zu manipulieren, zu schieben usw?
-
In Java gaebs die Klasse "Bitset". In C++ gaebs ebenfalls die std::bitset, und sonst halt mit lowlevel Shift- und Bit-operatoren