Codes & Kryptographie Seminar – Sommersemester 2004 Universität Paderborn Längenbeschränkte Huffman-Kodierung Length-Limited Huffman Coding (LLHC) Veit Wittenberg Inhalt Einführung Das Münzsammler Problem Der Package Merge Algorithmus Reduktion Ausblick 2/14 Einführung Huffman-Kodierung Ausgangssituation: Binäre Kodierung von Σ = {a1, ..., an}; ai tritt mit Häufigkeit wi auf Huffman-Kodierungs-Problem: Finde einen präfixfreien binären Code, so dass die gewichtete n Länge der kodierten Zeichenkette ( ∑ wi li) minimal ist. i =1 Übertragung auf Binär-Bäume: Geg.: Eine Liste von Gewichten w1, ..., wn mit wi ≥ wi+1. Finde vollständigen binären Baum T mit n Blättern, n dessen WPL(T)= ∑ wi li (li Tiefe des i-ten Blattes) minimal ist. i =1 WPL: Weighted Path Length 3/14 Einführung Problem der Huffman-Kodierung (Beispiel) wi a1 0,4 a2 0,25 a3 0,15 a4 0,1 a5 0,08 a6 0,02 ci wi ci wi 1 01 001 0001 00001 00000 0,4 1 01 001 0000 0001 0,4 0,25 0,15 0,1 0,1 1 0,25 01 0,2 000 0,15 001 0 0 0 0 0 a6 1 ci wi ci 0,4 1 0,35 00 0,25 01 wi 0,6 0,4 ci 1 0 1 a1 1 a2 1 a3 1 a4 a5 4/14 Einführung Längenbeschränkte Huffman-Kodierung Beschränkte Länge: Finde einen Huffman-Code, so dass kein Codewort aus mehr als L Symbolen besteht. Übertragung auf binäre Bäume: Die Tiefe des Baumes T darf nicht L überschreiten. 5/14 Das Münzsammler Problem Formale Definition Eine Instanz (I,X) des Münzsammler Problems der Größe m: (a) I ist eine Menge von m Elementen. Jedem Element wird ein Betrag und ein Gewicht zugeordneten. Jeder Betrag ist eine 2er-Potenz 2e mit e ∈ Z (Prägewert) + Jedes Gewicht ist eine Zahl aus R (Sammlerwert) + (b) X∈ R (Gesamtbetrag) Lösungsmenge: Eine Lösung von (I,X) ist eine Teilmenge S ⊆ I mit einem Gesamtbetrag X. Eine optimale Lösung (Opt_Sol(I,X)) ist eine Lösung mit minimalem Gesamtgewicht. 6/14 Der Package Merge Algorithmus (rekursiv) X ist dyadisch. Für X > 0 wird Minbetrag die kleinste 2er-Potenz von X zugewiesen. Basis: X = 0 Opt_Sol(I,X) = ∅. X > 0 und I = ∅ keine Lösung Rekursion: Sei r der kleinste Betrag aller Elemente aus I: Fall 1: r > Minbetrag. keine Lösung. Fall 2: r = Minbetrag. Sei a ∈ I das Element mit dem kleinsten Gewicht und dem Betrag r. Opt_Sol(I,X) = Opt_Sol(I-{a}, X-r)∪ {a}. Fall 3: r < Minbetrag und es gibt nur ein Element a ∈ I mit dem Betrag r. Opt_Sol(I,X) = Opt_Sol(I-{a}, X) Fall 4: r < Minbetrag und es gibt min. zwei Elemente in I mit dem Betrag r. Seien a, a’ ∈ I mit dem geringsten Gewicht des Betrages r und sei b = a ∪ a’ ein neues Element (Package). b hat den Betrag 2r und das Gewicht = Gewicht(a) + Gewicht(a’). Sei S’ = Opt_Sol(I-{a,a’}∪ {b}, X). b∈ S’ Opt_Sol(I,X) = S’ – {b}∪ {a,a’} sonst Opt_Sol(I,X) = S’. 7/14 Reduktion Definition der Knotenmenge Repräsentation der Knotenmenge eines Binär-Baumes Baum T vollständig mit n ≥ 1 Blättern und Tiefe L ≥ log2 n. Knoten (i,l): i ∈ [1,n] gibt den Index des Knotens an. l ∈ [1,L] entspricht dem Level des Knotens. Knotenmenge(T) = {(i,l) | 1 ≤ l ≤ li}, l li = Tiefe des i-ten Blattes 1 {(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1), 2 (1,2),(2,2),(3,2),(4,2),(5,2),(6,2),(7,2), 3 (3,3),(4,3),(5,3),(6,3),(7,3), 4 (6,4),(7,4)} i 1 2 3 4 5 6 7 8/14 Reduktion Reduktionsschritt LLHC-Problem MünzsammlerProblem a1 1 2 a2 a3 w1 w2 L an wn Reduktion Lösung folgt (l1, l2, ..., ln) li ∈ [1,L] L w1 w2 wn X = n-1 Der Package Merge Algorithmus kann das LLHC-Problem in O(Ln) lösen 9/14 Reduktion Hauptsatz zur Knotenmenge Wenn wi paarweise disjunkt ist (d.h. wi > wi+1 ∀ i), dann ist jede Knotenmenge A mit minimalem Gewicht und mit einem Betrag von n – 1 die Knotenmenge eines Binär-Baumes, der eine optimale Lösung des LLHC-Problems darstellt. 10/14 Reduktion Eigenschaften der Knotenmenge Monotonie Eine Knotenmenge A ist monoton, wenn: (a) ∀ i < n, wenn (i,l) ∈ A, dann ist (i+1,l) ∈ A (b) ∀ l > 1, wenn (i,l) ∈ A, dann ist (i,l–1) ∈ A Betrag und Gewicht Betrag( {(i,l)} ) = 2-l Gewicht( {(i,l)} ) = wi Sei A eine Knotenmenge Betrag(A) = ∑ ∀ai ∈ A Betrag (ai ) Gewicht(A) = ∑ ∀ai ∈ A Gewicht (ai ) Beobachtung: 1. T ist ein Baum Gewicht( Knotenmenge(T) ) = WPL(T) 2. T ist ein Baum mit n Blättern Betrag( Knotenmenge(T) ) = n – 1 11/14 Reduktion Lemmata zur Knotenmenge Lemma 1: Angenommen A ist eine Knotenmenge vom Betrag k(2-l)+r mit k∈ N und 0 < r < 2-l. Dann ∃ eine Menge B ⊆ A mit Betrag(B) = r. Lemma 2: Wenn X < n mit X∈ N, dann ist die Knotenmenge mit Betrag X und minimalem Gewicht monoton. Lemma 3: Wenn l1, ..., ln eine Liste von ganzen Zahlen mit li ∈ [1,L] ist und A die n −l Knotenmenge {(i,l) | 1≤ i≤ n, 1≤ l≤ li} dann gilt Betrag(A) = n − ∑ 2 i . i =1 Lemma 4: Wenn w = (l1, l2, ...) eine monoton wachsende Liste natürlicher Zahlen ist, so dass 2 −l1 + 2 −l2 + ... = 1 gilt, dann ist w die Liste der Blatttiefen eines Binär- Baumes. 12/14 Reduktion Umsetzung im Package Merge Algorithmus Reduktion: ∀ l ∈ [1,L] eine Liste der Knoten mit dem Betrag 2-l mit ((n,l),(n-1,l), ..., (1,l)) initialisieren X = n – 1 setzen Anwenden des Package Merge Algorithmus auf die Menge dieser Knoten Knotenmenge mit dem geringsten Gewicht vom Betrag n – 1 Konstruktion des optimalen Binär-Baumes aus der berechneten Knotenmenge 13/14 Ausblick Der Package Merge Algorithmus angewendet auf das LLHC-Problem hat eine Laufzeit von O(Ln) und einen Speicherplatzbedarf von O(Ln) Es besteht die Möglichkeit den Algorithmus so zu modifizieren, dass der Speicherplatzbedarf linear – O(n) – wird ohne Verschlechterung der Laufzeit 14/14