Längenbeschränkte Huffman-Kodierung Length

Werbung
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
Herunterladen