Arithmetische Kodierung

Größe: px
Ab Seite anzeigen:

Download "Arithmetische Kodierung"

Transkript

1 Arithmetische Kodierung Studienarbeit Heiko Hund Juni 2003 Fachbereich Informatik Fachhochschule Karlsruhe

2 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis Einführung Grundlagen Alphabet, Symbol, Sequenz Wahrscheinlichkeit Modell Entropie Arithmetische Kodierung Kodierung Dekodierung Beispiel Festkomma Implementierung Kodierung Dekodierung Beispiel Das Programm ArithCode Abbildungsverzeichnis Tabellenverzeichnis Literaturverzeichnis Heiko Hund 2

3 Kapitel 1 - Einführung 1 Einführung Die vorliegende Arbeit befasst sich mit der Arithmetischen Kodierung, einem Verfahren zur verlustfreien Datenkompression. Verlustfreie Datenkompression wird immer dann eingesetzt, wenn der Umfang von Daten zur Speicherung oder Übertragung verringert werden soll, die darin enthaltene Information jedoch vollständig erhalten werden soll. Im Gegensatz dazu stehen die verlustbehafteten Kompressionsverfahren, die sich im Allgemeinen Schwächen der menschlichen Wahrnehmungsorgane zu Nutze machen um Audio und Video Signale zu komprimieren. Die Teile der Daten, die für den Menschen nicht wahrnehmbar sind werden dabei entfernt, was zum Effekt hat, dass die Datenmenge geringer wird. Meist arbeiten verlustbehaftete Verfahren jedoch hybrid, so dass nach einer solchen Kompression eine weitere verlustfreie stattfindet, mit der der Umfang der Daten nochmals verringert wird. Erste Ansätze der Arithmetischen Kodierung wurden bereits in den Frühen 60er Jahren von Elias und Abramson vorgestellt, jedoch dauerte es bis in die später 80er Jahre, bis ein für Digitalrechner geeigneter Algorithmus veröffentlicht wurde [4]. Der Grund dafür lag jedoch nicht an der Komplexität des Verfahrens, sondern darin, dass in Digitalrechnern die arithmetische Genauigkeit beim Rechnen mit reellen Zahlen begrenzt ist. Dies wird im Kapitel 3 nochmals aufgegriffen und genauer betrachtet werden, wenn die Idee der Arithmetischen Kodierung besprochen wird. Die Arithmetische Kodierung erreicht im Allgemeinen einen höheren Kompressionsfaktor als andere bekannte Verfahren zur Entropiekodierung. Diesen Vorteil verschafft sich die Arithmetische Kodierung dadurch, dass sie nicht einzelnen Zeichen Kodes zuweist, sondern die Nachricht als Ganzes kodiert. Dadurch wird es möglich, dass ein Symbol, über die gesamte Nachricht betrachtet, mit einer gebrochenen Anzahl von Bits kodiert werden kann, was eine bessere Annäherung an die tatsächliche Entropie einer Nachricht ermöglicht. Die vorliegende Arbeit hatte zum Ziel ein Programm zu erstellen, welches die Arithmetische Kodierung implementiert. Dieses Programm wird vorgestellt, nach dem auf die Grundlagen der Arithmetischen Kodierung, sowie eines daraus abgeleiteten Algorithmus der ausschließlich Integeroperationen verwendet [4] eingegangen wurde. Die Informationen für diese Ausarbeitung stammen größtenteils aus [1] und [3]. Heiko Hund 3

4 Kapitel 2 - Grundlagen 2 Grundlagen Vor der Vorstellung des eigentlichen Verfahrens zur Arithmetischen Kodierung, sollen hier noch einige grundlegende Begriffe aus dem Gebiet der Datenkompression erläutert werden. Sie sind zum Verständnis der darauf folgenden Erläuterungen von Nutzen. 2.1 Alphabet, Symbol, Sequenz Ein Alphabet A ist eine nichtleere, endliche Menge von Symbolen a. Notiert wird eine Solche Menge als A = {a1, a2,,am}. Die Anordnung der Symbole in dieser Menge ist festgelegt, so dass einer Position in einem Alphabet bijektiv ein Symbol zugeordnet wird. Ein Beispiel für ein im Computerbereich verwendetes Alphabet ist der UNICODE Zeichensatz. Eine Sequenz S ist eine festgelegte Folge von Symbolen aus einem Alphabet. Notiert wird eine Sequenz als S = {s1, s2,, sn}. S bezeichnet die Länge der Sequenz in Symbolen. Ein Symbol kann innerhalb einer Sequenz mehrmals an verschiedenen Positionen vorkommen. Es kann aber auch gar nicht vorkommen. So könnte zum Beispiel dieser Text als Sequenz von Symbolen aus dem Alphabet von Satzzeichen und deutschen Buchstaben aufgefasst werden. 2.2 Wahrscheinlichkeit Die Wahrscheinlichkeit eines Symbols innerhalb einer Sequenz p(ai) ergibt sich aus der Anzahl dieses Symbols innerhalb der Sequenz S a i im Bezug auf die Länge der Sequenz n. In einer Formel ausgedrückt formuliert sich das wie folgt. S ai p( ai ) = (1) n Man erkennt, dass die resultierende Wahrscheinlichkeit im halboffenen Intervall [0;1) liegt. Eine Wahrscheinlichkeit von 1 für ein Symbol kann deshalb ausgeschlossen werden, da die Kodierung einer Sequenz aus dem gleichen Zeichen offensichtlich unnötig ist, da ihr Inhalt schon bekannt ist. Die kumulative Wahrscheinlichkeit einer Sequenz sind die aufsummierten Wahrscheinlichkeiten der einzelnen Symbole in ihr und ist immer Modell Ein Modell dient dazu einem Symbol ai einen Wahrscheinlichkeitswert zuzuordnen. Dies ist sinnvoll, da die Wahrscheinlichkeiten unter verschiedenen Randbedingungen auch verschieden ausgeprägt sein werden. So werden Texte in verschiedenen Sprachen Heiko Hund 4

5 Kapitel 2 - Grundlagen genau so eine unterschiedliche Häufigkeitsverteilung aufweisen, wie Texte die für unterschiedliche Zielgruppen verfasst wurden. Durch ein Modell lässt sich solch eine Häufigkeitsverteilung für eine bestimmte Anwendung definieren, ohne dass die tatsächlichen Wahrscheinlichkeiten bekannt sein müssen. Des weiteren ermöglicht ein Modell eine Definition von Wahrscheinlichkeiten für Teilsequenzen bestehend aus verschiedenen Symbolen (sogenannten N-Grammen). Dadurch kann die Kodierungseffizienz erhöht werden, da so größere Blöcke der vorliegenden Daten mit einem Kode beschrieben werden können. 2.4 Entropie Die Entropie als Begriff in der Informationstheorie wurde von Claude Shannon geprägt [5]. Sie beschreibt die minimale Anzahl von Bits, die pro Symbol notwendig sind um eine Information zu übertragen. Sie wird wie folgt definiert: H M 1 ( S) = p( ai ) log2 (2) p ( a ) a A Aus der Formel wird ersichtlich, dass die Entropie abhängig vom Modell M ist. Mit dem Logarithmus Dualis wird berechnet, wie viele Bits nötig sind, um ein Symbol ai zu kodieren, welches mit der modellierten Wahrscheinlichkeit pm(ai) in der zu kodierenden Sequenz S auftritt. Diese Zahl wird dann nochmals mit der realen (gemessenen) Wahrscheinlichkeit multipliziert. Die Entropie ist am geringsten, wenn die Modellwahrscheinlichkeit pm(ai) gleich der tatsächlichen Wahrscheinlichkeit p(ai) ist. Um effizient kodieren zu können ist es also nötig, sein Modell möglichst an der tatsächlichen Verhältnissen zu orientieren. Wählt man ein suboptimales Modell zur Kompression einer Sequenz, ist es sogar möglich, dass diese sich nach der Kompression vergrößert hat. Trotz dieser Tatsache: soll eine Sequenz S verlustfrei komprimiert werden, stellt die Entropie H(S) die untere Schranke der Kompression dar. Das heißt man benötigt immer mindestens S H(S) Bits um sie zu kodieren. M i Heiko Hund 5

6 Kapitel 3 - Arithmetische Kodierung 3 Arithmetische Kodierung Wie schon erwähnt ist die Arithmetische Kodierung ein Verfahren, bei dem nicht den einzelnen Symbolen einer Nachricht Kodewörter zugeordnet werden, sondern der ganzen Nachricht. Dadurch ist es unter anderem möglich Symbole mit weniger als einem Bit zu kodieren. Im Allgemeinen kann man sagen, dass die Annäherung an die Entropie einer Nachricht besser möglich ist als mit Verfahren, wie beispielsweise der Huffman- Kodierung, die nur Kodes aus ganzen Bits produzieren. 3.1 Kodierung Anhand des Beispielalphabets A = {a, b, c, d} mit den Wahrscheinlichkeiten PM = {0,4; 0,2; 0,1; 0,3} soll die Funktionsweise der Arithmetische Kodierung erläutert werden. Aus Kapitel 2.2 ist bekannt, dass die einzelnen Wahrscheinlichkeiten im Intervall [0;1) liegen. Weiterhin ist bekannt, dass zwischen zwei beliebigen reellen Zahlen aus diesem Intervall unendlich viele Zahlen liegen. Das Intervall [0;1) wird nun entsprechend den Wahrscheinlichkeiten in Teilintervalle untergliedert. In Abbildung 1 kann man sehen, wie das Intervall für die hier gewählten Wahrscheinlichkeiten aussieht. a b c d 0,0 0,4 0,6 0,7 1,0 Abbildung 1: Unterteilung des Startintervalls beim einem gegebenen Modell P M Ebenso kann man erkennen, dass sich die Grenzen für ein Teilintervall aus den kumulierten Wahrscheinlichkeiten ergeben. Für die Berechnung der kumulierten Wahrscheinlichkeit für das k-te Symbol im Alphabet wird die Formel p K k ( a ) = p ( a ) (3) k i= 1 eingeführt. Daraus ergibt sich, dass pk(0) = 0,0 und pk(i+1) = pk(i) + p(i) gilt. Die obere und untere Grenze des Gesamtintervalls soll zu dem, ab sofort mit low beziehungsweise high bezeichnet werden. Zusammenfassend ergeben sich für das aktuelle Intervall also die Werte die in Tabelle 1 aufgeführt sind. M i high 1,0 low 0,0 pk(a0) 0,0 pk(a1) 0,4 pk(a2) 0,6 pk(a3) 0,7 Tabelle 1: Kumulierte Häufigkeiten und Intervallgrenzen beim Modell P M Heiko Hund 6

