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