11. Übung Algorithmen I

Ähnliche Dokumente
INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Dynamische Programmierung. Problemlösungsstrategie der Informatik

9. Übung Algorithmen I

9. Übung Algorithmen I

12. Übung Algorithmen I

Grundlagen: Algorithmen und Datenstrukturen

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

16. All Pairs Shortest Path (ASPS)

Dynamisches Programmieren - Problemstruktur

8. Übung zu Algorithmen I 15. Juni 2016

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Kombinatorische Optimierung

5.4 Das Rucksackproblem

Vorlesung 2 KÜRZESTE WEGE

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Lösungsvorschlag Serie 2 Rekursion

Klausur Informatik B April Teil I: Informatik 3

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Algorithmen und Datenstrukturen

Algorithmen II Vorlesung am

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Algorithmen & Komplexität

Übung zu Drahtlose Kommunikation. 9. Übung

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Übung zu Drahtlose Kommunikation. 7. Übung

15. Elementare Graphalgorithmen

Dynamische Programmierung

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Kurs 1613 Einführung in die imperative Programmierung

Algorithmische Methoden zur Netzwerkanalyse

Algorithmen II Vorlesung am

7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Lösungen zur 1. Klausur. Einführung in Berechenbarkeit, formale Sprachen und Komplexitätstheorie

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

12.4 Traveling Salesman Problem

1.4 Die Ackermannfunktion

2 Lösungen "Peptide de novo Sequencing"

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen 2

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Minimal spannende Bäume

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

Randomisierte Algorithmen

Suchen und Sortieren Sortieren. Heaps

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Gliederung. Algorithmen und Datenstrukturen II. Problem: Längste gemeinsame Teilsequenz. Problem: Längste gemeinsame Teilsequenz

Wie komme ich von hier zum Hauptbahnhof?

Fortgeschrittene Netzwerk- und Graph-Algorithmen

RO-Tutorien 3 / 6 / 12

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

3. Musterlösung. Problem 1: Heapsort

Kürzeste Wege in Graphen. Orte mit Straßenverbindungen. Coma I Rolf Möhring

3. Übung Algorithmen I

CODIERUNGSTHEORIE KURS ZELL AN DER PRAM, FEBRUAR 2005

23. November Betweenness Centrality Closeness Centrality. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 108

Kombinatorische Optimierung

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

Christian Schulz und Johannes Singler

Algorithmen und Datenstrukturen 1 Kapitel 3

ADS: Algorithmen und Datenstrukturen 2

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Hannah Wester Juan Jose Gonzalez

Lineares Programmieren

Algorithmische Bioinformatik

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung

Quadtrees und Meshing

Vorlesung Programmieren

Geradenarrangements und Dualität von Punkten und Geraden

Das Briefträgerproblem

Algorithmische Bioinformatik 1

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Binary Decision Diagrams (Einführung)

11.1 Grundlagen - Denitionen

Kapitel 6: Graphalgorithmen Gliederung

κ(k) k K S Algorithmus zur Bestimmung eines spannenden Baumes mit minimalen Kosten (Kruskal, 1965).

Erzeugendensystem und Basis

2. Optimierungsprobleme 6

Informatik II, SS 2014

Backtracking mit Heuristiken

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Datenstrukturen & Algorithmen

Praktikum Algorithmen-Entwurf (Teil 7)

Grundlagen der Programmierung

13. Binäre Suchbäume

Dynamische Programmierung

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III

KAPITEL 6 GANZZAHLIGE OPTIMIERUNG UND VOLLSTÄNDIG UNIMODULARE MATRIZEN

Vorlesung 4 BETWEENNESS CENTRALITY

11. Übung zu Algorithmen I 6. Juli 2016

Transkript:

Timo Bingmann, Christian Schulz INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS KIT Timo Universität Bingmann, des LandesChristian Baden-Württemberg Schulz und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik

Organisatorisches Klausuranmeldung bis einschließlich.7.3 Erlaubte Hilfsmittel für die Klausur: blauer oder schwarzer Stift DIN-A4 Blatt (beidseitig) handbeschrieben für die Identifikation: Studentenausweis Timo Bingmann, Christian Schulz

Inhalt Lineare Programmierung Dynamische Programmierung Faltungscodes und der Viterbi-Algorithmus 3 Timo Bingmann, Christian Schulz

Lineare Programmierung. Teil 4 Timo Bingmann, Christian Schulz