7 Kapitel 3 - Arithmetische Kodierung All diese Werte werden benötigt um einen Nachricht zu komprimieren. Das Prinzip der Arithmetischen Kodierung ist es nämlich, das Intervall mit jedem Symbol immer weiter zu verkleinern. Die neuen oberen und unteren Grenzen des Intervalls (low und high) werden dabei von der oberen und unteren Grenze des Teilintervalls des aktuell kodierten Symbols (pk(i-1) und pk(i)) bestimmt. Um dieses neue Intervall zu berechnen werden die Formeln low' = low + p ( a 1) ( high low) (4) K i high' = low + p ( a ) ( high low) (5) K i eingeführt. Mit ihnen ist es möglich, unter Berücksichtigung der aktuellen Intervallgrenzen und des zu kodierenden Symbols ai die neuen Grenzen für das Gesamtintervall zu bestimmen. Sie mögen auf den ersten Blick vielleicht etwas komplex wirken, spätestens nachdem ihre Anwendung an einem konkreten Beispiel gezeigt wird, wird klar werden was sie bewirken. Der eigentliche Kode einer Nachricht ist nun irgendeine Zahl aus dem Intervall, das nach Bearbeitung des letzten Symbols in der Nachricht festgelegt wurde. Deshalb spricht man bei der Arithmetischen Kodierung auch davon, dass der gesamten Nachricht ein Kode zugewiesen wird und nicht einzelnen Symbolen. Man kann sich vorstellen, dass beim Kodieren von langen Nachrichten diese Zahl relativ viele Nachkommastellen haben wird, da sich ja das Intervall mit jedem kodierten Symbol verkleinert. Zur Übertragung bildet man das Zweierkomplement dieser reellen Zahl und erhält so einen Bitstring. Am besten man wählt also eine Zahl aus dem Intervall, die sich durch eine Zweierpotenz beschreiben lässt, um den Kode nicht unnötig lang werden zu lassen. Wie bereits erwähnt gibt es jedoch einen Haken an diesem Verfahren, so dass es sich nicht ohne weiteres Implementieren lässt. Durch die Tatsache, dass die Intervallgrenzen immer weiter zusammenrücken, wird eine immer höhere Präzision der Rechenoperationen notwendig. Die Fließkomma-Operationen in einem heutigen Rechner sind jedoch nur von beschränkter Genauigkeit, was bedeutet, dass man früher oder später an die Grenzen der Berechenbarkeit eines Intervalls stoßen wird. Ab diesem Punkt ist eine Kodierung dann nicht mehr machbar. Hinzu kommt, dass Fließkomma-Operationen ein Vielfaches der Ressourcen von Integer-Operationen beanspruchen. An eine Implementierung für Digitalrechner ist also nicht zu denken. Dennoch soll hier auch noch der Dekodierungsvorgang besprochen werden. Eine Verwirklichung der Arithmetischen Kodierung die ausschließlich Integer-Operationen verwendet, wird in Kapitel 4 vorgestellt werden. 3.2 Dekodierung Um eine mittels Arithmetischer Kodierung komprimierten Nachricht zu dekomprimieren, wird im Prinzip ähnlich vorgegangen. Lediglich die Voraussetzungen sind ein wenig Heiko Hund 7

8 Kapitel 3 - Arithmetische Kodierung geändert, da man mit einer Zahl Z (dem Kode der Nachricht) und nicht mit einer Sequenz beginnt. Für die Dekodierung werden die kumulierten Wahrscheinlichkeiten der Symbole im Alphabet pk(ai) benötigt, da auch hier die Formeln (4) und (8) Anwendung finden. Man beginnt mit dem gleichen Intervall I = [0;1) wie bei der Kodierung und betrachtet, in welchen Teilintervall die Zahl Z hineinfällt. Anhand dieses Teilintervalls I = [pk(ai-1); pk(ai)) kann der Dekodierer dann das zugeordnete Symbol ai bestimmen. Danach werden unter Verwendung dieses Symbols und mittels der Formeln (4) und (8) die neuen Intervallgrenzen berechnet. Um das nächste Symbol der Nachricht zu bekommen, wird in dem neuen Intervall wieder das Teilintervall gesucht, in dem Z liegt. Die ganzen Schritte werden sooft durchgeführt, bis man alle Zeichen der Nachricht extrahiert hat, also S mal. Ein Problem gibt es bei der Dekodierung jedoch, auf das bisher nicht eingegangen wurde. Wird dem Dekodierer nicht die Länge der Nachricht mitgeteilt, so kann er prinzipiell unendlich lange fortfahren zu dekodieren, da es ja immer wieder ein Teilintervall im aktuellen Intervall gefunden wird, in dem sich die Zahl Z befindet. Dies führt wiederum zu einem Symbol und neuen Werten für low und high, obwohl diese Symbole in der Sequenz gar nicht vorhanden waren. 3.3 Beispiel Um das Verfahren zu verdeutlichen soll hier noch eine kurze Sequenz aus dem Alphabet A arithmetisch kodiert und anschließend wieder dekodiert werden. Das Alphabet und die Wahrscheinlichkeiten der einzelnen Symbole sind bereits bekannt, bleibt also noch die Sequenz zu definieren als S = {a, d, b}, mit S = 3. Die Häufigkeit der Symbole entspricht dabei nicht den Wahrscheinlichkeiten aus dem Modell, was zur Folge haben wird, das der erstellte Kode sich nicht optimal an die Entropie der Nachricht nähert. Am Prinzip der Verarbeitung ändert die jedoch nichts. Begonnen wird die Kodierung mit dem Intervall [0; 1) und dem ersten Symbol der Sequenz. Da es sich dabei um ein a handelt ergeben sich nach (4) und (8) folgende neuen Grenzen für das Intervall: low = low + pk(ai-1) (high low) = = 0 high = low + pk(ai) (high low) = 0 + 0,4 1 = 0,4 In dem neuen Intervall [0; 0,4) wird nun für das nächste Symbol d das Teilintervall gesucht. Dazu werden wieder die Formeln zur Berechnung von low und high verwendet. Hier wird deutlich, dass sich das Teilintervall immer nur innerhalb des bestehenden Intervalls befinden kann, da low nie kleiner als low sein kann und high nie größer als low + (high low), also der unteren Grenze des aktuellen Intervalls plus seiner Breite Heiko Hund 8

9 Kapitel 3 - Arithmetische Kodierung (high low). Durch die Multiplikation der kumulierten Wahrscheinlichkeiten pk(ai), wird die Lage der oberen und unteren Grenze von ai auf das Intervall umgerechnet (siehe dazu auch Abbildung 2). Da per Definition die kumulierte Wahrscheinlichkeit pk(ai-1) immer kleiner als pk(ai) ist, ist auch immer erfüllt, dass low < high. low = low + pk(ai-1) (high low) = 0 + 0,7 0,4 = 0,28 high = low + pk(ai) (high low) = ,4 = 0,4 Nach der Kodierung von d ist das Intervall nun [0,28; 0,4) und hat, nach nur zwei kodierten Symbolen, noch eine Breite von 0,12. Man kann sich vorstellen, dass es noch kleiner wäre, hätte man ein Alphabet mit einer größeren Anzahl von Symbolen definiert. Die Wahrscheinlichkeiten der einzelnen Zeichen wären dann vermutlich geringer geworden und somit würden sich auch ihre Teilintervalle verkleinern. Nun soll auch noch das letzte Symbol der Nachricht kodiert werden, ein b. low = low + pk(ai-1) (high low) = 0,28 + 0,4 0,12 = 0,328 high = low + pk(ai) (high low) = 0,28 + 0,6 0,12 = 0,352 Nachdem nun das Ende der Sequenz erreicht ist, steht auch das Intervall fest, in dem die Zahl Z liegen muss. Den Weg auf dem dieses Intervall gefunden wurde, stellt Abbildung 2 noch einmal bildlich dar. Für dieses Beispiel gilt also 0,328 Z < 0,352. 1,0 0,4 0,4 0,352 d d d 0,7 0,6 0,4 c b 0,28 0,24 0,16 c b 0,364 0,352 0,328 c b 0,3448 0,3424 0,3376 Z a a a 0,0 0,0 0,28 0,328 Abbildung 2: Intervallbildung für die Sequenz {a, d, b} Heiko Hund 9

10 Kapitel 3 - Arithmetische Kodierung Gesucht ist demnach eine Zahl, die in diesem Intervall liegt und sich mittels eines Zweierkomplements beschreiben lässt. Dazu sucht man einfach Bit für Bit, bis man eine solche Zahl gefunden hat. Z = = 0 0, , , , ,03125 = 0,34375 Die Nachricht kann also durch die Bitfolge beschrieben werden, was bedeutet dass pro Symbol 1, 6 Bits zur Kodierung verwendet wurden. Die Entropie der Nachricht ist H = log 2 (3) 1, 58496, eine Annäherung der Kodelänge an die Entropie ist also deutlich zu erkennen. Das dies trotz des nicht angepassten Modells so ist, hat zum einen mit der Kürze der Nachricht und zum anderen damit zu tun, dass alle drei Symbole im Modell ungefähr eine Wahrscheinlichkeit von einem Drittel haben. Wurde das Modell nicht schon im Vorfeld vereinbart, ist es notwendig, dem Dekodierer dieses zur Verfügung zu stellen. Mit dem Modell und der Bitfolge kann er nun die Nachricht wieder dekodieren. Er geht dabei genauso vor wie der Kodierer, nur dass er vor jeder Runde das Symbol anhand des aktuellen Intervalls und der Zahl Z bestimmt. Gestartet wird also ebenfalls mit dem Intervall [0; 1). Da 0,0 Z = 0,34375 < 0,4 liegt Z in ersten Teilintervall. Das erste Symbol der Nachricht muss demnach ein a sein. Mit diesem Wissen wird das Intervall dann wiederum mittels (4) und (8) reskaliert. low = low + pk(ai-1) (high low) = = 0 high = low + pk(ai) (high low) = 0 + 0,4 1 = 0,4 Es werden also genau die selben Berechnungen wie auch schon bei der Kodierung der Nachricht verwendet, um sie Schritt für Schritt nachvollziehen zu können. Mit diesem neuen Intervall und den so bekannten neuen Teilintervallgrenzen (vgl. Abbildung 2) kann Z wieder einem Teilintervall zugeordnet werden. Das nächste Symbol ergibt sich demnach aus der Feststellung, dass 0,28 Z = 0,34375 < 0,4 und wird somit als d identifiziert. Wiederum wird das Intervall reskaliert. low = low + pk(ai-1) (high low) = 0 + 0,7 0,4 = 0,28 high = low + pk(ai) (high low) = ,4 = 0,4 Heiko Hund 10

11 Kapitel 3 - Arithmetische Kodierung Um an das letzte Symbol der Nachricht zu gelangen, muss nun abermals das Teilintervall gefunden werden in dem Z liegt. In diesem Fall ist dies der Fall für 0,328 Z = 0,34375 < 0,352, also dem Intervall, das dem b zugeordnet ist. Betrachtet man noch einmal Abbildung 2, so wird klar warum es notwendig ist den Dekodierer von explizit zu terminieren. Ohne die Kenntnis der Länge der Sequenz oder einem vereinbarten Symbol, welches das Ende der Sequenz anzeigt, ist es dem Dekodierer nicht möglich festzustellen, wann diese komplett ist. Auch im resultierenden letzten Intervall gibt es nämlich wieder genau ein Teilintervall, in das die Zahl Z hinein passen würde. In diesem Fall würde dies das Intervall [0,3424; 0,3448), also ein c sein. Aus der Tatsache, dass es unendlich viele Zahlen in jedem Teilintervall gibt, lässt schließen, dass der Dekodierer nie an ein Ende kommen würde. Heiko Hund 11

