Mathematik II für Studierende der Informatik Kapitel. Kodierungstheorie



Ähnliche Dokumente
Theoretische Grundlagen der Informatik WS 09/10

Einführung in die Kodierungstheorie

Lineare Codes. Dipl.-Inform. Wolfgang Globke. Institut für Algebra und Geometrie Arbeitsgruppe Differentialgeometrie Universität Karlsruhe 1 / 19

4. Woche Decodierung; Maximale, Perfekte und Optimale Codes. 4. Woche: Decodierung; Maximale, Perfekte und Optimale Codes 69/ 140

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

Grundlagen der Technischen Informatik. 2. Übung

Fachschaft Mathematik und Informatik (FIM) LA I VORKURS. Herbstsemester gehalten von Harald Baum

0, v 6 = , v 4 = span(v 1, v 5, v 6 ) = span(v 1, v 2, v 3, v 4, v 5, v 6 ) 4. span(v 1, v 2, v 4 ) = span(v 2, v 3, v 5, v 6 )

3 Der Hamming-Code. Hamming-Codes

Primzahlen und RSA-Verschlüsselung

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Musterlösungen zur Linearen Algebra II Blatt 5

15 Optimales Kodieren

Einführung in die Algebra

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Der Zwei-Quadrate-Satz von Fermat

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Grundlagen der Theoretischen Informatik, SoSe 2008

4. Übungsblatt Matrikelnr.:

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Professionelle Seminare im Bereich MS-Office

Grundbegriffe der Informatik

Zeichen bei Zahlen entschlüsseln

3.3 Eigenwerte und Eigenräume, Diagonalisierung

1 Mathematische Grundlagen

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Lineare Gleichungssysteme

Übungen zum Ferienkurs Lineare Algebra WS 14/15

Kapitel 15. Lösung linearer Gleichungssysteme

Informationsblatt Induktionsbeweis

Erinnerung/Zusammenfassung zu Abbildungsmatrizen

Grundlagen Digitaler Systeme (GDS)

7 Rechnen mit Polynomen

11. Das RSA Verfahren und andere Verfahren

Programmiersprachen und Übersetzer

(für Grund- und Leistungskurse Mathematik) 26W55DLQHU0DUWLQ(KUHQE UJ*\PQDVLXP)RUFKKHLP

Zahlensysteme: Oktal- und Hexadezimalsystem

Lineare Gleichungssysteme

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Definition 27 Affiner Raum über Vektorraum V

9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83

V 2 B, C, D Drinks. Möglicher Lösungsweg a) Gleichungssystem: 300x y = x + 500y = 597,5 2x3 Matrix: Energydrink 0,7 Mineralwasser 0,775,

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Lineare Algebra und Lösung linearer zeitinvarianter Differentialgleichungssysteme

Codierungstheorie Rudolf Scharlau, SoSe

Einfache kryptographische Verfahren

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Lineare Gleichungssysteme

Theoretische Informatik SS 04 Übung 1

Sowohl die Malstreifen als auch die Neperschen Streifen können auch in anderen Stellenwertsystemen verwendet werden.

Binärdarstellung von Fliesskommazahlen

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

WS 2008/09. Diskrete Strukturen

klar. Um die zweite Bedingung zu zeigen, betrachte u i U i mit u i = 0. Das mittlere -Zeichen liefert s

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Kapiteltests zum Leitprogramm Binäre Suchbäume

Grundlagen der Informatik

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

3.1. Die komplexen Zahlen

Sollsaldo und Habensaldo

Bestimmung einer ersten

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Rekursionen. Georg Anegg 25. November Methoden und Techniken an Beispielen erklärt

Leichte-Sprache-Bilder

Codierungsverfahren SS Reed-Solomon-Codes zur Mehrblock-Bündelfehler-Korrektur

Anhand des bereits hergeleiteten Models erstellen wir nun mit der Formel

Was meinen die Leute eigentlich mit: Grexit?

2. Negative Dualzahlen darstellen

Daten verarbeiten. Binärzahlen

Mathematik für Informatiker II. Beispiellösungen zur Probeklausur. Aufgabe 1. Aufgabe 2 (5+5 Punkte) Christoph Eisinger Sommersemester 2011

Division Für diesen Abschnitt setzen wir voraus, dass der Koeffizientenring ein Körper ist. Betrachte das Schema

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