Beispiel: Süßwarenfabrik Matrixform maximiere unter 50 x A + 70 x B x A kg x B 70 kg 0,8 x A + 0,7 x B kg 0,06 x A + 0, x B 5 kg x 0 oder: ( ) t 0 kg 50 max x 70 x R, x 0, 0 0,8 0,7 x 70 kg kg 0,06 0, 5 kg (Eine) allgemeine Matrixform: max{c t x x R n, x 0, Ax b} mit A R m n, b R m, c R n. 5 Timo Bingmann, Christian Schulz

Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} 6 Timo Bingmann, Christian Schulz

Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 6 Timo Bingmann, Christian Schulz

Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. s 0 3 max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 6 Timo Bingmann, Christian Schulz

Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. 3 3 3 3 s 0 3 max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 6 Timo Bingmann, Christian Schulz

Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c : E R +. { } min c(e)x e x R E, x 0,... e E 7 Timo Bingmann, Christian Schulz

Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, 8 Timo Bingmann, Christian Schulz

Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E 8 Timo Bingmann, Christian Schulz

Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E A V A : e E(G[A]) x e A wobei A über alle nicht-leere Knotenteilmengen läuft und E(G[A]) alle Kanten mit Endknoten in A sind. 8 Timo Bingmann, Christian Schulz

Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E A V A : e E(G[A]) x e A wobei A über alle nicht-leere Knotenteilmengen läuft und E(G[A]) alle Kanten mit Endknoten in A sind. 8 Timo Bingmann, Christian Schulz

Dynamisches Programmieren 9 Timo Bingmann, Christian Schulz

Algorithmus Entwurfsprinzip: dynamische Programmierung Aufbau von Lösungen aus Bausteinen Optimalitätsprinzip: Optimale Lösungen bestehen aus optimalen Lösungen für Teilprobleme Mehrere optimale Lösungen es ist egal welche benutzt wird Timo Bingmann, Christian Schulz

Fibonacci-Zahlen Beispiel: f (n) = f (n ) + f (n ), f () =, f (0) = Rekursiver Ansatz? : procedure fib(n N) : if n {0, } then return 3: else return fib(n ) + fib(n ) 4: return Problem: Mehrfachberechnung von Lösungen f (5) = f (4) + f (3) f (5) = f (3) + f () + f () + f () Timo Bingmann, Christian Schulz

Fibonacci-Zahlen Beispiel: f (n) = f (n ) + f (n ), f () =, f (0) = Baue f (n) aus Teillösungen Bottom-Up zusammen Merke Zwischenlösungen (z.b. in Tabelle) Function fib(n of N) : f := Array <,, 0,..., 0 > for j := 3 to n do f [j] = f [j ] + f [j ] return f [n] // array of size n Timo Bingmann, Christian Schulz

Largest One Submatrix Problem: Gegeben eine m n Matrix über {0, }, finde die größte quadratische Teilmatrix, die nur aus en besteht. 0 0 0 0 0 0 0 0 0 3 Timo Bingmann, Christian Schulz

Largest One Submatrix Problem: Gegeben eine m n Matrix über {0, }, finde die größte quadratische Teilmatrix, die nur aus en besteht. 0 0 0 0 0 0 0 0 0 3 Timo Bingmann, Christian Schulz

Largest One Submatrix Teilproblemstruktur: Verwende Lösungen der Teilmatrizen und baue so Gesamtlösung auf Matrix M {0, } m n Zusätzliche Matrix S N m n initialisiert mit 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + 4 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 3 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen S fertig 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 3 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen S fertig 5 Timo Bingmann, Christian Schulz

Largest One Submatrix M = 0 0 0 0 0 0 0 0 0 S = 0 0 0 0 0 0 3 0 0 0 M[i][j] == 0 :S[i][j] = 0 M[i][j] == :S[i][j] = min(s[i][j ], S[i ][j], S[i ][j ]) + initialisiere S: S[0][ ] := M[0][ ], S[ ][0] := M[ ][0] Lösung iterativ durch bekannte Teillösungen aufbauen S fertig 5 Timo Bingmann, Christian Schulz

