Informieren Sie sich im Internet über Maßeinheiten zur Angabe von Datenmengen und Datenraten wie MB oder Gbps.
Einige Firmen bieten Dienste an, die es erlauben, Daten online abzuspeichern und von überall mit einem Internetzugriff darauf zuzugreifen. Angenommen, eine solche Firma böte auch an, eine 1 TB Festplatte innerhalb von 24h mit einem Kurierdienst zuzustellen. Welche Datenrate müsste ein Internetzugriff mindestens bereitstellen, um die gleiche Datenmenge in der selben Zeit herunter zu laden?
Angenommen eine solche Firma verwendet zum Speichern der Nutzerdaten Container mit jeweils 2000 Servern mit jeweils 500 GB Speicherkapazität. Welcher Datenrate entspricht der 10-stündige Transport eines solchen Containers mit einem Lastwagen von einem Datenzentrum zu einem anderen?
Schreiben Sie eine python Funktion add_checksum(s)
, die einer gegebenen
Zeichenkette, die nur Nullen und Einsen enthält, eine Null oder eine
Eins anhängt, je nachdem, ob die urpsrüngliche Anzahl der Einsen
gerade oder ungerade ist. Der Rückgabewert der Funktion soll also eine
entsprechend um ein Zeichen längere Zeichenkette sein.
Implementieren Sie außerdem eine Funktion is_valid(s)
, die eine
Zeichenkette aus Nullen und Einsen inklusive angehängter Prüfsumme auf
Übertragungsfehler untersucht. Wenn ein Übertragungsfehler
festegestellt wurde, soll die Funktion False
zurück liefern,
ansonsten True
.
Geben Sie verschiedene Beispielaufrufe an und zwar solche ohne Übertragungsfehler, solche mit erkanntem Übertragungsfehler und solche mit unerkanntem Übertragungsfehler.
Mit \(n\) Bits können wir \(2^n\) verschiedene Werte darstellen; eine Prüfsumme der Länge \(n\) erlaubt es also (im Besten Fall), \(2^n - 1\) falsch übertragene Bits zu erkennen, wenn wir der übertragenen Nachricht die Binärdarstellung der Anzahl der Einsen modulo \(2^n\) anhängen.
Erweitern Sie die Funktionen aus der vorigen Aufgabe um einen
Parameter n
, der die Länge der zu berechnenden Prüfsummen
angibt. Für n = 2
sollen also zwei Bits wie beschrieben
angehängt werden.
Geben Sie wieder Beispielaufrufe an, die:kumentieren, welche Übertragungsfehler erkannt werden und welche nicht.
Definieren Sie eine Funktion add_block_checksums(s,b,n)
, die in der
Zeichenkette s
(aus Nullen und Einsen) hinter jedem Block der Länge
b
eine Prüfsumme der Länge n
einfügt. Falls die Länge von s
kein
Vielfaches von b
ist, sollen im letzten Block Nullen vor der
Prüfsumme angehängt werden. Definieren Sie außerdem eine Funktion
has_valid_blocks(s,b,n)
, die eine so verlängerte Zeichenkette auf
Übertragungsfehler überprüft.
Testen Sie Ihre Implementierung für b = 6
und n = 2
und
dokumentieren Sie welche Übertragungsfehler erkannt werden und welche
nicht.
In einer vorigen Aufgabe haben Sie eine einfache Prüfsumme zur
Fehlererkennung in python implementiert. Ein einfaches Verfahren, Fehler
nicht nur zu erkennen sondern auch zu korrigieren, ist es jedes Bit
einer Nachricht dreimal hintereinander zu verschicken. Aus der
Nachricht 1011
wird also die Nachricht 111000111111
. Falls
einzelne Bits in dieser Nachricht gekippt werden, kann die
ursprüngliche Nachricht trotzdem dekodiert werden, indem ein
Dreierblock von Bits immer dann in eine 1
zurück übersetzt wird,
wenn der Block mindestens zwei Einsen enthält.
Definieren Sie in python Funktionen encode
und decode
, die dieses
Verfahren implementieren. Testen Sie es für einige Eingaben und geben
Sie auch ein Beispiel an, bei dem die Rück-Übersetzung fehl schlägt.