3. LINEARE GLEICHUNGSSYSTEME

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

Absolute Stetigkeit von Maßen

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

x 2 2x + = 3 + Es gibt genau ein x R mit ax + b = 0, denn es gilt

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

3. Zusammenhang. 22 Andreas Gathmann

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04

Informatik A ( Frank Hoffmann)

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

2 Die Darstellung linearer Abbildungen durch Matrizen

H. Gruber, R. Neumann. Erfolg im Mathe-Abi. Übungsbuch für die optimale Vorbereitung in Analysis, Geometrie und Stochastik mit verständlichen Lösungen

AUF LETZTER SEITE DIESER ANLEITUNG!!!

5 Eigenwerte und die Jordansche Normalform

Eigenwerte und Eigenvektoren von Matrizen

Lösungen zum 3. Aufgabenblatt

Algorithmische Kryptographie

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

Geld wechseln kann als Visualisierung des Zehnerübergangs dienen. Die Zwischengrössen (CHF 2.-, 5.-, 20.-, 50.-) weglassen.

5. Bildauflösung ICT-Komp 10

11.3 Komplexe Potenzreihen und weitere komplexe Funktionen

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Vibono Coaching Brief -No. 39

Wie Sie beliebig viele PINs, die nur aus Ziffern bestehen dürfen, mit einem beliebigen Kennwort verschlüsseln: Schritt 1

Welche Lagen können zwei Geraden (im Raum) zueinander haben? Welche Lagen kann eine Gerade bezüglich einer Ebene im Raum einnehmen?

Transkript:

Mathematik II für Studierende der Informatik Kapitel Kodierungstheorie Markus Junker Sommersemester 2011 (korrigierte Version vom Sommersemester 2012) Einführung, Beispiele, Definitionen Ausgangspunkt ist folgendes Problem : Information wird in einer gewissen Weise kodiert übertragen (z.b. Morse-Zeichen, ASCII-Code, etc.); dabei passieren Übertragungsfehler oder es gehen Teile der Information verloren. Wie kann man die Kodierung so wählen, dass Übertragungsfehler erkannt und teilweise korrigiert werden können und die Informationsübermittlung dennoch möglichst effizient geschieht? Es geht also darum, in die Kodierung eine möglichst effiziente Informationsredundanz einzubauen. Eine nicht besonders effiziente Weise besteht zum Beispiel darin, die Information mehrfach zu wiederholen. Stimmen die empfangenen Informationen nicht überein, so weiß man, dass Übertragungsfehler eingetreten sein; bei mehr als zweifacher Wiederholung kann man u.u. die richtige Version erkennen, in dem man die am häufigsten empfangene Variante als die richtige ansieht. Konkret betrachtet man folgende Situation: Information ist kodiert als ein Wort endlicher Länge über einem endlichen Alphabet A. In der Regel ist die Wortlänge fest und wird mit n bezeichnet; q sei die Anzahl der Elemente von A. Man betrachete also n-tupel (a 1,..., a n ) über A, d.h. Elemente von A n. Die Menge dieser n-tupel wird auch der Hamming-Raum H(n, A) genannt bzw. H(n, q), wenn es nur auf die Anzahl der Elemente von A ankommt. Oft nimmt man als Alphabet eine endliche Gruppe oder einen endlichen Körper, etwa F q, da die algebraische Struktur beim Ver- und Entschlüsseln helfen kann und geschickte Kodierungen ermöglicht. Besonders häufig ist q = 2: Das Alphabet F 2 besteht aus den beiden Elementen 0 und 1. Der Hamming-Raum H(8, F 2 ) ist zum Beispiel die Menge der möglichen Bytes. Den Hamming-Raum H(4, F 2 ) kann man mit den hexadezimalen Ziffern identifizieren. Beispiele für Codes mit Redundanzen (a) Im ursprünglichen ASCII-Code wurden Zeichen durch ein Byte (a 1,..., a 8 ), also ein 8-Tupel über F 2, kodiert. Dabei bildeten die ersten sieben Ziffern a 1,..., a 7 die eigentliche Information: als Binärzahl gelesen geben sie die Stelle des kodierten Zeichens (Buchstabe, Ziffer, Satz- oder Steuerungszeichen) in der Liste der ASCII-Zeichen an. Die letzte Ziffer a 8 war eine Kontrollziffer, welche den sogenannten parity check durchführte: a 8 war so gewählt, dass a 1 + + a 8 = 0 in F 2 gilt. Der Code erkennt, wenn an einer Stelle ein Übertragungsfehler passiert, da dann die Prüfrechnung nicht mehr stimmt. Geht bei der Übertragung eine Stelle verloren, kann man sie errechnen. (b) Der alte ISBN-Code bestand aus einer neunstelligen Dezimalzahl, die man als 9-Tupel (b 1,..., b 9 ) über F 11 aufgefasst und um eine Prüfziffer b 10 F 11 so ergänzt hat, dass 10 i=0 i b i = 0 in F 11 gilt. (Das Element 10 in F 11 wurde übrigens X geschrieben.) Dieser Code erkennt eine falsche Ziffer und auch Vertauschungen von zwei Ziffern. ( Erkennen heißt dabei, dass die Prüfrechnung nicht mehr stimmt.) (c) Der aktuelle ISBN-Code ist ein 13-Tupel über Z/10Z, wobei wieder die letzte Ziffer eine Prüfziffer ist, die so gewählt wird, dass b 1 + 3b 2 + b 3 + 3b 4 + + b 13 = 0 in Z/10Z gilt. Dieser Code erkennt wieder eine falsche Ziffer, aber nur noch gewisse Vertauschungen.

