# Redundanz (Informationstheorie)

Der Begriff der Redundanz (von lateinisch redundare, „überlaufen, sich reichlich ergießen“) beschreibt in der Informationstheorie diejenigen Informationen oder Daten, die in einer Informationsquelle mehrfach vorhanden sind. Eine Informationseinheit ist dann redundant, wenn sie ohne Informationsverlust weggelassen werden kann. Das Identifizieren und Entfernen solcher Redundanzen heißt Deduplikation.

## Nachrichten- und Informationsübertragung

Redundant ist der Teil einer Nachricht, der keine Information enthält. Der redundante Teil der Nachricht kann eine Funktion der in der Nachricht enthaltenen Information sein. In der informationstechnischen und nachrichtentechnischen Anwendung wird Redundanz gezielt eingesetzt, um Fehler zu erkennen. Eine stärkere Redundanz ermöglicht neben dem Erkennen von Fehlern auch gleich deren Korrektur. Redundanz erlaubt also eine Steigerung der Qualität (weniger Fehler) auf Kosten der Quantität (höhere Datenrate). Die Stärke der jeweils einzusetzenden Redundanz richtet sich also nach der Fehlertoleranz der jeweiligen Anwendung – bei Bankgeschäften und Raumfahrt könnte ein einziges umgekipptes Bit viel Geld kosten, während bei Internettelefonie oder DVB sogar der andauernde Verlust ganzer Pakete ohne Bedeutung ist.

### Fehlertoleranz

Eine Kommunikation lässt sich durch redundante Informationen fehlertolerant über einen Informationskanal durchführen, da unter Umständen verloren gegangene oder verfälschte Teilinformationen von dem Empfänger aus ihrem Kontext rekonstruiert werden können. Ein Maß für die Fehlertoleranz ist die Hamming-Distanz.

### Mittlere Codewortlänge

    Sei $Z$ ein Alphabet und $z\in Z$
    $C(z)$ bezeichnet das zu $z$ gehörende Codewort
    $l(z)$ bezeichnet die Länge von $C(z)$
Die mittlere Codewortlänge $L(C)$ eines Quell-Codes $C(z)$ mit der Wahrscheinlichkeitsverteilung $p(z)$ ist gegeben durch:
    $L(C)=\sum _{i=1}^{|Z|}{l(z_{i})p(z_{i})}$

### Redundanz eines Codes

Die Redundanz des Codes ist die Differenz zwischen mittlerer Codewortlänge $L(C)$ und Entropie $H(X)$. (Beispiel: Huffman-Kodierung für optimales (= minimales) $L(C)$).
    $R_{\text{Code}}=L(C)-H(X)\,$
Die Redundanz der Quelle ist die Differenz zwischen maximaler Entropie $H_{\text{max}}(X)=\log _{2}|Z|$ und der Entropie $H(X)$ der Nachrichtenquelle.
    $R_{\text{Quelle}}=\log _{2}|Z|-H(X)\,$
Da die Codewortlänge nicht kleiner als die Entropie sein kann, ist die Redundanz nie negativ.

## Kodierung

In der Kodierungstheorie werden zwei Erscheinungsformen der Redundanz unterschieden:
* Die Verteilungsredundanz liegt in dem unterschiedlich wahrscheinlichen Auftreten der einzelnen Zeichen des Alphabets.
* Die Bindungsredundanz liegt darin, dass nach bestimmten Zeichen das Auftreten eines bestimmten anderen Zeichens besonders wahrscheinlich ist. Beispielsweise folgt in einem deutschen Text auf ein q fast immer ein u.

## Datenbanken und Datenstrukturen

In der Datenbankentwicklung sowie in Datenstrukturen von Programmen gilt es, Redundanzen möglichst vollständig zu vermeiden, da diese zu einem höheren Speicherplatzbedarf und zu Inkonsistenzen führen können. Redundanzen werden daher zu den Anomalien gezählt. Redundanzfreiheit gilt als Grundprinzip für ein logisches Datenmodell.
Durch Normalisierung des Datenbankschemas können Redundanzen weitgehend vermieden werden. Es gibt auch Redundanzen, die unvermeidbar sind (zum Beispiel Schlüsselredundanzen) und daher als notwendiges Übel in Kauf genommen werden. Es gibt auch Redundanzen, die in Kauf genommen werden, weil deren Vermeidung einen zu hohen Aufwand im Verhältnis zu ihrer Problematik darstellen würde, wie zum Beispiel das mehrfache Auftreten eines Attributwertes oder die doppelte Speicherung des Namens Müller für Herrn Müller und für Frau Müller.
Die absichtliche Inkaufnahme von Redundanz zur Gewinnung einer besseren Leseleistung nennt man Denormalisierung.

### Nachteile

In Datenstrukturen von Programmen und Datenbanken können Redundanzen zu Programmfehlern führen. Der Programmierer muss darauf achten, dass er bei allen Änderungen auch die redundanten Daten konsistent hält. Dies erfordert einen hohen Synchronisationsaufwand. Je größer das Projekt ist und je länger an dem Projekt entwickelt wird, desto schwieriger gestaltet sich dies. Wenn mehrere Programmierer unwissenderweise unabhängig voneinander an redundanten Daten arbeiten, so ist es fast unmöglich, die Änderungen konsistent zu halten.

### Vorteile

Es gibt einige Fälle, in denen absichtlich herbeigeführte Datenredundanz die Rechenzeit der Software reduziert. Sie kann durch gezielte Denormalisierung erreicht werden. Diese genau kalkulierte und gewollte Redundanz ist jedoch deutlich zu unterscheiden von nachlässig entstandener Redundanz, weil jemand die Normalisierungsregeln nicht anwendet. Denormalisierungen steigern in der Regel die Leseleistung, aber verschlechtern die Schreibleistung.