Largest One Submatrix Code Function largest_square_submatrix(m[m, n] of Matrix) : N S :=Matrix // solution matrix S[0][ ] := M[0][ ] // one for loop S[ ][0] := M[ ][0] // one for loop for i := to m do for j := to n do if M[i][j] == then S[i][j] := min(s[i][j ], S[i ][j], S[i ][j ]) + else S[i][j] := 0 return max i,j S[i][j] // two for loops Komplexität: O(mn) = O(#Matrixelemente) 6 Timo Bingmann, Christian Schulz

Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. Trivialer Algorithmus in O ( n ),, 3, 4,,,, 5, 4 berechne die Summe aller Teilarrays (zwei For-Schleifen) Besser: dynamische Programmierung verwenden O(n) 7 Timo Bingmann, Christian Schulz

Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe.,, 3, 4,,,, 5, 4 Besser: dynamische Programmierung verwenden O(n) Algorithmus: scanne einmal über das Array: Function largest_cont_subseq(a Array of N) : Z overall_max=a[0] : N; cur_max=a[0] : N; for i := to size(a) do cur_max = max(a[i], cur_max + A[i]); overall_max = max(overall_max, cur_max); return overall_max 7 Timo Bingmann, Christian Schulz

Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. original: -,, -3, 4, -,,, -5, 4 cur_max: -,, -, 4, 3, 5, 6,, 5 8 Timo Bingmann, Christian Schulz

Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. Summe=Max! Brute-Force: alle Teilmatrizen ( ausrechnen pro Teilmatrix O n ) Zeit ( O n 4) Teilmatrizen 3 insgesamt O (n 6) 9 Timo Bingmann, Christian Schulz

Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. Summe=Max! Summe S_i,j Besser: Dinge vorberechnen errechne Matrix S: S i,j = Elemente links-oberhalb von M i,j einschließlich der Zeile i und Spalte j 0 Timo Bingmann, Christian Schulz

Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. A B Summe=Max! C D E Besser: Dinge vorberechnen errechne Matrix S: S i,j = Elemente links-oberhalb von M i,j einschließlich der Zeile i und Spalte j pro Teilmatrix O() Zeit, insgesamt O (n 4) 0 Timo Bingmann, Christian Schulz

Maximum Submatrix Problem Summe=Max! Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j Timo Bingmann, Christian Schulz

Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j probiere alle Zeilenpaare i < j pro Zeilenpaar berechene Array A[,..., n] A[K ] = j l=i M l,k = S j,k S i,k Timo Bingmann, Christian Schulz

Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j probiere alle Zeilenpaare i < j pro Zeilenpaar berechene Array A[,..., n] A[K ] = j l=i M l,k = S j,k S i,k 3 auf A Maximum Subarray Problem lösen Timo Bingmann, Christian Schulz

Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern O ( n ) Zeit probiere alle Zeilenpaare i < j O ( n ) viele Zeilenpaare pro Zeilenpaar O(n) 3 insgesamt O (n 3) Timo Bingmann, Christian Schulz

Faltungscodes und der Viterbi-Algorithmus 80. WLAN Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister I s Output A Output B I s Input I s s s I s Output C 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 = Output A = Output B 0 Input 0 0 0 0 = Output C Input: Output: 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 = Output C Input: Output: 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister = Output A 0 = Output B 0 Input 0 0 0 = Output C Input: Output: 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 = Output A = Output B Input 0 0 0 = Output C Input: Output: 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 0 = Output A = Output B 0 Input 0 0 0 = Output C Input: 0 Output: 0 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 0 = Output A = Output B 0 0 Input 0 0 0 0 = Output C Input: Output: 0 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 Input: Output: 0 0 = Output C Redundanz in Übertragung ermöglicht Fehlerkorrektur! 3 Timo Bingmann, Christian Schulz

Ein Faltungscode als Schieberegister 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 Das 80.a Schieberegister Input: Output: 0 0 = Output C Output A Redundanz Input s in Übertragung s s ermöglicht 3 s 4 s Fehlerkorrektur! 5 s 6 3 Timo Bingmann, Christian Schulz Output B

Ein Faltungscode als Mealy-Automat 0/0 0/ / / 0/ 0/0 / / Legende: Kantenbeschriftung ist Input/Output. 4 Timo Bingmann, Christian Schulz

Ein Faltungscode als Trellis t 0 0 t 0 t 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 5 Timo Bingmann, Christian Schulz

Ein Faltungscode als Trellis t 0 0 t 0 t 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 5 Timo Bingmann, Christian Schulz

Ein Faltungscode als Trellis t 0 0 t 0 t 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 Aber, wie dekodiert man 0? 5 Timo Bingmann, Christian Schulz

Faltungscode: Fehlerkorrektur? Dekodiere: 0? Ziel: Finde die Eingabe, deren Kodierung die geringste Hamming-Distanz (Einzelbit-Fehler) zum gelesenen Codewort hat. 6 Timo Bingmann, Christian Schulz