Fehler und die Hamming-Metrik Anschaulich gesprochen ist ein Code gut, wenn er besonders viele Fehler erkennt oder sogar deren Korrektur zulässt. Um dies zu präzisieren, muss man festlegen, was Fehler sind und wie man ihre Anzahl misst. Im üblichen Setting legt man dazu fest, dass es nur um die Anzahl der Stellen geht, die nicht übereinstimmen. Eine Vertauschung von zwei (verschiedenen) Ziffern zählt also als zwei Fehler, da anschließend zwei Stellen nicht mehr stimmen. Insbesondere werden alle Stellen als gleichwertig gezählt (während man z.b. bei Dezimalzahlen Fehler in den höheren Stellen als gewichtiger ansehen würde als in den niederen Stellen) und alle Elemente des Alphabets werden ebenfalls untereinander als gleichwertig gezählt (d.h. es ist gleichermaßen ein einziger Fehler, ob z.b. 2 statt 1 empfangen wird oder 9 statt 1). Mathematischer wird dies in der Hamming-Metrik präzisiert: Definition 1 Für v = (v 1,..., v n ) und w = (w 1,..., w n ) in H(n, A) definiert man den Hamming-Abstand (oder Hamming-Metrik) als d(v, w) := {i vi w i. Dies ist tatsächlich eine Metrik auf H(n, A), d.h. es gilt: Positivität: d(v, w) 0 und d(v, w) = 0 v = w Symmetrie: d(v, w) = d(w, v) Dreiecksungleichung: d(u, v) d(u, v) + d(v, w). (Beweis: Während die ersten beiden Eigenschaften unmittelbar aus der Definition folgen, sieht man die Dreiecksungleichung aus der Transitivität der Gleichheit: Wenn u i w i, dann gilt u i v i oder v i w i. Die folgenden Eigenschaften sind ähnlich leicht einzusehen.) Falls (A, +) eine (kommutative) Gruppe ist, dann gilt zusätzlich: Translationsinvarianz: d(v, w) = d(v + u, w + u), insbesondere d(v, w) = d(v w, 0) und d(v, w) = d( v, w) Falls A ein K-Vektorraum ist, dann gilt außerdem: Invarianz unter Skalarmultiplikation: d(v, w) = d(kv, kw) für k K \ {0 (Während auch die übliche euklidische Metrik d 2 (v, w) = (vi w i ) 2 im R n translationsinvariant ist, gilt dort d 2 (rv, rw) = rd 2 (v, w). Die Invarianz der Hamming-Metrik unter Skalarmultiplikation ist also eine ungeometrische Eigenschaft.) Bemerkung: Falls (A, +) eine kommutative Gruppe ist und p eine Primzahl, dann ist A genau dann ein F p -Vektorraum, wenn p a = a + {{ + a = 0 für alle a A gilt. Die Skalarmultiplikation ist dann durch m a = p mal a + {{ + a gegeben und es gilt a = (p 1) a. m mal Insbesondere folgt daraus: Wenn C F n p unter Addition abgeschlossen ist, dann ist C bereits ein Untervektorraum! Definition 2 (a) Ein Code ist eine Teilmenge von H(n, A) bzw. H(n, q). Man spricht von einem Code der Länge n über A bzw. einem q-ären Code der Länge n. Der Minimalabstand des Codes ist min { d(v, w) v, w C, v w. (b) Ein linearer Code ist ein Untervektorraum von F n q. Das Gewicht von v C ist d(v, 0) und das Minimalgewicht des Codes ist min { d(v, 0) v C, v 0. 2

Wegen d(v, w) = d(v w, 0) ist das Minimalgewicht eines linearen Codes gleich seinem Minimalabstand. Lineare Codes werden meist durch zwei oder drei Parameter beschrieben: als [n, k]-codes oder [n, k, d]-codes. Dann ist stets n die Länge der Wörter, k = dim C und d das Minimalgewicht. (Die Anzahl q der Elemente des Alphabets F q wird dabei als im Kontext festgelegt vorausgesetzt.) 1 (c) Ein Code C erkennt e Fehler, falls d(v, w) > e für alle v, w C. (d) Ein Code C korrigiert e Fehler, falls es zu jedem v H(n, A) höchstens ein c C gibt mit d(v, c) e. Beispiele: Der alte ISBN-Code ist ein 11-ärer Code der Länge 10, der einen Fehler erkennt und keinen korrigiert. Der ursprüngliche ASCII-Code ist ein binärer linearer [8, 7, 2]-Code, der also einen Fehler erkennt und keinen korrigiert. Der Wiederholungscode {(x, x, x) x F q H(3, q) ist ein q-ärer linearer [3, 1, 3]-Code, der zwei Fehler erkennt und einen korrigiert. Satz 1 Wenn ein Code d 1 Fehler erkennt (d.h. wenn der Minimalabstand mindestens d ist), dann korrigiert er d 1 2 Fehler. Wenn ein Code e Fehler korrigiert, ist der Minimalabstand mindestens 2e + 1. Der Ball vom Radius e um v ist 2 B e (v) := { w H(n, A) d(v, w) e. Die Anzahl seiner Elemente ist Be (v) = e i=0 (q 1) i i (i durchläuft die möglichen Abstände; der Binomialkoeffizient gibt die Anzahl der Möglichkeiten, an welchen Stellen die Abweichungen auftreten; q 1 ist für jede Stelle die Anzahl der alternativen Elemente des Alphabets). Für q = 2 gilt insbesondere Es gilt nun offensichtlich: Be (c) ( ) n = + 0 + + 1. e C erkennt genau dann e Fehler, wenn c / B e (c) für c, c C, c c. C korrigiert genau dann e Fehler, wenn die Bälle B e (c) für c C paarweise disjunkt sind. Das Problem, einen guten Code zu finden, hängt damit mit dem Kugelpackungsproblem zusammen: Wie kann man in einem Raum möglichst viele paarweise disjunkte Bälle (von festem Radius) unterbringen? 1 Manche Autoren bevorzugen, statt der Dimension eines Codes C an zweiter Stelle die Anzahl der Elemente von C anzugeben. Es gilt C = q k bzw. k = log q C. 2 In der Analysis sind Bälle üblicherweise als offene Bälle definiert, d.h. man fordert < e statt e. Dies ist in der diskreten Situation hier nicht besonders sinnvoll. 3

Gütekriterien für Codes und Schranken Zwei Beispiele für einen 1-fehlerkorrigierenden Code Ausgangslage: Man hat als eigentliche Information Wörter der Länge 4 über F 2 (also etwa die Binärdarstellung von hexadezimalen Zeichen). Man möchte den Code nun so verändern (z.b. durch Anhängen von Prüfziffern), dass er einen Fehler korrigiert. Methode 1: Die naive Methode besteht darin, das Ausgangswort dreifach zu senden. Wörter aus H(4, F 2 ) werden also kodiert als Wörter in H(12, F 2 ), nämlich v = (v 1, v 2, v 3, v 4 ) als v v v := (v 1, v 2, v 3, v 4, v 1, v 2, v 3, v 4, v 1, v 2, v 3, v 4 ). C 1 = { v v v v H(4, F 2 ) ist dann ein binärer [12, 4, 3]-Code: Die Wortlänge ist 12, die Dimension 4 (da dim H(4, F 2 ) = 4) und das Minimalgewicht 3, d.h. der Code erkennt zwei Fehler und korrigiert einen. Dieser Code ist aber nicht besonders effizient: die Raumgröße ist H(12, F 2 ) = 2 12 = 4.096. Es gibt 16 Codewörter, die mit Ihren Korrekturbereichen einen Platz von 16 B 1 (c) = 16 13 = 208 einnehmen. Es gibt also einen verschwendeten Platz von 4.096 208 = 3.888 Wörtern. Methode 2: Man benutzt folgenden Code C 2 : (0, 0, 0, 0, 0, 0, 0) (0, 1, 0, 0, 1, 0, 1) (1, 0, 0, 0, 0, 1, 1) (1, 1, 0, 0, 1, 1, 0) (0, 0, 0, 1, 1, 1, 1) (0, 1, 0, 1, 0, 1, 0) (1, 0, 0, 1, 1, 0, 0) (1, 1, 0, 1, 0, 0, 1) (0, 0, 1, 0, 1, 1, 0) (0, 1, 1, 0, 0, 1, 1) (1, 0, 1, 0, 1, 0, 1) (1, 1, 1, 0, 0, 0, 0) (0, 0, 1, 1, 0, 0, 1) (0, 1, 1, 1, 1, 0, 0) (1, 0, 1, 1, 0, 1, 0) (1, 1, 1, 1, 1, 1, 1) Ein Wort v aus H(4, F 2 ) wird kodiert durch dasjenige Wort aus H(7, F 2 ) in der Liste, dessen Anfangsstück gerade v ist. Man kann nun überprüfen, dass C 2 ein binärer [7, 4, 3]-Code ist. Der Code erkennt also ebenfalls zwei Fehler und korrigiert einen, bei gleicher Anzahl von Codewörtern (d.h. gleicher Dimension 4). Die Raumgröße ist hier aber H(7, F 2 ) = 2 7 = 128. Die 16 Codewörter nehmen mit Ihren Korrekturbereichen einen Platz von 16 B 1 (c) = 16 8 = 128 ein, d.h. es gibt keinen verschwendeten Platz. Solche Codes heißen perfekte Codes. C 2 ist übrigens ein Beispiel für einen Hamming-Code. Im folgenden wird erklärt werden, wie man C 2 systematisch konstruieren kann und wie Kodierung und Dekodierung funktionieren. Denn C 1 hat gegenüber C 2 zunächst den Vorteil, dass die Kodierungs- und Dekodierungsschritte offensichtlich sind, während man bei C 2 in der Tabelle nachschauen muss. Gütekriterien für Codes Ein Code sollte möglichst viele Fehler erkennen und korrigieren (d.h. ein großer Minimalabstand ist gewünscht). Ein Code sollte möglichst viele Codewörter im Verhältnis zur Wortlänge n haben. Die Ver- und Entschlüsselung sollte effizient möglich sein. Die ersten beiden Anforderungen laufen einander zuwider: Redundanzen (Prüfziffern) erhöhen die Wortlänge. Für Ver- und Entschlüsselung gibt es immer die Möglichkeit, eine Verschlüsselungstafel aufzustellen. Für die Entschüsselung eines fehlerhaft übertragenen Worts muss dann nach dem bzgl. der Hamming-Metrik nächstgelegenen Wort in der Tafel suchen. Dies sind eher langwierige Algorithmen. Schnelle Algorithmen setzen eine innere (in der Regel algebraische) Struktur des Codes voraus u.a. daher sind lineare Codes interessant. 4

Schranken (a) Die Hamming-Schranke Jeder q-äre Code der Länge n mit Mindestabstand d hat höchstens d 1 / q n 2 i=0 (q 1) i i Codewörter. Ein Code heißt perfekt, wenn er die Hamming-Schranke erreicht. (Die Schranke folgt sofort aus der Formel für B e (c).) Beispiele: (a) q = 2, n = 7, d = 3: Hier ergibt die Hamming-Schranke 2 7 /(1+7) = 16. Der Hamming-Code C 2 im Beispiel oben erreicht als perfekter Code diese Schranke. (b) q = 2, n = 6: Die Folge der Binomialkoeffizienten ( 6 i) ist 1, 6, 15, 20, 15, 6, 1. Keine der Summen ( ( 6 0) +... 6 e) ist ein Zeiler von 2 6 = 64 außer für e = 0 und e = 6. Dies entspricht den sogenannten trivialen Codes: es sind alle Wörter Codewörter (bei Minimalabstand 1) oder es gibt überhaupt nur ein Codewort (bei Minimalabstand ). Beide Codes sind perfekt, aber aus Sicht der Codierungstheorie vollkommen uninteressant. Darüberhinaus gibt es also keinen perfekten binären Code der Länge 6. (b) Die Gilbert-Schranke Gegebenen q, n, d, so gibt es einen q-ären Code der Länge n und vom Minimalabstand mindestens d mit mindestens / d 1 q n (q 1) i i Codewörtern. Ist q eine Primzahlpotenz, so kann man den Code linear wählen. i=0 (Beweis: Sei C ein Code vom Minimalabstand d, so dass C kleiner als die Gilbert-Schranke ist. Dann gibt es ein x H(n, q), welches zu allen c C mindestens Abstand d hat, denn nach Annahme gilt C B d 1 (c) < q n = H(n, q). (Beachte, dass die Größe von B d 1 (c) nicht von c abhängt.) Dann ist C {x ein größerer Code vom Minimalabstand d. Durch sukzessives Vergrößern erhält man also einen Code, der die Gilbert-Schranke erfüllt. Für den linearen Fall nimmt man an, dass C ein linearer Code ist (hierfür startet man mit dem Nullunterraum). Man muss nun zeigen, dass der erzeugte lineare Code x, C weiterhin Mindestgewicht d hat. Ein typisches Element darin hat die Form αx + βc mit α, β F q und c C. Falls α = 0, so ist d(αx + βc, 0) = d(βc, 0) d nach Annahme an C. Falls α 0, so ist d(αx + βc, 0) = d(x, β α c) d nach Wahl von x, da β α c C.) Beispiel: Für q = 2, n = 7, d = 3 ergibt die Gilbert-Schranke 2 7 /(1+7+21) 4, 41. Die Gilbert-Schranke stellt also die Existenz einen Codes C vom Minimalabstand 3 mit mindestens 5 Codewörtern sicher. Im linearen Fall weiß man, dass die Anzahl der Element von C als Untervektorraum von F 7 2 eine Zweierpotenz sein muss, also erhält man C 8. Aus dem obigen Beispiel wissen wir aber, dass es sogar den Hamming-Code mit 16 Wörtern gibt. 5

Lineare Codes Sei C nun ein q-ärer [n, k]-code, also ein k-dimensionaler Unterraum von H(n, q) = F n q. Erzeugermatrix C kann durch eine Erzeugermatrix G dargestellt werden. Dies ist eine (k n)-matrix, deren Zeilen eine Basis von C bilden (also insbesondere linear unabhängig sind). Eine Erzeugermatrix G ist nicht eindeutig bestimmt. Man kann sie aber o.e. (nach Basiswechsel) auf die Form ( Idk A ) bringen (hierbei ist A eine (k (n k))-matrix). (Man kann die Art der nötigen Basiswechsel genauer beschreiben. Im allgemeinen wird der Code durch solch einen Basiswechsel verändert und durch einen äquivalenten Code ersetzt. Wir werden aber sehen, dass die spezielle Form der Erzeugermatrix G einer Kodierung durch Anhängen von Prüfziffern entspricht, also einer sehr üblichen Art von Codes.) Im Beispiel des [7, 4, 3]-Hamming-Codes ist etwa G = eine Erzeugermatrix in dieser Form. 1 0 0 0 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 1 1 1 1 (Bemerkung: Man sieht, dass die Basisvektoren paarweise Abstand mindestens 3 haben. Dies reicht aber i.a. nicht um zu folgern, dass der erzeugte Code Minimalabstand mindestens 3 hat. Man kann nur, wie im Beweis der Gilbert-Schranke, von einem Vektor, der zu einem Untervektorraum einen Minimalabstand hat, auf den Minimalabstand des von beiden erzeugten Untervektorraums schließen.) Kodierung: Die Kodierung eines (Zeilen-)Vektors v H(k, q) erfolgt nun durch v G = (G T v T ) T H(n, q). Hat G die besondere Form (Id k A), so entsteht der Codevektor also durch Anhängen von n k Prüfziffern, da v G die Form v w für einen Vektor w der Länge n k hat. Die Prüfziffern erhält man als Linearkombination der Prüfziffern der Basiselement. Man sieht insbesondere sofort, dass die Kodierungsabbildung injektiv ist. (Allgemein folgt dies daraus, dass die Zeilen von G linear unabhängig sind, also rg(g) = rg(g T ) = dim Bild(G T ) = k und somit dim Kern(G T ) = 0). Im Beispiel wird etwa der Vektor (1, 0, 1, 1) (den man als Darstellung der Binärzahl 1011, also der Dezimalzahl 11 oder der Hexadezimalzahl B auffassen kann), durch (1, 0, 1, 1) G = (1, 0, 1, 1, 0, 1, 0) kodiert. Prüf- oder Kontrollmatrix Eine Prüfmatrix H des Codes C ist eine ((n k) n)-matrix, für die C = Kern(H) gilt. D.h. es gilt H c T = 0 für alle c C und die Zeilen von H sind linear unabhängig. (Wegen dim Bild(H) = n dim Kern(H) = n dim C = n k folgt die lineare Unabhängigkeit der Zeilen von H. Sind umgekehrt die n k Zeilen von H linear unabhängig und liegt C im Kern, so folgt C = Kern(H) erneut aus Dimensionsgründen.) Es gilt somit H G T = 0 bzw. (nach Transponieren) G H T = 0. Es ist also G ist eine (k n)- Matrix und H eine ((n k) n)-matrix, jeweils mit linear unabhängigen Zeilen, die G H T = 0 erfüllen. Hat man umgekehrt zwei Matrizen mit diesen Eigenschaften, so sind es Erzeugerund Prüfmatrix eines Codes, nämlich Bild(G T ) aus Dimensionsgründen folgt nämlich wieder Kern(H) = Bild(G T ). 6

Damit sieht man: Hat G die Form (Id k A), so ist eine zugehörige Prüfmatrix. H = ( A T Id n k ) Im Beispiel des [7, 4, 3]-Hamming-Codes und der Erzeugermatrix G von oben ist 0 1 1 1 1 0 0 H = 1 0 1 1 0 1 0 1 1 0 1 0 0 1 die passende Prüfmatrix. Bemerkung: Der Code C ist jeweils durch G und durch H festgelegt, G und H sind aber nicht eindeutig durch V bestimmt, auch nicht in der speziellen Form. Dekodierung: Angenommen w H(n, q) wird empfangen. Als Dekodierung wird zunächst dasjenige c C gesucht, welches minimalen Hamming-Abstand zu w hat und dann das Urbild von c unter der Kodierung (die ja injektiv ist) bestimmt. Um die Existenz von c sicherzustellen, nehmen wir an, dass entweder ein perfekter, e-fehlerkorrigierender Code vorliegt, oder dass höchstens e Übertragungsfehler vorgekommen sind, wobei 2e + 1 d für das Minimalgewicht d des Codes ist. Es gilt aufgrund dieser Annahmen dann w = c + f wobei c C und d(f, 0) e. Man berechnet nun zunächst das sogenannte Syndrom von w, das ist H w T. Es gilt dafür H w T = H (c + f) T = H c T + H f T = 0 + H f T, d.h. das Syndrom von w ist gleich dem Syndrom des Fehlers f. Für zwei mögliche Fehler f, f gilt zudem d(f f, 0) d(f, 0) + d( f, 0) e + e < d, also ist f f / C und somit H f T H f T = H (f f ) T 0. Verschiedene Fehler haben also verschiedene Syndrome. Man kann nun eine Liste der Syndrome der möglichen Fehler aufstellen dies sind B e (0) viele; eine im Vergleich mit H(n, q) deutlich kleinere Zahl. Die Dekodierung geht dann folgendermaßen: Man berechnet das Syndrom H w T, schaut in der Tabelle nach, welchem Fehler f es entspricht, korrigiert den Fehler, und erhält so das zugehörige Codewort c C. Zu diesem kann man nun die Umkehrung der Kodierungsabbildung bestimmen; hat G die besondere Form (Id k A), dann besteht diese Umkehrabbildung einfach im Weglassen der Prüfziffern. Der Prüfmatrix kann man das Minimalgewicht des Codes ablesen: Satz 2 Sei C ein linearer Code. Dann gilt: C hat genau dann Minimalgewicht mindestens d, wenn je d 1 Spalten der Prüfmatrix linear unabhängig sind. (Beweis: Eine Linearkombination 0 = n i=0 a is i der Spalten S i von H entspricht gerade einem Vektor a = (a 1,..., a n ), für welchen H a = 0 gilt, also einem a Kern(H) = C. Die Anzahl der Komponenten a i 0 in a, also der tatsächlich vorkommenden Spalten in der Linearkombination, ist gerade das Gewicht von a.) Insbesondere hat also ein Code Minimalgewicht mindestens 3, wenn je zwei Spalten der Prüfmatrix linear unabhängig sind, d.h. wenn keine null ist und keine das skalare Vielfache einer anderen ist. Definition 3 Ein Hamming-Code ist ein linearer Code C vom Minimalgewicht 3, dessen Prüfmatrix zu gegebener Zeilenanzahl die maximale Anzahl von Spalten hat. 7

Ist m die Anzahl der Zeilen der Prüfmatrix H, so bilden die Spalten von H ein Repräsentantensystem der Vektoren F q \ {0 bezüglich skalarer Multiplikation. D.h. keine Spalte von H ist die Nullspalte und für jeden Vektor v F m q, v 0 gibt es genau einen Spaltenvektor von H, der ein skalares Vielfaches von v ist. Mit anderen Worten: die Spaltenvektoren sind Erzeuger eindimensionaler Unterräume von F m q und jeder solche Unterraum kommt genau einmal vor. Man kann sich leicht überlegen, dass die Anzahl n der Spalten dann genau qm 1 q 1 ist (qm 1 ist die Anzahl der Vektoren ungleich null, q 1 die Anzahl der Skalarfaktoren ungleich null). Die Dimension des zugehörigen Hamming-Codes ist dann k = qm 1 q 1 m. Für q = 2 ist die Situation besonders einfach: Die Spaltenvektoren von H sind sämtliche Vektoren in F m q ohne den Nullvektor. Ihre Anzahl n ist 2 m 1, die Dimension des Codes ist 2 m (m + 1). Auch die Dekodierung ist im Falle q = 2 besonders einfach: Die möglichen Fehler sind gerade die Standardbasisvektoren e 1,..., e n in F n 2. Das Syndrom H et i von e i ist dann gerade die i-te Spalte von H. Zur Dekodierung von w berechnet man also das Syndrom H w T. Ist das Syndrom 0, so ist kein Fehler aufgetreten. Ansonsten schaut man nach, in welcher Spalte i von H das Syndrom auftritt und korrigiert die i-te Stelle von w. Schließlich lässt man die Prüfziffern, d.h. letzten n k Stellen weg. Liste der perfekten Codes Ist q eine Primzahlpotenz, so gibt es die folgenden perfekten q-ären Codes (wobei e die Anzahl der korrigierbaren Fehler bezeichnet): der triviale [n, 0, ]-Code mit e = n (besteht nur aus einem Wort); der triviale [n, n, 1]-Code mit e = 0 (alle Wörter sind im Code); die q-ären Hamming-Codes: [ qm 1 q 1, qm 1 q 1 m, 3]-Codes mit e = 1; einige nicht-lineare Codes mit gleichen Parametern wie Hamming-Codes; die binären Wiederholungscodes ungerader Länge: zu jedem e N einen [2e+1, 1, 2e+1]- Code (es gibt nur die beiden Wörter (0, 0,..., 0) und (1, 1,..., 1)); den binären Golay-Code: ein [23, 12, 7]-Code mit e = 3; den ternären Golay-Code: ein [11, 6, 5]-Code mit e = 2. Der binäre Wiederholungscode ist für e = 0 der triviale [1, 1, 1]-Code und für e = 1 der [3, 1, 31]- Hamming-Code. Falls q keine Primzahlpotenz ist, so weiß man nicht, ob es perfekte Codes gibt (und nur für einige wenige Werte weiß man, dass keine perfekten Codes existieren). Im allgemeinen weiß man wenig darüber, welches die besten Codes sind. 8