Data Science stellt sich in den Dienst der Mathematik

Seite 3: Über die Rotation von Binärzahlen

Inhaltsverzeichnis

Data Science kann schneller und effizienter Ergebnisse für die Mathematik und die Kryptografie liefern als man es mit Bleistift und Papier schaffen würde. Im Folgenden dient als Beispiel die Rotation von Binärzahlen.

Auf einer Binärzahl B der Länge l mit dem Hamming-Gewicht U wird eine Linksrotation ausgeführt. Dadurch lässt sich eine minimale Binärzahl Bmin und maximale Binärzahl Bmax ermitteln. Als Beispiel dient die Binärzahl B = 10110101 = 181. Das Minimum davon ist Bmin = 01011011 = 91 und das Maximum Bmax = 11011010 = 218.

Das Maximum Bmax erreicht man durch drei Linksrotationen des Minimums Bmin. Die Zahl 3 steht hierbei für die Linksrotations-Distanz (Formelzeichen r) zwischen dem Minimum und Maximum. Grundsätzlich gilt also: Bmin = (Bmin*2r)mod(2l - 1).

Für dieses Beispiel bedeutet das 218 = (91 * 23)mod(255). Eine wichtige Eigenschaft ist die Teilbarkeit der Formel:

Sobald die Teilbarkeit gegeben ist, kann man periodische Sequenzen generieren. In diesem Fall ist es korrekt. Denn die Länge 8 der Binärzahl B teilt das Hamminggewicht 5 * Rotationsdistanz 3 + 1.

Diese Teilbarkeit stimmt auch für andere Fälle. Weitere Zusammenhänge kann man mithilfe von Data Science identifizieren, untersuchen und visualisieren. So dient als Ausgangspunkt für das vorliegende Problem folgende Funktion, die eine Binärzahl B mit einem Hamming-Gewicht U als Input bekommt.

In der nachstehenden Ungleichung sind die x-Werte die mit 1 belegten Positionen der Binärzahl B:

In diesem Beispiel bedeutet das also z(Bmax)= z(11011010) = 319. Für die fünf mit 1 belegten Positionen gilt (x1, x2, x3, x4, x5) = (0,1,2,3,4,6). Korrekt heißt das also 319 = 34 * 20 + 33 * 21 + 32 * 23 + 31 * 24 +30 * 26.

Auf gleiche Weise erhält man z(Bmin)=842. Beide Zahlen, die 319 und die 842, gehören der periodischen Sequenz 3n + 13 an, die durch folgende Funktion gegeben ist:

Der Parameter c ergibt sich aus der Differenz c=2l-3U und beträgt in diesem Beispiel 13. Die periodische Sequenz lautet 319, 458, 734, 367, 557, 824, 421, 638. So scheint die zu untersuchende Teilbarkeit immer für solche periodischen Sequenzen gegeben zu sein. Solche Sequenzen lassen sich in Python schnell als Pandas Dataframe erzeugen (siehe Abbildung 1).

DataFrame mit generierten Zyklen. Das Beispiel aus dem Text ist hervorgehoben. (Abb.1).

Den Differenzquotienten berechnet man mit DataFrame.diff(). Die Funktion diff berechnet die Differenz eines DataFrame-Elements im Vergleich zum Element in der vorherigen Zeile des DataFrames. Im vorliegenden Fall nutzt man diese Funktion, um die Differenzen aufeinanderfolgender Bmin-Werte (ΔBmin) und aufeinanderfolgender Bmax-Werte (ΔBmax) zu ermitteln. Ordnet man nun dem ΔBmin das entsprechende ΔBmax einer jeden Zeile des DataFrames zu, entstehen zwei Diagramme (siehe Abbildung 2). Auf der linken Seite sind die Daten sortiert nach der Rotationsdistanz r und auf der rechten Seite nach der Differenz Bmax - Bmin.

Die Verteilung rotierender Binärzahlen aus zwei unterschiedlichen Perspektiven (Abb 2).