12 Kapitel 4 - Festkomma-Implementierung 4 Festkomma-Implementierung Wie bereits erwähnt, wurde eine effiziente Implementierung der Arithmetischen Kodierung erst viel später veröffentlicht, als die Idee selbst. Es dauerte bis 1987, bis Witten et al. [4] einen Algorithmus aufzeigten, mit dem die Arithmetische Kodierung nun auch auf kleineren Prozessoren effektiv implementiert werden konnte, da er lediglich Festkomma-Operationen verwendete. Dieser Algorithmus war wesentlich einfacher zu implementieren und ist meist auch immens schneller als der im vorigen Kapitel vorgestellte. Wie die Arithmetische Kodierung funktioniert, wenn nur Integer verwendet werden, soll in diesem Kapitel besprochen werden. Offensichtlich muss man nun davon ausgehen, dass nicht mehr unendlich viele Zahlen zur Kodierung zur Verfügung stehen, da ein endliches Intervall in ù stets eine endliche Menge Zahlen beinhaltet. 4.1 Kodierung Analog zum vorigen Algorithmus, muss auch bei der Festkomma-Implementierung ein Modell initialisiert werden. Da keine reellen Zahlen verwendet werden können, wird hier allerdings nicht mit Wahrscheinlichkeiten von Symbolen, sondern mit deren Häufigkeiten gearbeitet. Zum besseren Vergleich, wurden die Häufigkeiten entsprechend der Wahrscheinlichkeiten in Kapitel 3.1 gewählt. Für eine Sequenz S mit S = 10, bestehend aus Symbolen des Alphabets A = {a, b, c, d}, wurden die Häufigkeiten also auf HM = {4, 2, 1, 3} festgelegt. Die kumulierten Häufigkeiten sind dem entsprechend HK = {0, 4, 6, 7, 10}. Die Anzahl der Symbole ist N = 4. Normiert man also die Häufigkeit eines Symbols mit der Summe aller Häufigkeiten hk(n), ergibt sich wieder die Wahrscheinlichkeit dieses Symbols. Als Voraussetzung für den Algorithmus muss zudem gelten hm(s) 1, für alle s S, was für eine Sequenz in der nur Symbole aus A vorkommen somit erfüllt ist. Die Größe des Intervalls wird über die Anzahl der zu verwendenden Bits B definiert, so dass die größte Zahl im Intervall M = 2 B -1 ist. Das resultierende Intervall für die Kodierung ist also zunächst [0; M). Im Allgemeinen wählt man das Intervall also B so groß wie möglich, um die Teilintervallgrenzen, entsprechend den Häufigkeiten der Symbole, bestmöglich approximieren zu können. Hier soll die Implementierung für Prozessoren mit 32 Bit breiten Registern besprochen werden. Das größtmögliche B ist in diesem Fall 31. Warum das so ist wird später noch geklärt werden. Es kann also von einem M = ausgegangen werden. Wie auch bei der Fließkomma Variante des Algorithmus werden die untere und obere Grenze des Intervalls initialisiert mit low = 0 und high = M. Heiko Hund 12

13 Kapitel 4 - Festkomma-Implementierung Zur Bestimmung der neuen Grenzen der Teilintervalle kommen die beiden Gleichungen (6) und (8) zum Einsatz. Ihre Ähnlichkeit mit (4) und (5) fällt sofort ins Auge. Das ist nicht weiter verwunderlich, denn sie sollen schließlich das Gleiche bewirken. low high low + 1 low + hk ( ai ) (6) hk ( N) ' = 1 high low + 1 high' = low + hk ( ai ) 1 (7) hk ( N) Der einzige Unterschied ist die Anpassung auf die Berechnung mit Integern, in der Form, dass hier mit Häufigkeiten statt mit Wahrscheinlichkeiten gerechnet wird und deshalb auch eine Normierung mit der Summe aller Häufigkeiten hk(n) erfolgt. Statt jedoch die Häufigkeit des kodierten Symbols zu normieren, wird der aktuelle Intervallbereich dividiert. Der Grund dafür ist, dass eine Ganzzahl-Division immer abgerundet wird und so das Ergebnis der Division der Häufigkeit immer zum Ergebnis 0 haben würde. Zwar ist diese Umformung mathematisch vollkommen korrekt, wie man in den Formeln sieht wird aber natürlich auch das Ergebnis dieser Division abgerundet, was die Berechnung ungenau werden lässt. Diese Ungenauigkeit bewegt sich allerdings im Rahmen des Vertretbaren und wie später sehen wird, erreicht auch dieser Algorithmus eine gute Annäherung an die Entropie der kodierten Sequenz. Ein genaueres Ergebnis ließe sich erreichen, wenn man vor der Division zuerst die Multiplikation durchführen würde. Diese Vorgehensweise ist in der Praxis jedoch nicht wirklich besser, da es durch die Multiplikation zu einem Register-Überlauf kommen kann, wenn die Breite des Intervalls (high low + 1), beziehungsweise die Häufigkeit des kodierten Symbols hk(ai) groß sind. Aus den beiden Formeln wird auch die Rahmenbedingung ersichtlich, dass die Breite des Intervalls nie kleiner als die Summe der Häufigkeiten hk(n) werden darf, da sonst einer der Faktoren zu 0 würde. Wie später deutlich werden wird, kann ein Intervall nie kleiner als Q1 werden, woraus sich die Bedingung hk(n) Q1 ergibt. Deshalb und auch um dem ständigen verkleinern der Intervalle entgegen zu wirken, werden drei Skalierungsfunktionen definiert. Sie vergrößern das Intervall bei drei unterschiedlichen Bedingungen auf verschiedene Arten. Diese drei Funktionen, E1, E2 und E3 genannt, sollen im Folgenden vorgestellt werden. Für die Skalierungsfunktionen werden drei Hilfsvariablen eingeführt, die das Intervall vierteln. Sie werden entsprechend den Vierteln an deren Ende sie sich befinden als Q1 = M/4 + 1, Q2 = 2 Q1 und Q3 = 3 Q1 definiert. Die Skalierungsfunktion E1 tritt immer dann in Kraft, wenn das mit (6) und (8) neu bestimmte Intervall komplett in der unteren Hälfte des aktuellen Intervalls liegt, also die Bedingung high < Q2 erfüllt ist. Da das neue Intervall in der unteren Hälfte liegt, das weiß man von der arithmetischen Kodierung mit reellen Zahlen, werden alle folgenden Teilintervalle ebenfalls in dieser Hälfte liegen. Mann kann also schon eine binäre 0 in den Ergebnis-Bitstrom schreiben, was die aus der Kodierung resultierende Binärzahl in der un- Heiko Hund 13

14 Kapitel 4 - Festkomma-Implementierung teren Hälfte des Intervalls ansiedelt. Danach wird das Intervall vergrößert. Dieses neue Intervall stellt man sich am besten als die gezoomte Version des Intervalls vor. Die Grenzen und die Breite gleichen vielleicht einem bereits vorangegangenen Intervall, in Wahrheit befindet man sich aber nur in einem stark vergrößerten Teilintervall des Intervalls [0; M). Je öfter man Skaliert hat, umso kleiner ist dieses Intervall eigentlich, was sich auch dadurch ausdrückt, das die ausgegebene Zweierpotenz auf Grund der Position im Bitstring einen immer niedrigeren Wert hat. Möglich ist diese Skalierung und die damit einhergehende Überlappung der numerischen Grenzen, da hier, im Gegensatz zur Arithmetischen Kodierung mit reellen Zahlen, nicht die Intervallgrenzen den Kode bestimmen, sondern die Lage des Teilintervalls innerhalb des aktuellen Intervalls. Dies wird deutlicher, wenn man auch die Skalierungsfunktion E2 betrachtet. Diese Funktion E2 wird nämlich immer dann aktiv, wenn das Teilintervall komplett in der oberen Hälfte des Intervalls liegt, also die Bedingung low Q2 zutrifft. Hier wird nun eine binäre 1 ausgegeben, um anzuzeigen, dass das Teilintervall in der oberen Hälfte des aktuellen Intervalls liegt. Ein Beispiel: Das Intervall wurde noch nie skaliert, ist also noch [0; M). Nimmt man an, dass dieses Intervall [0; 1) entspricht, so ist ausgegebene 1 so zu interpretieren, dass die aus der Kodierung resultierende binäre Zahl Z mindestens 1 2-1, also auf jeden Fall größer als 0,5 ist. Z liegt also immer im Teilintervall [0,5; 1) beziehungsweise [Q2; M). Dies ist genau die gleiche Vorgehensweise, wie sie auch schon bei der Kodierung der reellen Zahl Z per Zweierkomplement erfolgt ist (siehe Kapitel 3.3), nur das dort Z erst binär kodiert wurde als das letzte Intervall bestimmt war. Hier wächst Z schon während der Kodierung. Würde ein Intervall nie skaliert werden, würde es durch das Prinzip der Arithmetischen Kodierung immer kleiner werden. Auf Grund der schlechten Auflösung der natürlichen Zahlen, würde eine Kodierung recht bald nicht mehr möglich sein, da keine Teilintervalle mehr bestimmt werden könnten. Im Intervall [0; 10) liegen hier nämlich nicht mehr unendlich viele Zahlen, sondern nur noch 10. Es wären schlichtweg zu wenige Zahlen vorhanden, um die Teilintervalle abbilden zu können. Die letzte Möglichkeit, wie ein Intervall sich verkleinern kann, behandelt die Funktion E3. Die Skalierungsfunktion E3 wird immer dann aktiv, wenn sich die beiden Grenzen des Intervalls, low und high, von unten und oben der Mitte nähern. Auch in diesem Fall wäre der Intervallbereich bald zu klein um mit Integerzahlen kodieren zu können. Im Extremfall wäre sogar denkbar, dass low = Q2-1 und high = Q2 sind und weder E1 noch E2 würden darauf reagieren. Als Bedingung für die Anwendung von E3 muss der Ausdruck low Q1 und high < Q3 zutreffen. Das Teilintervall darf also maximal den Umfang des Intervalls [Q1; Q3) haben. Da in diesem Fall noch keine Entscheidung über die endgültige Lage des Teilintervalls getroffen werden kann im Moment erstreckt es sich noch über beide Hälften wird diese Entscheidung aufgeschoben. Ein Zähler n für die ausgeführten E3-Skalierungen wird um Eins inkrementiert und das Intervall vergrößert. Erst wenn eine E1- oder E2-Skalierung erfolgt ist, werden n weitere Bits ausgegeben. Im Fall von E1 sind diese n Bits 1 und im Fall von E2 0. Diese Regel kommt daher, dass eine E3- gefolgt von einer E1-Skalierung ausgedrückt werden kann als eine E1- gefolgt von Heiko Hund 14

15 Kapitel 4 - Festkomma-Implementierung einer E2-Skalierung. Ebenso verhält es sich mit einer E3- gefolgt von einer E2-Skalierung. Diese können ausgedrückt werden kann als eine E2- gefolgt von einer E1-Skalierung. Abbildung 3 zeigt anhand einer E3-E1-Skalierung, dass die resultierenden Teilintervalle tatsächlich die Gleichen sind. Voraussetzung die E3-Skalierung ist, dass nur das zweite und dritte Viertel des Intervalls für das Teilintervall in Frage kommen. Diese werden skaliert und die E1-Funktion wählt davon wiederum die untere Hälfte aus. Als Ergebnis erhalt man das zweite Viertel des ursprünglichen Intervalls [Q1; Q2). Wird im Vergleich dazu zuerst die E1- gefolgt von der E2-Fuktion angewendet, ist das Ergebnis zwar identisch, die Vorgehensweise allerdings verschieden. Hier wird zuerst die untere Hälfte selektiert und danach von dieser wieder die obere Hälfte also effektiv ebenfalls das zweite Viertel. Für die Folge E3-E2 verglichen mit E2-E1 gilt das Gleiche, nur dass hier die untere Hälfte der oberen Hälfte des Intervalls selektiert wird also das dritte Viertel. Erfolgt also eine E3-Skalierung, wird nur n um Eins hochgezählt, damit bei der Kodierer entsprechend viele E2 beziehungsweise E1 Bits anhängen kann, so dass das Intervall im Nachhinein der kodierten Sequenz entspricht. M Q3 Q2 M Q2 Q2 Q3 Q3 Q2 Q2 Q2 Q1 Q1 Q1 0 Q1 Q1 0 0 Q1 E3 E1 E1 E2 Abbildung 3: Eine E3-E1 Skalierungsfolge im Vergleich mit einer E1-E2 Der Pseudoprogrammkode in Abbildung 5 zeigt nochmals in der Übersicht wie die Kodierung implementiert werden könnte. Man sieht, dass ein sehr geringer Programmieraufwand notwendig ist, um die Arithmetische Kodierung mit Integern zu implementieren. Will man jedoch verstehen, welche Konzepte und Ziele hinter jeder einzelnen Zeile Kode stehen, so bedarf es doch einiger Erläuterungen. Dargestellt wird nur die innere Schleife, die für jedes Symbol in der zu kodierenden Sequenz durchlaufen werden muss. Eine Kleinigkeit fehlt nun noch, um den Algorithmus zu vervollständigen. Die Bitsequenz muss nämlich, nach dem das letzte Symbol aus der Sequenz bearbeitet wurde, terminiert werden. Damit wird erreicht, das die resultierende Zahl Z genau in das Endintervall fällt, das am Ende der Kodierung durch [low; high) definiert wird. Es werden also die Bits hinzugefügt, die fehlen um das Z eindeutig ein Intervall beschreiben zu lassen. In Heiko Hund 15