Faltungscode: Fehlerkorrektur? Dekodiere: 0? Ziel: Finde die Eingabe, deren Kodierung die geringste Hamming-Distanz (Einzelbit-Fehler) zum gelesenen Codewort hat. Erster Algorithmus: Enumeriere alle gültige Codewörter, berechne Hamming-Distanz und finde so die wahrscheinlichste Eingabe (maximum likelyhood detection). 6 Timo Bingmann, Christian Schulz

Dekodiere: 0 Eingabe = Codewort Distanz = 0 0 0 0 0 0 = 0 0 0 = 0 0 0 8 = 0 0 0 8 = 0 0 0 = 0 = 0 0 0 8 = 0 0 = 0 0 0 = = 0 8 = 0 8 = 0 0 0 = 0 = 0 0 4 = 0 8 7 Timo Bingmann, Christian Schulz

Dekodiere: 0 Eingabe = Codewort Distanz = 0 0 0 0 0 0 = 0 0 0 = 0 0 0 8 = 0 0 0 8 = 0 0 0 = 0 = 0 0 0 8 = 0 0 = 0 0 0 = = 0 8 = 0 8 = 0 0 0 = 0 = 0 0 4 = 0 8 7 Timo Bingmann, Christian Schulz

Dekodiere im Trellis Dekodiere: 0? t 0 0 t 0 t 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 8 Timo Bingmann, Christian Schulz

Dekodiere im Trellis Dekodiere: 0? t 0 t t t 3 t 4 3 t 5 t 6 3 0 0 3 9 Timo Bingmann, Christian Schulz

Dekodiere im Trellis Dekodiere: 0? t 0 t 0 t 3 t 3 5 t 4 6 3 t 5 3 t 6 4 3 5 7 3 0 4 4 7 Verwende Bellman-Ford: 0 3 5 9 Timo Bingmann, Christian Schulz

Dekodiere im Trellis Dekodiere: 0? t 0 t 0 t 3 t 3 5 t 4 6 3 t 5 3 t 6 4 3 5 7 3 0 4 4 7 0 3 5 Verwende Bellman-Ford: kürzester Pfad entspricht. 9 Timo Bingmann, Christian Schulz

Der Viterbi-Algorithmus (Pseudocode) t k w[k ][] w[k ][] w[k ][] w[k ][] w[k][z] = t k w[k][] w[k][] w[k][] w[k][] min v Vorgänger(z) Procedure Viterbi(A : Folge, G : Schichtengraph) w[0][z] := 0, pre[0][z] := nil z Zustände(G) foreach k =,..., #Schichten(G) foreach z Zustände(G) Wähle unter allen v Vorgängern(z) denjenigen mit besten Kosten unter w[k ][v], Kante(v, z) und A[k] aus. Setze w[k][z] und pre[k][z]. wobei im Beispiel Zustände(G) = {,,, }, Vorgänger(z) die Vorgängerzustände von z sind und w[k ][v] + Hamming(A[k], Kante(v, z)) 30 Timo Bingmann, Christian Schulz

Der Viterbi-Algorithmus Schichten-Graph erlaubt effiziente Implementierung des kürzesten Pfad Algorithmus mit nur einer Variable pro Ebenen im Trellis oder Knoten im Automaten. Der Viterbi-Algorithmus funktioniert auch in allgemeineren Fällen: Wahrscheinlichkeiten statt Distanzen (Logarithmierungstrick) Beste Pfade in Hidden Markov Models (siehe Automaten). 3 Timo Bingmann, Christian Schulz

Der Viterbi-Algorithmus Schichten-Graph erlaubt effiziente Implementierung des kürzesten Pfad Algorithmus mit nur einer Variable pro Ebenen im Trellis oder Knoten im Automaten. Der Viterbi-Algorithmus funktioniert auch in allgemeineren Fällen: Wahrscheinlichkeiten statt Distanzen (Logarithmierungstrick) Beste Pfade in Hidden Markov Models (siehe Automaten). Weitere wichtige Optimierung: Da der Faltungscode im Beispiel nur vier Zustände hat und jeder Knoten genau zwei Ausgangskanten hat, gibt von jedem Knoten in Schicht k zu jedem Knoten in Schicht k + 3 mehr als ein Pfad. Bei der Berechnung von Schicht k + 3 steht der kürzeste Teilpfad von Schicht 0 bis k bereits fest. Die entsprechenden Bits können schon ausgegeben werden. 3 Timo Bingmann, Christian Schulz