Vorherige Seite Nächste Seite Inhalt

7. Die Entropie der Zufallsgeneratoren

Mit Hilfe der Entropieberechnung ist es möglich eine Aussage darüber zu treffen, wie stark die Pseudozufallszahlen der einzelnen Generatoren von der Gleichverteilung abweichen.

Die maximale zu erreichende Entropie bei Gleichwahrscheinlichkeit aller Quellenzeichen ergibt sich zu:

Hmax=ld(n)=ld(256)=8 Bit/Zeichen

Zur Berechnung der Entropie der einzelnen Generatoren, wird ein C-Programm zu Hilfe genommen. In Worten beschrieben berechnet sich die Entropie folgendermaßen: Zu jeder auftretenden Zufallszahl wird die Auftrittswahrscheinlichkeit berechnet. Die Auftrittswahrscheinlichkeit wird dann mit dem Logarithmus zur Basis 2 der Auftrittswahrscheinlichkeit multipliziert. All diese Produktterme werden aufsummiert. Die erhaltene Summe wird zum Schluß noch negiert.

// Name: Entro.cpp
// Aufgabe: Berechnet die Entropie einer Reihe von Zufallszahlen, die mittels
// eines Pseudozufallszahlengenerators erzeugt wurden. Die Zufallszahlen
// müssen mit der entsprechenden relativen Auftrittshäufigkeit in einer Datei
// namens test.txt zur Verfügung gestellt werden.
// Ersteller: Cornelia Weiß

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>

void main(void)
{
  float war; /* Variable für relative Wahrscheinlichkeit */
  float entro = 0; /* Variable zur Entropieberechnung */
  FILE *read; 
  int i = 0;
  int wert;
  read = fopen("test.txt","r");
  while(i <= 255)
  {
    fscanf(read,"%i %f",& wert,& war);
    entro = entro+war*log10(war)/log10(2);
    i++;
  }
  entro = -entro;
  cout<<"Die Entropie der Quelle ist: "<<entro<<endl;
  getch();
  fclose(read);
}

Das Programm liest die Daten aus einer Datei namens test.txt ein. Die Datei enthält den Zufallswert und die dazugehörige Auftrittswahrscheinlichkeit. Diese Datei wird wiederum von den einzelnen Zufallsgeneratoren erzeugt. Im folgenden soll eine Auswertung stattfinden, die Aussage darüber trifft, wie stark die erzeugten Pseudozufallszahlen der einzelnen Generatoren von der Gleichverteilung (also Hmax) abweichen. Dazu erzeugt jeder Generator einmal einen Datensatz mit 1000, 10000 und 1Million Zufallswerten. (Die erzeugten Pseudozufallszahlen liegen wieder zwischen 0 und 255). Die Pseudozufallszahlen und deren Häufigkeiten werden dann diesem Programm zugeführt, die Ergebnisse sind im folgenden zu betrachten:

Gegenüberstellung der Entropien:

LFSR mitSchieberegister mitLinearer
RückkopplungsnetzRückkopplung durch ÜbertragKongruenzgenerator
1000 Zufallszahlen7,7884217,7738727,827836
10000 Zufallszahlen7,9822147,9824547,989316
1 Mio. Zufallszahlen7,9998317,9998097,999978

Abweichung zur Gleichverteilung: (auf 4 Nachkommastellen genau)

LFSR mitSchieberegister mitLinearer
RückkopplungsnetzRückkopplung durch ÜbertragKongruenzgenerator
1000 Zufallszahlen0,21160,22610,1722
10000 Zufallszahlen0,01780,01750,0107
1 Mio. Zufallszahlen0,00020,00020,0000

Die beiden linearen Schieberegister mit Rückkopplung verhalten sich, wie auch schon die grafische Auswertung gezeigt hat, sehr ähnlich. Bei 1000 Pseudozufallswerten liefert das LRSR eine geringfügig bessere Annäherung an die Gleichverteilung als das Schieberegister mit Rückkopplung durch Carry. Bei 10000 Werten dreht sich dieser Sachverhalt, und das Schieberegister mit Rückkopplung durch Carry hat eine bessere Gleichverteilung. Bei einer Million Pseudozufallswerten haben beide eine annähernde Gleichverteilung, wobei das LRSR noch etwas näher an Hmax liegt.

Anders verhält sich im Vergleich dazu der Lineare Kongruenzgenerator, er weißt immer eine bessere Gleichverteilung auf als die Schieberegister mit Rückkopplung, und ist bei 1 Million erzeugten Pseudozufallswerten der Gleichverteilung am nächsten.


Vorherige Seite Nächste Seite Inhalt