16 Kapitel 4 - Festkomma-Implementierung Abbildung 4 wird in der rechten Hälfte gezeigt, welche Lagen für low und high nach der Kodierung möglich sind. Alle anderen Lagen werden bereits durch die Skalierungsfunktionen während der Kodierung behandelt. Dies wird in der linken Hälfte der Abbildung dargestellt. Wie bereits bei der Kodierung mit reellen Zahlen gezeigt wurde, genügt es irgendeine Zahl aus dem Intervall zu wählen um den Kode zu erstellen. Deshalb wird in dem Fall, dass low im unteren Viertel des Intervalls liegt, eine Zahl aus dem zweiten Viertel gewählt. Für die beiden möglichen Fälle von low < Q1, liegt Z so auf jeden Fall innerhalb des Intervalls. Das zweite Viertel kann, wie schon bei der E3-Skalierungen gezeigt, durch eine Kombination aus E1- und E2-Skalierung kodiert werden. Es werden also die beiden Bits 0 und 1 zum Kode hinzugefügt. Außerdem müssen noch alle unbehandelten E3-Skalierungen kodiert werden um den Kode zu vervollständigen. Dadurch werden zusätzlich noch n weitere 1 en ausgegeben. Dieses kodieren von E3-Funktionen ist immer dann erforderlich, wenn die letzte(n) Skalierung(en) ausschließlich E3 waren, da hier lediglich n inkrementiert wird und keine Bits ausgegeben werden. Für den verbleibenden Fall, dass low Q1 ist, wird eine Zahl aus dem dritten Viertel gewählt um Z garantiert im Intervall zu wissen. Entsprechend dem dritten Viertel werden die Bits 1 und 0 hinzugefügt, was die untere Hälfte der oberen Hälfte kodiert. Wie auch im vorigen Fall werden noch n ausstehende E3-Skalierungen kodiert, in diesem Fall allerdings durch 0 en. In Abbildung 6 wird Pseudokode vorgestellt, mit dem sich die Terminierung der Kodierung erreichen lässt. E1 E2 E3 Lagen nach der Kodierung Abbildung 4: Mögliche Lagen der oberen und unteren Intervallgrenzen Damit ist die Kodierung der Sequenz beendet und der Dekodierer ist vorausgesetzt er kennt das zur Kodierung verwendete Modell in der Lage aus der Zahl Z wieder die ursprüngliche Sequenz herzustellen. Wie er dies im Einzelnen macht, wir im nächsten Abschnitt erläutert. Heiko Hund 16

