Algorithmen und Programmierung III 

         WS 2002/2003                   Übung 8                          H. Schweppe
                                        

        Ausgabe: 5.12.2002
        Abgabe: 17.12.2002  15.00

 

Aufgabe 8.1 (  8 P)  

Das folgende Alphabet und die entsprechenden Gewichte wurden zur effizienten Kodierung der Popmusik der sechziger Jahre entwickelt: 

A              2                                NA           16
YEAH      2                                OH             3
GET         2                                LA           10
JOB         1                                SHA         1

Konstruieren Sie den Huffman Kodebaum, und kodieren Sie die folgende Lyrik der sechziger:

Get a job
Sha na na na na na na na
Get a job
Oh na na na na na na na
Yeah la la la la la la
Oh yeah

In welchem Verhältnis steht die Anzahl benötigter Bits zu der Anzahl, die man im 8-Bit-ASCII Code braucht? 
Es bleibt Ihnen überlassen, ob Sie Programme zur Konstruktion des Huffman Baums (s. VL) und zur Kodierung schreiben oder nur auf Papier arbeiten. 

Aufgabe 8.2 ( 8  P)  

Gesucht ist ein Algorithmus, der den "kleinsten gemeinsamen Vorgänger" von zwei Knoten in einem Binärbaum bestimmt. Der kleinste gemeinsame Vorgänger von Knoten a und b ist  a , wenn b Nachfolger von a ist ,  b, wenn a Nachfolger von b sonst der Knoten x  maximaler Tiefe, der Vorgänger sowohl von a als auch von b ist. 
(Trockenübung).

Aufgabe 8.3 ( 8  P)  

Durch Traversierung eines binären Baum entstehen  eindeutige Linearisierungen der Knotenmenge  (Preorder, Inorder, Postorder). 
Umgekehrt gehört z.B. zu einer Preorder-Knotenliste nicht eindeutig ein binärer Baum. 
Dagegen lässt sich aus der Postorder und Inorder-Liste der Binärbaum eindeutig rekonstruieren. Entwickeln Sie einen entsprechenden Algorithmus und implementieren Sie ihn in Haskell. 
Zeigen Sie mit einem Gegenbeispiel. dass die Rekonstruktion nicht möglich ist, wenn man von Postorder- und Preorder-Listen ausgeht. 

Aufgabe 8.4 ( 8  P)  

Schreiben Sie ein Programm, das einen (nicht zu großen) Binärbaum mit der Wurzel oben ausgibt. Z.B. so: 

                                                                10

                                8                                                                    20

                7                            9                                     14                                22

 

Freiwillig: Ausgabe mit Wurzel unten (5 Bonuspunkte). 


32 Punkte