17 Kapitel 4 - Festkomma-Implementierung high = low + hk(a) * [(high low + 1) / hk(n)] - 1 low = low + hk(a-1) * [(high low + 1) / hk(n)] loop { if ( high < Q2 ) // E1 Skalierung { Bit 0 ausgeben n mal Bit 1 ausgeben n = 0 low = 2 * low high = 2 * high + 1 } else if ( high > Q2 ) // E2 Skalierung { Bit 1 ausgeben n mal Bit 0 ausgeben n = 0 low = 2 * (low Q2) high = 2 * (high Q2) + 1 } else if (( low >= Q1 ) && ( high < Q3 )) // E3 Skalierung { n = n + 1 low = 2 * (low Q1) high = 2 * (high Q1) + 1 } else // Schleife verlassen wenn keine Skalierung mehr nötig { end loop } } Abbildung 5: Pseudokode für die arithmetische Kodierung mit natürlichen Zahlen n = n + 1 if ( low < Q1 ) { Bit 0 ausgeben n mal Bit 1 ausgeben } else { Bit 1 ausgeben n mal Bit 0 ausgeben } Abbildung 6: Pseudokode zur Terminierung der Arithmetischen Kodierung Heiko Hund 17

18 Kapitel 4 - Festkomma-Implementierung 4.2 Dekodierung Der Dekodierer muss auch hier die Operationen des Kodierers nachahmen. Dazu benötigt er die gleichen Variablen wie der Kodierer, also N, B, M, Q1, Q2, Q3, low und high. Zusätzlich benötigt er eine Variable, die die aktuelle Position der Zahl Z speichert. Diese Variable soll hier pos genannt werden. Sie wird vor Beginn der Dekodierung mit den ersten B Bits der Zahl Z initialisiert. Sollte Z kleiner B sein, so werden Nullen aufgefüllt, bis pos B Bits umfasst. Wäre zum Beispiel B = 5 und Z = , so würde pos mit dem Wert 12 (001100) initialisiert. Die Nullen und Einsen von pos sind dabei so zu interpretieren, dass sie nach dem obere/untere Hälfte Prinzip auf das Teilintervall zeigen, dem das erste Symbol der Nachricht zugeordnet ist. Mit der Formel h = pos low K (8) high low + 1 hk ( N) kann nun die kumulierte Häufigkeit die dem Intervall an der Position pos entspricht, berechnet werden, aus der sich wiederum das Symbol selbst bestimmen lässt. Pseudokode dazu zeigt Abbildung i = N while ( h_k < h_k[i-1] ) { i = i - 1 } s = a_m(i) Abbildung 7: Pseudokode zur Bestimmung des Symbols s aus h K (a) Ist das Symbol bekannt, kann der Dekodierer mit der Neuberechnung der Intervallgrenzen fortfahren. Dies geschieht analog zur Kodierung mittels der beiden Gleichungen (6) und (7). Auch die Skalierungsfunktionen E1, E2 und E3 finden hier Anwendung. Zusätzlich zum Intervall wird hier allerdings auch pos mitskaliert, damit es auch nach der Skalierung im richtigen Intervall liegt. Zusätzlich zur Skalierung wird zu pos auch das nächste Bit aus dem Kode hinzuaddiert, was eine weitere Einschränkung des skalierten Intervalls zur Folge hat. Wie der gesamte Vorgang als Pseudokode aussieht zeigt Abbildung 8. Wie nicht anders zu erwarten ist er größtenteils mit dem aus Abbildung 5 identisch. Lediglich die Zeilen zur Ausgabe der Bits werden durch Zeilen zum Einlesen von Bits ersetzt. Ist der gesamte Bitstrom der kodierten Nachricht verarbeitet, wurden auch alle Symbole wieder hergestellt und die Dekodierung kann beendet werden. Heiko Hund 18

19 Kapitel 4 - Festkomma-Implementierung high = low + hk(a) * [(high low + 1) / hk(n)] - 1 low = low + hk(a-1) * [(high low + 1) / hk(n)] loop { if ( high < Q2 ) // E1 Skalierung { low = 2 * low high = 2 * high + 1 pos = 2 * pos + next_bit() } else if ( high > Q2 ) // E2 Skalierung { low = 2 * (low Q2) high = 2 * (high Q2) + 1 pos = 2 * (pos - Q2) + next_bit() } else if (( low >= Q1 ) && ( high < Q3 )) // E3 Skalierung { low = 2 * (low Q1) high = 2 * (high Q1) + 1 pos = 2 * (pos - Q1) + next_bit() } else // Schleife verlassen wenn keine Skalierung mehr nötig { end loop } } Abbildung 8: Pseudokode zur Aktualisierung des Intervalls und pos 4.3 Beispiel Zur Verdeutlichung der, im Vergleich zur Arithmetischen Kodierung mit reellen Zahlen doch recht komplexen, Kodierung mit Ganzzahlen hier ein Beispiel. Um das Beispiel verständlicher zu halten, wird das Intervall allerdings auf eine relativ geringe Auflösung von B = 6 begrenzt. Um die Sequenz S = {a, d, b} zu kodieren reicht sie aus. Für komplexere Nachrichten sei auf das vom Autor im Rahmen der Studienarbeit erstellte Programm ArithCode verwiesen, das im Kapitel 5 vorgestellt wird. Wird von B = 6 ausgegangen, hat dies zur Folge, dass das Intervall mit dem die Kodierung begonnen wird als [0; 2 6-1), also [0; 63) definiert ist. Q1 ist demnach 63/4 + 1, also 16. Daraus wiederum ergeben sich Q2 = 32 und Q3 = 48. N ist die Anzahl der Symbole im Alphabet A, also N = 4. Die beiden Grenzen werden mit low = 0 und high = 63 initialisiert. Zuletzt wird noch der Zähler für die E3-Skalierungen mit n = 0 initialisiert. Heiko Hund 19

20 Kapitel 4 - Festkomma-Implementierung Gewappnet mit all diesen Werten kann die Kodierung los gehen. Um das erste Symbol a zu kodieren werden zuerst die Grenzen des Intervalls neu bestimmt. low = low + hk(ai-1) [(high low + 1) / hk(n)] = = 0 high = low + hk(a) [(high low + 1) / hk(n)] 1 = = 23 Nun trifft die Bedingung high < Q2 zu und es erfolgt eine E1-Skalierung mit Ausgabe eines 0 Bits. low = 2 low = 2 0 = 0 high = 2 high + 1 = = 47 kode = 0 + n 1 = 0 Da nun keine Skalierung des Intervalls mehr nötig ist, kann mit der Kodierung des nächsten Symbols d fortgefahren werden. Wiederum werden die Intervallgrenzen neu berechnet. low = low + hk(ai-1) [(high low + 1) / hk(n)] = = 28 high = low + hk(a) [(high low + 1) / hk(n)] 1 = = 39 In diesem Fall ist nun eine E3-Skalierung notwendig, da die Grenzen des Intervalls sich Q2 nähern. low = 2 (low Q1) = 2 12 = 24 high = 2 (high Q1) + 1 = = 47 n = n + 1 = 1 Weder low noch high haben sich durch die Skalierung weit genug von Q2 entfernt, so dass abermals eine E3-Skalierung notwendig ist. low = 2 (low Q1) = 2 8 = 16 Heiko Hund 20

21 Kapitel 4 - Festkomma-Implementierung high = 2 (high Q1) + 1 = = 63 n = n + 1 = 2 Nun ist das Intervall groß genug, um mit der Kodierung des nächsten und letzten Symbols b fortzufahren. Begonnen wird wie bei den anderen Symbolen auch mit der Neuberechnung der Intervallgrenzen. low = low + hk(ai-1) [(high low + 1) / hk(n)] = = 32 high = low + hk(a) [(high low + 1) / hk(n)] 1 = = 39 Nun tritt zum ersten Mal der Fall ein, dass low Q2. Somit wird eine E2-Skalierung notwendig. low = 2 (low Q2) = 2 0 = 0 high = 2 (high Q2) + 1 = = 15 kode = kode n 0 = 0100 n = 0 Nach dieser Skalierung hat low zwar wieder den kleinstmöglichen Wert, der Wert von high ist aber ebenfalls stark gefallen, so dass nun wieder high < Q2 gilt und dadurch eine E1-Skalierung notwendig ist. low = 2 low = 2 0 = 0 high = 2 high + 1 = = 31 kode = kode n 1 = Wieder ist high < Q2, so dass nochmals eine E1-Skalierung angewandt wird. low = 2 low = 2 0 = 0 high = 2 high + 1 = = 63 Heiko Hund 21

22 Kapitel 4 - Festkomma-Implementierung kode = kode n 1 = Da nun alle Symbole kodiert sind und auch keine Skalierungen mehr nötig sind, muss die Kodierung noch terminiert werden. Dies geschieht da n dem Wert Null hat und low < Q1 ist, mit den Bits 01 (siehe Abbildung 6). Die Zahl Z die die Sequenz S kodiert, ist also binär , was der dezimalen 0, entspricht. Die Tatsache, dass der Kode im Vergleich zu dem in Kapitel 3.3 berechneten um drei Bit länger ist, ist auf die sehr begrenzte Auflösung des Intervalls und die Kürze der Sequenz zurückzuführen. Tatsächlich ist die Annäherung an die Entropie einer Nachricht, auch mit diesem Verfahren gewährleistet, wenn die maximale Intervallbreite verwendet wird und die Nachrichten länger sind. Um Z wieder dekodieren zu können muss zunächst pos mit den ersten sechs Bits des Kodes initialisiert werden (pos = 16). Die beiden Intervallgrenzen werden mit low = 0 und high = 63 initialisiert. Die Werte der anderen Variablen werden übernommen. Zu Beginn wird die kumulierte Häufigkeit berechnet, die innerhalb des Intervalls liegt, das dem Symbol zugeordnet ist. hk = (pos low) /[(high low + 1) / hk(n)] + 1 = 16 / = 3 Die 3 liegt in dem Intervall [0; 4). Das Symbol das gerade dekodiert wurde ist demnach ein a. Mit dem a beziehungsweise seiner kumulierten Häufigkeit kann man nun die Grenzen des Intervalls neu berechnen. Die Rechnung verläuft genau so ab, wie die, bei der Kodierung der Sequenz. low wird 0 bleiben und high nimmt den Wert 23 an. Deshalb wird eine E1-Skalierung durchgeführt, die zum Ergebnis hat, dass low = 0 und high = 47. Der einzige Unterschied ist, dass auch pos mitskaliert wird, also den Wert pos = 2 pos + next_bit() = = 32 annimmt. Mit dem neuen Wert von pos wird nun wieder die kumulative Häufigkeit berechnet, die im Intervall des Symbols liegt, welches dekodiert werden soll. hk = (pos low) /[(high low + 1) / hk(n)] + 1 = 32 /4 + 1 = 9 Die 9 liegt eindeutig im Intervall [7; 10), was sie zum Symbol d zuordnet. Mit diesem d werden erneut die Intervallgrenzen neu berechnet. Das Ergebnis ist, wie auch schon bei der Kodierung low = 28 und high = 39. Es werden ebenfalls zwei E3-Skalierungen durchgeführt, die letztendlich zur Folge haben, dass low = 16, high = 63 und pos den Wert 34 annimmt: pos = 2 (pos Q1) + next_bit() = 2 (32 16) + 1 = 33 Heiko Hund 22

23 pos = 2 (pos Q1) + next_bit() = 2 (33 16) + 0 = 34 Kapitel 4 - Festkomma-Implementierung Mit diesem neu berechneten pos kann man nun auch das letzte Symbol dekodieren. Man errechnet die kumulative Häufigkeit und betrachtet das Intervall in dem diese liegt. Entsprechend diesem Intervall wählt man das Symbol. hk = (pos low) /[(high low + 1) / hk(n)] + 1 = 18 / = 5 Die errechnete 5 ist innerhalb des Intervalls [4; 6) und wird demnach zum b dekodiert. Damit wäre die gesamte Nachricht wieder aus dem Bitstrom extrahiert. In der Praxis funktioniert das genau so wie hier im Beispiel, bis auf die Tatsache, dass in der Regel mit einem B = 31 gearbeitet wird, was eine bessere Abbildung der Teilintervalle erlaubt. Die großen Zahlen, mit denen dabei gerechnet wird sind für ein Beispiel jedoch nicht wirklich dienlich. Wer Interesse hat die Berechnungen auch in diesen Regionen zu verfolgen, der kann dazu das Programm ArithCode verwenden, da es über alle Variablen und ihre Veränderungen während der Kodierung Auskunft gibt. Heiko Hund 23

24 Kapitel 5 - Das Programm ArithCode 5 Das Programm ArithCode Im Programm ArithCode wurde die Arithmetische Kodierung mit Ganzzahlen implementiert. Der Programmkode zur Kodierung und Dekodierung entspricht weitestgehend dem in Abbildung 5, Abbildung 6, Abbildung 7 und Abbildung 8 vorgestellten Kode. Zur Implementierung wurde die objektorientierte Sprache C++ verwendet. Um da Programm komfortabler Bedienen zu können, wurden Kodierer und Dekodierer in einem ausführbares Programm angesiedelt. So ist ein schnelles Vergleichen der Ergebnisse unter verschiedenen Rahmenbedingungen möglich. Es wurde eine graphische Benutzerschnittstelle entwickelt, mit der man das Programm unter Microsoft Windows bedienen kann. Im Folgenden sollen nun Kurz die drei Bildschirmmasken vorgestellt und die Bedienung des Programms erläutert werden. Abbildung 9: Bildschirmmaske des Kodierers im Programm ArithCode Startet man das Programm, so befindet man sich auf der Maske des Kodierers. Mit den Karteikarten (1) kann man zu den anderen Modulen des Programms wechseln. Auf dieser Heiko Hund 24

25 Kapitel 5 - Das Programm ArithCode Seite befindet sich ein Eingabefeld (2), in das bis zu Zeichen eingegeben werden können. Diese Zeichen dienen dem Arithmetischen Kodierer als zu kodierende Sequenz. Befindet sich in diesem Eingabefeld mindestens ein Zeichen, so kann man mit dem Button (3) die Kodierungsvorgang starten. Der aus der Kodierung resultierende Bitstring, wird im Feld (4) ausgegeben. Sollte er nicht vollständig in das Feld hineinpassen, sieht man nur das Ende des Bitstrings, kann aber mit Maus oder Cursor im Feld scrollen, wie man es von Eingabefeldern gewohnt ist. Das Feld (5) dient dem Kodierer Nachrichten an den Benutzer auszugeben. Für den Fall, dass die Checkbox (6) aktiviert ist, werden detaillierte Informationen über den Kodierungsvorgang ausgegeben während er im Gange ist. Es empfiehlt sich nicht sich die Details der Kodierung einer längeren Nachricht anzeigen zu lassen, da sonst sehr viele Daten anfallen. Den Button (7) kann man dazu verwenden, die ausgegebenen Informationen zu löschen. Der Button (8) dient dazu, den Kodierer und den Dekodierer wieder in ihre Ausgangslage zurück zu versetzen, das Modell ist davon nicht betroffen. Button (9) beendet das Programm. Die beiden letztgenannten Buttons und die Karteikarten (1) sind in jeder Maske sichtbar und haben immer die gleiche Funktionalität. Abbildung 10: Bildschirmmaske des Dekodierers im Programm ArithCode Heiko Hund 25

26 Kapitel 5 - Das Programm ArithCode Die Maske des Dekodierers ist ähnlich aufgebaut wie die des Kodierers. Das Feld (A) wird mit dem Ergebnis der letzten Kodierung gefüllt, sollte schon eine erfolgt sein. Ist dieses Feld leer, kann die Dekodierung auch nicht mit dem Button (B) gestartet werden. Andernfalls wird, nach dem die Dekodierung gestartet wurde die dekodierte Nachricht in das Feld (C) ausgegeben. Auch der Dekodierer verfügt über ein Informationsfeld (D), in dem, sollte die Checkbox (E) aktiviert sein, detaillierte Informationen über den Dekodierungsvorgang ausgegeben werden. Diese Informationen kann man mit dem Button (F) wieder löschen. Abbildung 11: Bildschirmmaske für das Modell im Programm ArithCode Normalerweise generiert der Kodierer, bevor er mit der Bearbeitung einer Nachricht anfängt ein Modell für die Kodierung. Dieses Modell initialisiert er mit den exakten Häufigkeiten der Nachricht, so dass ein perfekter Kode die Folge ist. Will man die Auswirkungen eines suboptimalen Modells betrachten, so wird man von der Maske für das Modell dabei unterstützt. Ist die Checkbox (I) aktiviert, so generiert der Kodierer kein neues Modell, wenn die Kodierung gestartet wird, sondern verwendet die Werte für die Häufigkeiten der Symbole, die in der Liste (II) nach belieben verändert werden können. Passt Heiko Hund 26

27 Kapitel 5 - Das Programm ArithCode das Modell jedoch nicht zum Text, so kommt es zwangsläufig zu Fehlern und die Kodierung bricht ab (diesbezüglich das Informationsfenster (5) beachten). Das ist immer dann der Fall, wenn ein Symbol mit der Häufigkeit 0 kodiert werden soll, was per Definition nicht gültig ist. Wird ein Modell von Kodierer erstellt, so finden sich die entsprechenden Häufigkeitswerte in der Liste (II) und können nachträglich verändert werden um zu sehen, welchen Einfluss das Modell auf die Effizienz der Kodierung hat. Dies ist aber wie gesagt nur der Fall, wenn Checkbox (I) deaktiviert ist, während die Kodierung statt findet. Eine andere Möglichkeit an die genauen Häufigkeiten einer Nachricht zu gelangen bietet Button (III). Wird er gedrückt so initialisiert er das Modell nach den Daten im Eingabefeld des Kodierers (2). Liste (II) und Button (III) sind allerdings nur aktiviert, wenn auch Checkbox (I) aktiviert ist. Außer der Beobachtung, wie ein suboptimales Modell die Kodiereffizienz beeinflusst, kann man mit einem manuell angepassten Modell auch noch überprüfen, das der Dekodierer das gleiche Modell verwenden muss mit dem kodiert wurde, um erfolgreich die Nachricht aus dem Bitstrom zu erstellen. Lässt man nämlich den Kodierer ein Modell erstellen, indem Checkbox (I) deaktiviert ist, aktiviert sie dann bevor man dekodiert und verändert die Häufigkeit eines Symbols, so ist die anschließende Dekodierung nicht erfolgreich. Heiko Hund 27

28 Verzeichnisse Abbildungsverzeichnis Abbildung 1: Unterteilung des Startintervalls beim einem gegebenen Modell PM 6 Abbildung 2: Intervallbildung für die Sequenz {a, d, b} 9 Abbildung 3: Eine E3-E1 Skalierungsfolge im Vergleich mit einer E1-E2 15 Abbildung 4: Mögliche Lagen der oberen und unteren Intervallgrenzen 16 Abbildung 5: Pseudokode für die arithmetische Kodierung mit natürlichen Zahlen 17 Abbildung 6: Pseudokode zur Terminierung der Arithmetischen Kodierung 17 Abbildung 7: Pseudokode zur Bestimmung des Symbols s aus hk(a) 18 Abbildung 8: Pseudokode zur Aktualisierung des Intervalls und pos 19 Abbildung 9: Bildschirmmaske des Kodierers im Programm ArithCode 24 Abbildung 10: Bildschirmmaske des Dekodierers im Programm ArithCode 25 Abbildung 11: Bildschirmmaske für das Modell im Programm ArithCode 26 Tabellenverzeichnis Tabelle 1: Kumulierte Häufigkeiten und Intervallgrenzen beim Modell PM 6 Literaturverzeichnis [1] Tilo Strutz: Bilddatenkompression, pp 39 50, Vieweg Verlag, 2002 [2] Peter Henning: Taschenbuch Multimedia, pp 36 41, Fachbuchverlag Leipzig, 2000 [3] E. Bodden, M. Clasen, J. Kneis: Arithmetische Kodierung, Proseminararbeit, RWTH Aachen, 2002 [4] I. Witten, R. Neal, J. Cleary: Arithmetic Coding for Datacompression, pp , Communications of the ACM, Vol. 30, No. 6, 1987 [5] Claude Shannon: A Mathematical Theory of Communication, Bell System Technical Journal, Vol. 27, 1948 Heiko Hund 28

Datenkompression. 1 Allgemeines. 2 Verlustlose Kompression. Holger Rauhut

Datenkompression. 1 Allgemeines. 2 Verlustlose Kompression. Holger Rauhut Datenkompression Holger Rauhut 1. September 2010 Skript für die Schülerwoche 2010, 8.-11.9.2010 Hausdorff Center for Mathematics, Bonn 1 Allgemeines Datenkompression hat zum Ziel, Daten in digitaler Form,

Mehr

Huffman-Kodierung. Fachbereich Medieninformatik. Hochschule Harz. Huffman-Kodierung. Referat. Henner Wöhler. Abgabe:

Huffman-Kodierung. Fachbereich Medieninformatik. Hochschule Harz. Huffman-Kodierung. Referat. Henner Wöhler. Abgabe: Fachbereich Medieninformatik Hochschule Harz Huffman-Kodierung Referat Henner Wöhler 11459 Abgabe: 15.01.2007 Inhaltsverzeichnis Einleitung...I 1. Entropiekodierung...1 1.1 Morse Code...2 1.2 Shannon-Fano-Kodierung...3

Mehr

Arithmetisches Codieren

Arithmetisches Codieren Arithmetisches Codieren 1. Motivation: Als Alternative zum arithmetischen Codieren bot sich damals als effizientester Algorithmus das Huffmann-Coding an. Dieses jedoch hatte einen entscheidenden Nachteil:

Mehr

6. Komprimierung. (Text)komprimierung ist ein Wechsel der Repräsentation von Daten, so daß sie weniger

6. Komprimierung. (Text)komprimierung ist ein Wechsel der Repräsentation von Daten, so daß sie weniger Komprimierung 6. Komprimierung (Text)komprimierung ist ein Wechsel der Repräsentation von Daten, so daß sie weniger Platz brauchen Motivation: beschleunigt Plattenzugriffe oder Datenübertragungen Voraussetzung:

Mehr

Dynamisches Huffman-Verfahren

Dynamisches Huffman-Verfahren Dynamisches Huffman-Verfahren - Adaptive Huffman Coding - von Michael Brückner 1. Einleitung 2. Der Huffman-Algorithmus 3. Übergang zu einem dynamischen Verfahren 4. Der FGK-Algorithmus 5. Überblick über

Mehr

2.7 Der Shannon-Fano-Elias Code

2.7 Der Shannon-Fano-Elias Code 2.7 Der Shannon-Fano-Elias Code Die Huffman-Codierung ist ein asymptotisch optimales Verfahren. Wir haben auch gesehen, dass sich die Huffman-Codierung gut berechnen und dann auch gut decodieren lassen.

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 011 Übungsblatt 30. Mai 011 Grundlagen: Algorithmen und Datenstrukturen

Mehr

Schleifeninvarianten. Dezimal zu Binär

Schleifeninvarianten. Dezimal zu Binär Schleifeninvarianten Mit vollstandiger Induktion lasst sich auch die Korrektheit von Algorithmen nachweisen. Will man die Werte verfolgen, die die Variablen beim Ablauf eines Algorithmus annehmen, dann

Mehr

Freie Universität Berlin. Seminar Talk. Datenkompression. Zacharias V. Fisches 2. Mai 2017

Freie Universität Berlin. Seminar Talk. Datenkompression. Zacharias V. Fisches 2. Mai 2017 Freie Universität Berlin Seminar Talk Datenkompression Zacharias V. Fisches zacharias.vf@gmail.com 2. Mai 2017 Proseminar Theoretische Informatik Prof. Wolfgang Mulzer Inhaltsverzeichnis 1 Einleitung 2

Mehr

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlensysteme: Oktal- und Hexadezimalsystem 20 Brückenkurs Die gebräuchlichste Bitfolge umfasst 8 Bits, sie deckt also 2 8 =256 Möglichkeiten ab, und wird ein Byte genannt. Zwei Bytes, also 16 Bits, bilden ein Wort, und 4 Bytes, also 32 Bits, formen

Mehr

Übung zur Vorlesung Berechenbarkeit und Komplexität

Übung zur Vorlesung Berechenbarkeit und Komplexität RWTH Aachen Lehrgebiet Theoretische Informatik Reidl Ries Rossmanith Sanchez Tönnis WS 2012/13 Übungsblatt 7 26.11.2012 Übung zur Vorlesung Berechenbarkeit und Komplexität Aufgabe T15 Entwickeln Sie ein

Mehr

Technische Informatik - Eine Einführung

Technische Informatik - Eine Einführung Martin-Luther-Universität Halle-Wittenberg Fachbereich Mathematik und Informatik Lehrstuhl für Technische Informatik Prof. P. Molitor Technische Informatik - Eine Einführung Darstellung von Zeichen und

Mehr

Fragen 1. Muss eine DTM ein Wort zu Ende gelesen haben, um es zu akzeptieren? a) Ja! b) Nein!

Fragen 1. Muss eine DTM ein Wort zu Ende gelesen haben, um es zu akzeptieren? a) Ja! b) Nein! 4 Turingmaschinen Eingabeband nicht nur lesen, sondern auch schreiben kann und die zudem mit ihrem Lese-Schreib-Kopf (LSK) nach links und rechts gehen kann. Das Eingabeband ist zudem in beide Richtungen

Mehr

Seminar Kompressionsalgorithmen Huffman-Codierung, arithmetische Codierung

Seminar Kompressionsalgorithmen Huffman-Codierung, arithmetische Codierung Huffman-Codierung, arithmetische Codierung Theoretische Informatik RWTH-Aachen 4. April 2012 Übersicht 1 Einführung 2 3 4 5 6 Einführung Datenkompression Disziplin,die Kompressionsalgorithmen entwirft

Mehr

Durch das Borgen steht an der Zehner-Stelle jetzt nur noch eine 1 statt einer 2

Durch das Borgen steht an der Zehner-Stelle jetzt nur noch eine 1 statt einer 2 .9 Subtraktion 55.9 Subtraktion Allgemein Bezeichnungen: Minuend - Subtrahend = Differenz Die Subtraktion zweier Zahlen wird stellenweise ausgeführt. Dabei kann es vorkommen, dass eine größere Zahl von

Mehr

Molekulare Bioinformatik

Molekulare Bioinformatik Molekulare Bioinformatik Wintersemester 203/204 Prof. Thomas Martinetz Institut für Neuro- und Bioinformatik Universität zu Luebeck 07.0.204 Molekulare Bioinformatik - Vorlesung 0 Wiederhohlung Die Entropie

Mehr

Informationstheorie und Codierung

Informationstheorie und Codierung Informationstheorie und Codierung 3. Codierung diskreter Quellen Gleichmäßiger Code Ungleichmäßiger Code Fano-, Huffman-Codierung Optimalcodierung von Markoff-Quellen Lauflängencodes nach Golomb und Rice

Mehr

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben Zwischenklausur Informatik, WS 206/7 4.2.206 Lösungen zu den Aufgaben. Gegeben sind folgende Dualzahlen in Zweierkomplementdarstellung. Geben Sie den jeweils zugehörigen Dezimalwert an! a) entspricht der

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und

Mehr

Das negative Zweierkomplementzahlensystem. Ines Junold 23. Februar 2010

Das negative Zweierkomplementzahlensystem. Ines Junold 23. Februar 2010 Das negative Zweierkomplementzahlensystem Ines Junold 23. Februar 2010 1 Inhaltsverzeichnis 1 Einleitung 3 2 Das konventionelle Zweierkomplement 4 2.1 Definition.......................................

Mehr

Leitfaden für Online-Datenrecherche (STAT-TAB)

Leitfaden für Online-Datenrecherche (STAT-TAB) Eidgenössisches Departement des Innern EDI Bundesamt für Statistik BFS Ressourcen und Internationales Leitfaden für Online-Datenrecherche (STAT-TAB) Inhalt 1 Einleitung 2 2 Suchen von Cubes via Facettensuche

Mehr

Thema: Excel-Grundlagen

Thema: Excel-Grundlagen Editieren von Zelleninhalten Die Eingabezeile Unmittelbar oberhalb des Tabellen-Arbeitsbereichs befindet sich eine Zeile, die im linken Feld die Adresse der momentan selektierten Zelle anzeigt und rechts

Mehr

Regula Falsi Die folgende Abbildung beschreibt das Näherungsverfahren regula falsi zur Berechnung von Nullstellen:

Regula Falsi Die folgende Abbildung beschreibt das Näherungsverfahren regula falsi zur Berechnung von Nullstellen: BspNr: J0010 Themenbereich Näherungsverfahren zur Nullstellenberechnung (Regula falsi) Ziele Probleme, die bei der näherungsweisen Nullstellenberechnung auftreten können, erkennen. Analoge Aufgabenstellungen

Mehr

Bruchterme. Klasse 8

Bruchterme. Klasse 8 ALGEBRA Terme Bruchterme Teil Noch ohne Korrekturlesung! Klasse Datei Nr. Friedrich W. Buckel November 00 Geändert: Oktober 00 Internatsgymnasium Schloß Torgelow Inhalt DATEI. Werte berechnen. Definitionsbereiche

Mehr

Schnelle Multiplikation

Schnelle Multiplikation Informationsblatt für die Lehrkraft Schnelle Multiplikation $&*&*& 999 3 x 3 =? 10001110 π/3 7 X 6 14 666 x 987 Informationsblatt für die Lehrkraft Thema: Schultyp: Vorkenntnisse: Bearbeitungsdauer: Schnelle

Mehr

Vorbemerkungen. Die Programmieroberfläche des ClassPad

Vorbemerkungen. Die Programmieroberfläche des ClassPad Vorbemerkungen Erfahrungen zeigen, dass die Programmiermöglichkeiten des ClassPad im Unterricht kaum genutzt werden. Dabei bieten aus unserer Sicht viele Situationen die Gelegenheit, die Programmieroberfläche

Mehr

Polynome und ihre Nullstellen

Polynome und ihre Nullstellen Polynome und ihre Nullstellen 29. Juli 2017 Inhaltsverzeichnis 1 Einleitung 2 2 Explizite Berechnung der Nullstellen 2.1 Polynome vom Grad 0............................. 2.2 Polynome vom Grad 1.............................

Mehr

Berechenbarkeit und Komplexität Vorlesung 11

Berechenbarkeit und Komplexität Vorlesung 11 Berechenbarkeit und Komplexität Vorlesung 11 Prof. Dr. Wolfgang Thomas Lehrstuhl Informatik 7 RWTH Aachen 7. Dezember 2014 Wolfgang Thomas, Informatik 7 () Vorlesung Berechenbarkeit und Komplexität 7.

Mehr

Lösungsvorschlag 3. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Lösungsvorschlag 3. Übung Technische Grundlagen der Informatik II Sommersemester 2009 Fachgebiet Rechnerarchitektur Fachbereich Informatik Lösungsvorschlag 3. Übung Technische Grundlagen der Informatik II Sommersemester 2009 Aufgabe 3.1: Codierungen a) Vervollständigen Sie folge Tabelle,

Mehr

Durch das Borgen steht an der Zehner-Stelle jetzt nur noch eine 1 statt einer 2

Durch das Borgen steht an der Zehner-Stelle jetzt nur noch eine 1 statt einer 2 3.9 Subtraktion 155 3.9 Subtraktion Allgemein Bezeichnungen: Minuend - Subtrahend = Differenz Die Subtraktion zweier Zahlen wird stellenweise ausgeführt. Dabei kann es vorkommen, dass eine größere Zahl

Mehr

Run Length Coding und Variable Length Coding

Run Length Coding und Variable Length Coding Fachbereich Medieninformatik Hochschule Harz Run Length Coding und Variable Length Coding Referat Matthias Zittlau 11034 Abgabe: 15.01.2007 Inhaltsverzeichnis 1. RLC...1 2.1 Einführung...1 2.2 Prinzip...1

Mehr

Summen, Indices und Multiindices

Summen, Indices und Multiindices Summen, Indices und Multiindices 1 Einleitung Möchten wir zwei Zahlen a und b addieren, so schreiben wir für gewöhnlich a + b. Genauso schreiben wir a + b + c, für die Summe von drei Zahlen a, b und c.

Mehr

Gierige Algorithmen Interval Scheduling

Gierige Algorithmen Interval Scheduling Gierige Algorithmen Interval Scheduling IntervalScheduling(s,f). n length[s] 2. A {} 3. j 4. for i 2 to n do 5. if s[i] f[j] then 6. A A {i} 7. j i 8. return A Gierige Algorithmen Interval Scheduling Beweisidee:

Mehr

A2.3 Lineare Gleichungssysteme

A2.3 Lineare Gleichungssysteme A2.3 Lineare Gleichungssysteme Schnittpunkte von Graphen Bereits weiter oben wurden die Schnittpunkte von Funktionsgraphen mit den Koordinatenachsen besprochen. Wenn sich zwei Geraden schneiden, dann müssen

Mehr

Hauptdiplomklausur Informatik Februar 2006: Multimedia Systems

Hauptdiplomklausur Informatik Februar 2006: Multimedia Systems Universität Mannheim Fakultät für Mathematik und Informatik Lehrstuhl für Praktische Informatik IV Prof. Dr.-Ing. W. Effelsberg Hauptdiplomklausur Informatik Februar 2006: Multimedia Systems Name: Matrikel-Nr.:

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Das Rechnen in Zahlensystemen zur Basis b=2, 8, 10 und 16 Prof. Dr. Nikolaus Wulff Zahlensysteme Neben dem üblichen dezimalen Zahlensystem zur Basis 10 sind in der Informatik

Mehr

Wann sind Codes eindeutig entschlüsselbar?

Wann sind Codes eindeutig entschlüsselbar? Wann sind Codes eindeutig entschlüsselbar? Definition Suffix Sei C ein Code. Ein Folge s {0, 1} heißt Suffix in C falls 1 c i, c j C : c i = c j s oder 2 c C und einen Suffix s in C: s = cs oder 3 c C

Mehr

Daten transformieren

Daten transformieren Daten transformieren Inhaltsverzeichnis DATEN TRANSFORMIEREN... 1 Variablen berechnen... 1 Variablen umcodieren... 3 Daten transformieren Variablen berechnen Mit MAXQDA Stats können Sie Berechnungen mit

Mehr

Inhaltsverzeichnis... 1 Bestandteile einer Formel... 1 Die Funktion Summenprodukt... 4

Inhaltsverzeichnis... 1 Bestandteile einer Formel... 1 Die Funktion Summenprodukt... 4 Inhaltsverzeichnis Inhaltsverzeichnis... 1 Bestandteile einer Formel... 1 Die Funktion SUMME... 2 Die Funktion AUTOSUMME... 2 Die Funktion SUMMEWENN... 2 Die Funktion SUMMEWENNS... 3 Die Funktion Summenprodukt...

Mehr

Vorlesung Diskrete Strukturen Die natürlichen Zahlen

Vorlesung Diskrete Strukturen Die natürlichen Zahlen Vorlesung Diskrete Strukturen Die natürlichen Zahlen Bernhard Ganter WS 2009/10 Alles ist Zahl? Wenn in der modernen Mathematik alles auf Mengen aufgebaut ist, woher kommen dann die Zahlen? Sind Zahlen

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele. 1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Einführende Beispiele 2. Algorithmen Täglich werden Verarbeitungsvorschriften

Mehr

Einführung. 1 Vektoren

Einführung. 1 Vektoren Einführung Die Vektorgeometrie beschreibt geometrische Sachverhalte in einer algebraischen Sprache. Sie gibt uns ein mathematisches Hilfsmittel in die Hand, mit welchem wir Geometrie nicht nur konstruktiv

Mehr

Algorithmen zur Division

Algorithmen zur Division Algorithmen zur Division Umkehrung der Multiplikation: Berechnung von q = a / b durch wiederholte bedingte Subtraktionen und Schiebeoperationen in jedem Schritt wird Divisor b testweise vom aktuellen Rest

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Sascha Böhme, Lars Noschinski Sommersemester 2011 Lösungsblatt 9 25. Juli 2011 Einführung in die Theoretische Informatik

Mehr

Kapitel. Platzhalter. Was sind Platzhalter?

Kapitel. Platzhalter. Was sind Platzhalter? Kapitel 3 Was sind? sind ganz wichtige Elemente bei der Programmierung. Alle Programme, die du schon kennst (wie beispielsweise die Textverarbeitung WORD oder ein Programm zum Verschicken von E-Mails),

Mehr

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt Semester ARBEITSBLATT 11 GLEICHUNGEN UND ÄQUIVALENZUMFORMUNGEN

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt Semester ARBEITSBLATT 11 GLEICHUNGEN UND ÄQUIVALENZUMFORMUNGEN ARBEITSBLATT 11 GLEICHUNGEN UND ÄQUIVALENZUMFORMUNGEN Mathematische Gleichungen ergeben sich normalerweise aus einem textlichen Problem heraus. Hier folgt nun ein zugegebenermaßen etwas künstliches Problem:

Mehr

Übung Praktische Informatik II

Übung Praktische Informatik II Übung Praktische Informatik II FSS 2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 06.03.09 2-1 Heutige große Übung Allgemeines

Mehr

Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen

Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen Dokumentation zum Softwarepraktikum Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen Bearbeitet von: Sabine Böhm Florian Häberlein Betreuer: Dr. Axel Kohnert Dipl.-math. Sascha

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

Mathematik für Naturwissenschaftler II SS 2010

Mathematik für Naturwissenschaftler II SS 2010 Mathematik für Naturwissenschaftler II SS 2010 Lektion 12 8. Juni 2010 Kapitel 10. Lineare Gleichungssysteme (Fortsetzung) Umformung auf obere Dreiecksgestalt Determinantenberechnung mit dem Gauß-Verfahren

Mehr

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen 3 Zahlendarstellung - Zahlensysteme - b-adische Darstellung natürlicher Zahlen - Komplementbildung - Darstellung ganzer und reeller Zahlen Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen......

Mehr

Entropie. Um der Begriff der Entropie zu erläutern brauchen wir erst mal einige Definitionen, z.b.

Entropie. Um der Begriff der Entropie zu erläutern brauchen wir erst mal einige Definitionen, z.b. Entropie Grundlegend für das Verständnis des Begriffes der Komprimierung ist der Begriff der Entropie. In der Physik ist die Entropie ein Maß für die Unordnung eines Systems. In der Informationstheorie

Mehr

Anleitung Währungsrechner

Anleitung Währungsrechner Anleitung mit einem ATmega8 Board (halveddisk ) Autor: Robert Lisec Datum: 2.7.2007 Inhaltsverzeichnis 1 Allgemein...2 1.1 Bedienelemente...2 1.2 Anzeige und Bediensymbole...2 2 Funktionsbeschreibung...3

Mehr

1 Zahlentheorie. 1.1 Kongruenzen

1 Zahlentheorie. 1.1 Kongruenzen 3 Zahlentheorie. Kongruenzen Der letzte Abschnitt zeigte, daß es sinnvoll ist, mit großen Zahlen möglichst einfach rechnen zu können. Oft kommt es nicht darauf, an eine Zahl im Detail zu kennen, sondern

Mehr

Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten)

Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten) Institut für Angewandte Informatik und Formale Beschreibungsverfahren 15.02.2010 Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten) Name: Vorname: Matr.-Nr.: Semester: (WS 2009/10)

Mehr

Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte

Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte Fachhochschule Wedel Seminararbeit Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte Sven Reinck 7. Januar 2007 Inhaltsverzeichnis Inhaltsverzeichnis Motivation 2 Wörterbuch 2.

Mehr

2 Zahlen und Zahlensysteme

2 Zahlen und Zahlensysteme 2 ZAHLEN UND ZAHLENSYSTEME 10 2 Zahlen und Zahlensysteme In diesem Kapitel definieren wir zunächst einige wichtige Zahlenmengen und führen dann Strukturen ein, z. B. mittels Operationen wie Addition und

Mehr

1 Grundlagen. 1.1 Erste Grundbegriffe 1.2 Kryptographische Systeme 1.3 Informationstheoretische Grundlagen

1 Grundlagen. 1.1 Erste Grundbegriffe 1.2 Kryptographische Systeme 1.3 Informationstheoretische Grundlagen 1 Grundlagen 1.1 Erste Grundbegriffe 1.2 Kryptographische Systeme 1.3 Informationstheoretische Grundlagen Die Überlegungen dieses Kapitels basieren auf der Informationstheorie von Shannon. Er beschäftigte

Mehr

HM I Tutorium 1. Lucas Kunz. 27. Oktober 2016

HM I Tutorium 1. Lucas Kunz. 27. Oktober 2016 HM I Tutorium 1 Lucas Kunz 27. Oktober 2016 Inhaltsverzeichnis 1 Theorie 2 1.1 Logische Verknüpfungen............................ 2 1.2 Quantoren.................................... 3 1.3 Mengen und ihre

Mehr

Multiplikation langer Zahlen

Multiplikation langer Zahlen Multiplikation langer Zahlen Aljoscha Rudawski 20.5.2017 Inhaltsverzeichnis 1 Einleitung 1 2 Multiplikation nach Lehrbuch 1 2.1 Addition langer Zahlen............................. 2 2.2 Multiplikation

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Arithmetische und bitweise Operatoren im Binärsystem Prof. Dr. Nikolaus Wulff Operationen mit Binärzahlen Beim Rechnen mit Binärzahlen gibt es die ganz normalen arithmetischen

Mehr

Mathematik für Biologen mathematische Ergänzungen und Beispiele Teil I

Mathematik für Biologen mathematische Ergänzungen und Beispiele Teil I Mathematik für Biologen mathematische Ergänzungen und Beispiele Teil I 1. Mengen und Abbildungen In der Mathematik beschäftigt man sich immer -direkt oder indirekt- mit Mengen. Wir benötigen den Mengenbegriff

Mehr

Polynome. Analysis 1 für Informatik

Polynome. Analysis 1 für Informatik Gunter Ochs Analysis 1 für Informatik Polynome sind reelle Funktionen, die sich ausschlieÿlich mit den Rechenoperation Addition, Subtraktion und Multiplikation berechnen lassen. Die allgemeine Funktionsgleichung

Mehr

5. Übungsblatt zu Algorithmen I im SoSe 2016

5. Übungsblatt zu Algorithmen I im SoSe 2016 Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Dennis Hofheinz Lukas Barth, Lisa Kohl 5. Übungsblatt zu Algorithmen I im SoSe 2016 https://crypto.iti.kit.edu/index.php?id=algo-sose16

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016) Kostenmodell Daniel Graf, Tobias Pröger 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016) Erklärung: Diese Mitschrift ist als Ergänzung zur Vorlesung gedacht. Wir erheben keinen Anspruch

Mehr

3. Übungsblatt zu Algorithmen I im SoSe 2017

3. Übungsblatt zu Algorithmen I im SoSe 2017 Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799

Mehr

Perlen der Informatik I Wintersemester 2012 Aufgabenblatt 7

Perlen der Informatik I Wintersemester 2012 Aufgabenblatt 7 Technische Universität München WS 2012 Institut für Informatik Prof. Dr. H.-J. Bungartz Prof. Dr. T. Huckle Prof. Dr. M. Bader Kristof Unterweger Perlen der Informatik I Wintersemester 2012 Aufgabenblatt

Mehr

Studienmaterial Einführung in das Rechnen mit Resten

Studienmaterial Einführung in das Rechnen mit Resten Studienmaterial Einführung in das Rechnen mit Resten H.-G. Gräbe, Institut für Informatik, http://www.informatik.uni-leipzig.de/~graebe 12. April 2000 Die folgenden Ausführungen sind aus Arbeitsmaterialien

Mehr

Anleitung zum Java - Applet

Anleitung zum Java - Applet Anleitung zum Java - Applet Stetige Verteilungen Visualisierung von Wahrscheinlichkeit und Zufallsstreubereich bearbeitet von: WS 2004 / 2005 E/TI 7 betreut von: Prof. Dr. Wilhelm Kleppmann Inhaltsverzeichnis

Mehr

Amortisierte Analysen

Amortisierte Analysen Amortisierte Analysen 26. Mai 2016 1 Einleitung Es gibt viele Datenstrukturen, bei deren Komplexitätsanalyse das Problem auftaucht, dass die Ausführung mancher Operationen Einfluss auf die Komplexität

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Python Modul 1 Variablen und Datentypen Selbstständiger Teil Inhaltsverzeichnis 1 Überblick 3 2 Teil A: Geldautomat 3 2.1 Einführung.................................. 3 2.2 Aufgabenstellung...............................

Mehr

Technische Informatik - Eine Einführung

Technische Informatik - Eine Einführung Martin-Luther-Universität Halle-Wittenberg Fachbereich Mathematik und Informatik Lehrstuhl für Technische Informatik Prof. P. Molitor Ausgabe: 2005-02-21 Abgabe: 2005-02-21 Technische Informatik - Eine

Mehr

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS) 5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS) Sommersemester 2009 Dr. Carsten Sinz, Universität Karlsruhe Datenstruktur BDD 2 1986 von R. Bryant vorgeschlagen zur Darstellung von aussagenlogischen Formeln (genauer:

Mehr

Vorkurs: Mathematik für Informatiker

Vorkurs: Mathematik für Informatiker Vorkurs: Mathematik für Informatiker Teil 4 Wintersemester 2017/18 Steven Köhler mathe@stevenkoehler.de mathe.stevenkoehler.de 2 c 2017 Steven Köhler Wintersemester 2017/18 Inhaltsverzeichnis Teil 1 Teil

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Informationsmenge. Maßeinheit: 1 Bit. 1 Byte. Umrechnungen: Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit

Informationsmenge. Maßeinheit: 1 Bit. 1 Byte. Umrechnungen: Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit Informationsmenge Maßeinheit: 1 Bit Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit 1 Byte Zusammenfassung von 8 Bit, kleinste Speichereinheit im Computer, liefert

Mehr

Elliptic Curve Cryptography

Elliptic Curve Cryptography Elliptic Curve Cryptography Institut für Informatik Humboldt-Universität zu Berlin 10. November 2013 ECC 1 Aufbau 1 Asymmetrische Verschlüsselung im Allgemeinen 2 Elliptische Kurven über den reellen Zahlen

Mehr

Der RSA-Algorithmus. 2. Anschließend ist n = p q und ϕ (n) = (p 1) (q 1) zu berechnen.

Der RSA-Algorithmus. 2. Anschließend ist n = p q und ϕ (n) = (p 1) (q 1) zu berechnen. Kapitel 4 Der RSA-Algorithmus Der RSA-Algorithmus ist das heute bekannteste Verfahren aus der Familie der Public-Key-Kryptosysteme. Es wurde 1978 der Öffentlichkeit vorgestellt und gilt bis heute als der

Mehr

Grundlagen der Informationstheorie. Hanna Rademaker und Fynn Feldpausch

Grundlagen der Informationstheorie. Hanna Rademaker und Fynn Feldpausch Grundlagen der Informationstheorie Hanna Rademaker und Fynn Feldpausch . Thema Informationstheorie geht zurück auf Claude Shannon The Mathematical Theory of Communication beschäftigt sich mit Information

Mehr

Dezimaldarstellung ganzer Zahlen (Division mit Rest) 1 Division mit Rest in der Hochschule

Dezimaldarstellung ganzer Zahlen (Division mit Rest) 1 Division mit Rest in der Hochschule Berufsfeldbezogenes Fachseminar - Zahlentheorie Lisa Laudan Prof. Dr. Jürg Kramer Wintersemester 2014/2015 Dezimaldarstellung ganzer Zahlen (Division mit Rest) 1 Division mit Rest in der Hochschule 1.1

Mehr

Parallele und funktionale Programmierung Wintersemester 2016/ Übung Abgabe bis , 16:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2016/ Übung Abgabe bis , 16:00 Uhr 4. Übung Abgabe bis 25.11.2016, 16:00 Uhr Aufgabe 4.1: Verklemmungsbedingungen a) Welche drei Bedingungen müssen gelten, damit es zu einer Verklemmung in einem parallelen System kommen kann? b) Nach welcher

Mehr

Greedy Algorithms - Gierige Algorithmen

Greedy Algorithms - Gierige Algorithmen Greedy Algorithms - Gierige Algorithmen Marius Burfey 23. Juni 2009 Inhaltsverzeichnis 1 Greedy Algorithms 1 2 Interval Scheduling - Ablaufplanung 2 2.1 Problembeschreibung....................... 2 2.2

Mehr

Primzahlen Primfaktorzerlegung :

Primzahlen Primfaktorzerlegung : Primzahlen Primfaktorzerlegung : An dieser Stelle werde ich die meisten Zusammenhänge aufzeigen, welche mir im Laufe der Zeit bewusst wurden. Bemerkung: Da ich das Wurzelzeichen leider nicht korrekt angezeigt

Mehr

Kontrollstrukturen -- Schleifen und Wiederholungen

Kontrollstrukturen -- Schleifen und Wiederholungen Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

GTI. Hannes Diener. 18. Juni. ENC B-0123,

GTI. Hannes Diener. 18. Juni. ENC B-0123, GTI Hannes Diener ENC B-0123, diener@math.uni-siegen.de 18. Juni 1 / 32 Als Literatur zu diesem Thema empfiehlt sich das Buch Theoretische Informatik kurzgefasst von Uwe Schöning (mittlerweile in der 5.

Mehr

Herleitung der Formel für die Krümmung von Funktionsgraphen

Herleitung der Formel für die Krümmung von Funktionsgraphen Herleitung der Formel für die Krümmung von Funktionsgraphen mit Hilfe der Beispiele f(x) = x 2 und f(x) = x 4 Jens Weitendorf Kurzfassung des Inhalts: In dem Artikel wird in einer kurzen Einheit dargestellt,

Mehr

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum: Berufsakademie Stuttgart / Außenstelle Horb Studienbereich Technik Studiengang Informationstechnik Kurs IT2006, 2.Semester Dozent: Olaf Herden Student: Alexander Carls Matrikelnummer: 166270 Aufgabe: Beschreibung

Mehr

2 - Konvergenz und Limes

2 - Konvergenz und Limes Kapitel 2 - Folgen Reihen Seite 1 2 - Konvergenz Limes Definition 2.1 (Folgenkonvergenz) Eine Folge komplexer Zahlen heißt konvergent gegen, wenn es zu jeder positiven Zahl ein gibt, so dass gilt: Die

Mehr

Intervallaustauschtransformationen, Flüsse und das Lemma von Masur

Intervallaustauschtransformationen, Flüsse und das Lemma von Masur Intervallaustauschtransformationen, Flüsse und das Lemma von Masur Gregor Bethlen 1 Intervallaustauschtransformationen Stets sei in diesem Abschnitt I := [a, b] ein Intervall und a = a 0 < a 1

Mehr

Einleitung. Kapitel 1

Einleitung. Kapitel 1 Kapitel 1 Einleitung In diesem Abschnitt geben wir einen kurzen Überblick über den Inhalt der Vorlesung. Wir werden kurz die wesentlichen Probleme erläutern, die wir ansprechen wollen. Wir werden auch

Mehr

Folge 13 - Quicksort

Folge 13 - Quicksort Für Abiturienten Folge 13 - Quicksort 13.1 Grundprinzip des Quicksort Schritt 1 Gegeben ist ein unsortierter Array von ganzen Zahlen. Ein Element des Arrays wird nun besonders behandelt, es wird nämlich

Mehr

1 Modulare Arithmetik

1 Modulare Arithmetik $Id: modul.tex,v 1.10 2012/04/12 12:24:19 hk Exp $ 1 Modulare Arithmetik 1.2 Euklidischer Algorithmus Am Ende der letzten Sitzung hatten wir den größten gemeinsamen Teiler zweier ganzer Zahlen a und b

Mehr

Kapitel 9: Informationstheorie. 2. Entropie

Kapitel 9: Informationstheorie. 2. Entropie ZHAW, NT, FS2008, Rumc, Kapitel 9: 2-1 Kapitel 9: Informationstheorie 2. Entropie Inhaltsverzeichnis 2.1. INFORATIONSQUELLEN...2 2.2. INFORATIONSGEHALT...3 2.3. INIALE ANZAHL BINÄRE FRAGEN...5 2.4. ENTROPIE

Mehr

Dualzahlen

Dualzahlen Dualzahlen Ein Schüler soll sich eine Zahl zwischen und 6 denken. Nun soll der Schüler seinen Zahl in folgenden Tabellen suchen und die Nummer der Tabelle nennen in welcher sich seine Zahl befindet. 7

Mehr

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 2 Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 2 Woche: Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 24/ 44 Zwei Beispiele a 0

Mehr

Mathematische Werkzeuge für Computergrafik 2016/17. Gleitkommzahlen

Mathematische Werkzeuge für Computergrafik 2016/17. Gleitkommzahlen Mathematische Werkzeuge für Computergrafik 2016/17 Gleitkommzahlen 1 Grundlagen 1 Da im Computer nur endliche Ressourcen zur Verfügung stehen, können reelle Zahlen in vielen Fällen nicht exakt dargestellt

Mehr

There are only 10 types of people in the world: those who understand binary, and those who don't

There are only 10 types of people in the world: those who understand binary, and those who don't Modul Zahlensysteme In der Digitaltechnik haben wir es mit Signalen zu tun, die zwei Zustände annehmen können: Spannung / keine Spannung oder 1/ oder 5V / V oder beliebige andere Zustände. In diesem Modul

Mehr

Kompressionsverfahren

Kompressionsverfahren Kompressionsverfahren Quelle: Steinmetz, Ralf: Multimedia-Technologie: Einführung und Grundlagen, Springer, Verlag Verlustlose Kompressionsalgorithmen RLC Huffman Adaptive Huffman Kodierung Arithmetische

Mehr

Einführung in die Informatik Turing Machines

Einführung in die Informatik Turing Machines Einführung in die Informatik Turing Machines Eine abstrakte Maschine zur Präzisierung des Algorithmenbegriffs Wolfram Burgard Cyrill Stachniss 1/14 Motivation und Einleitung Bisher haben wir verschiedene

Mehr