Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Aufgabenstellung Aufgabe 1 Eine effiziente Methode zur Komprimierung von Daten bietet die Huffman-Codierung. a) Erzeugen Sie einen Huffman-Baum für den Beispieltext „TSCHECHISCHE CHEMIKER CHECKEN TECHNISCHE SCHEMATA“ und erläutern Sie Ihr Vorgehen. b) Zur Codierung des Textes „EXPERIMENT“ wurde folgender Huffman-Baum erzeugt: Abbildung 1.1 Nach der Erzeugung des Huffman-Baums soll der Text nun entsprechend codiert werden. Dazu muss der Baum zunächst einmal in einer Datenstruktur implementiert werden. Schüler eines Informatikkurses verwenden dazu für den obigen Baum die folgende Adjazenzmatrix: X P R I M N T E K1 X 0 P 1 K2 R 0 I 1 K3 M 0 N 1 K4 K5 1 E K1 0 K2 1 0 0 K4 K5 K6 Start 1 T K3 K6 0 1 Start Niedersächsisches Kultusministerium 1 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Beschreiben Sie, wie der Huffman-Baum zum Text „EXPERIMENT“ durch die entsprechende Adjazenzmatrix dargestellt wird. Begründen Sie dabei auch, warum sich in jeder Zeile der Adjazenzmatrix höchstens ein Eintrag mit „0“ oder „1“ befinden kann. Die Knoten des Baums liegen als Objekte einer Klasse Knoten vor. Abbildung 1.2 Implementieren Sie eine Operation sucheIndex, welche für einen Knoten der Reihung zeilenUndSpaltenKennzeichnung den Index in dieser Reihung als Ganzzahl zurückgibt. c) Entsprechend des Huffman-Baums aus Aufgabenteil b) würde der Buchstabe P mit der Bitfolge 001 codiert werden. Der Adjazenzmatrix kann man die Bitfolge folgendermaßen entnehmen: Man sucht den einzigen Eintrag in der P entsprechenden Zeile. Dies ist eine 1 und die zugehörige Spalte gehört zu K1. Jetzt sucht man den einzigen Eintrag in der zu K1 gehörenden Zeile. Dies ist eine 0 und die zugehörige Spalte gehört zu K4. In der zu K4 gehörenden Zeile ist der einzige Eintrag eine 0, die zur Spalte Start gehört. Start ist die Wurzel und somit kann man die Bitfolge in umgekehrter Reihenfolge als Codierung für P entnehmen. Geben Sie einen geeigneten Algorithmus als Struktogramm an, der für ein Zeichen eines Textes mit Hilfe der Adjazenzmatrix die zugehörige Codierung ermittelt. Die Operation sucheIndex aus Aufgabenteil b) kann dabei ebenso verwendet werden, wie eine Operation sucheKnoten, die den zu einer bestimmten Beschriftung zugehörigen Knoten ermittelt. d) Auch tschechische Chemiker hantieren oft mit gefährlichen Chemikalien. Gefährliche Chemikalien werden mit speziellen Symbolen gekennzeichnet. Drei Beispiele sind im Folgenden gegeben: Abbildung 1.3 Nun sollen in einer speziellen Chemiker-Software diese Symbole als Icons in der Menüleiste verwendet werden. Dazu müssen die Bilder codiert werden. Möglich wäre eine Lauflängencodierung dieser Bilder. Erläutern Sie, warum sich bei dieser Art von Icons eine Lauflängencodierung anbietet. Verallgemeinern Sie, welche Struktur Bilder haben müssen, damit eine Lauflängencodierung platzsparender als eine unkomprimierte Speicherung ist und bei welcher Art von Bildern eine Lauflängencodierung wenig sinnvoll ist. Niedersächsisches Kultusministerium 2 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Aufgabe 2 In der Bioinformatik spielt der Editierabstand eine wichtige Rolle, mit dessen Hilfe die Ähnlichkeit von DNA-Sequenzen untersucht wird (Gen-Analyse). Der Editierabstand zwischen zwei Zeichenfolgen ist die minimale Anzahl von Editieraktionen (Zeichen löschen, Zeichen einfügen oder Zeichen ändern), die notwendig ist, um aus der ersten Zeichenfolge die zweite zu machen. Beispiel: Der Editierabstand zwischen den Sequenzen AGCCT und ACCTG beträgt zwei. Man kann die Zeichenfolge folgendermaßen umformen: AGCCT ACCT ACCTG (Zeichen löschen) (Zeichen einfügen) Der Editierabstand zwischen zwei Zeichenfolgen a1a2a3...am und b1b2b3...bn lässt sich mit Hilfe einer Tabelle wie folgt bestimmen: Zunächst werden die Zellen der ersten Zeile und ersten Spalte mit den Zahlen 0, 1, 2, ... , m bzw. 0, 1, 2, ... n gefüllt. Um einen weiteren Zelleninhalt z(i, j) zu bestimmen, berechnet man zunächst folgende drei Werte mit Hilfe der bereits ausgefüllten benachbarten Zellen (i ist dabei die aktuelle Spalte und j die aktuelle Zeile): e1 = z(i − 1, j) + 1 , A G C C T 0 1 2 3 4 5 A 1 0 1 2 3 4 C 2 1 1 1 2 3 C 3 2 2 1 1 2 T 4 3 3 2 2 1 G 5 4 3 3 3 2 e 2 = z(i, j − 1) + 1 , Tabelle 2.1 1, wenn ai ≠ b j e3 = z(i − 1, j − 1) + 0, wenn ai = b j Der Zelleninhalt z(i, j) ist dann das Minimum Min(e1, e2, e3) dieser drei Werte. Beispiel: Um den Zelleninhalt z(4, 3) in der oben stehenden Tabelle 2.1 zu bestimmen, berechnet man: e1 = z(3, 3) + 1 = 1 + 1 = 2, e2 = z(4, 2) + 1 = 2 + 1 = 3, e3 = z(3, 2) + 0 = 1 + 0 = 1 (addiert wird null, weil a4 = b3 = „C“ ist). Also ergibt sich für den Zelleninhalt: z(4, 3) = Min(e1, e2, e3) = 1. Der Editierabstand lässt sich nach dem vollständigen Ausfüllen der Tabelle in der unteren rechten Tabellenzelle ablesen (siehe Tabelle 2.1 für die Beispielsequenzen AGCCT und ACCTG). a) Bestimmen Sie mittels einer entsprechenden Tabelle den Editierabstand zwischen den Sequenzen ACGTA und ACCAT. Geben Sie eine mögliche Umformung von ACGTA in ACCAT an. b) Implementieren Sie eine Operation editierabstand, die aus zwei übergebenen Zeichenketten (Sequenzen) den Editierabstand berechnet. Die Zeichenketten sollen eine maximale Länge von 10 haben. Niedersächsisches Kultusministerium 3 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min c) Um Verwandtschaften zwischen Tierarten zu untersuchen, wird das Protein-Molekül Hämoglobin untersucht. Dieses besteht aus 141 hintereinander aufgefädelten Aminosäuren. Bei den Tierarten A, B, C, ..., H weichen die konkreten Abfolgen der Aminosäuren durch zufällige Mutationen im Laufe der Evolution voneinander ab. Die Anzahlen der Gen-Unterschiede (Editierdistanzen) sind in folgender Adjazenzmatrix angegeben: A B C D E F G H A 0 6 4 16 19 9 18 25 B 6 0 15 5 17 16 13 20 C 4 15 0 8 18 11 17 22 D 16 5 8 0 13 9 8 16 E 19 17 18 13 0 7 9 8 F 9 16 11 9 7 0 6 17 G 18 13 17 8 9 6 0 9 H 25 20 22 16 8 17 9 0 Tabelle 2.2 Man geht davon aus, dass die Tierart A im evolutionären Stammbaum an der Wurzel steht. Bestimmen Sie mit Hilfe des Dijkstra-Algorithmus für die Tierart A (Startknoten) die kürzesten Evolutionslinien (Routen) zu jeder anderen Tierart. Protokollieren Sie Ihr Vorgehen in der vorgegebenen Tabelle (Material 2c). Zeichnen Sie den erhaltenen Stammbaum mit den Anzahlen der Gen-Unterschiede (Editierabstände) an den Kanten. d) Erstellen Sie den Teilgraphen für die Beziehungen zwischen den Tierarten F, E, G und H entsprechend der Adjazenzmatrix (Tabelle 2.2). Beurteilen Sie anhand des Teilgraphen das Verfahren, den Stammbaum nur über die Bestimmung der kürzesten Evolutionslinien mit Hilfe des Dijkstra-Algorithmus abzuleiten. Die Tierart F soll dabei an der Wurzel des Stammbaums stehen – also Startknoten sein. Niedersächsisches Kultusministerium 4 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Aufgabe 3 XML beschreibt eine Sprache, mit der Daten strukturiert erfasst werden können. Die folgenden Produktionsregeln der Sprache minML sind an XML angelehnt: minML DOKUMENT → <D> DOKUMENTKÖRPER DOKUMENTKÖRPER → </D> | <E> ELEMENT ELEMENT → </E> DOKUMENTKÖRPER | TXT TEXT TEXT → </E> DOKUMENTKÖRPER | _ FOLGETEXT FOLGETEXT → TXT TEXT Die Nichtterminalsymbole sind als Wörter in kursiven GROßBUCHSTABEN notiert, Terminalsymbole sind fett notiert. Das Zeichen _ steht für ein Leerzeichen. a) Ergänzen Sie die Produktionen zu einer vollständigen Grammatik. Geben Sie diese in Form von Syntaxdiagrammen an. Untersuchen Sie folgende Wörter auf die Zugehörigkeit zur Sprache minML: <D><E>TXT_TXT</E><E>TXT</E></D> <D><E><E>TXT _ TXT </E></E></D> b) Begründen Sie mithilfe der Chomsky-Hierarchie, dass ein endlicher Automat existiert, der Wörter von minML akzeptiert. Erstellen Sie den Zustandsgraphen dieses Automaten. c) Die Sprache minML hat sich nicht bewährt, sodass sie durch Änderung der Regeln folgendermaßen zu minML* verändert wird: DOKUMENT → <D> ELEMENT </D> ELEMENT → <E> ELEMENTKÖRPER </E> ELEMENTKÖRPER → TXT | ELEMENT Geben Sie für ELEMENT in minML* ein geeignetes Syntaxdiagramm an und leiten Sie begründet ein Wort der Sprache ab, das sich in minML nicht erzeugen lässt. Begründen oder widerlegen Sie die Aussage: Es gibt einen endlichen Automaten, der die Sprache minML* akzeptiert. d) In Abbildung 3.1 im Material ist das Klassendiagramm eines Parsers dargestellt, mit dem Zeichenketten daraufhin untersucht werden können, ob sie korrekte Dokumente in der Sprache minML* darstellen. Zur Vereinfachung sollen lediglich die Operationen istElement und istElementkoerper, betrachtet werden, deren Code ebenfalls im Material gegeben ist. Erläutern Sie die Funktionsweise des Parsers am Beispiel des Aufrufs istElement("<E><E>TXT</E></E>"). Protokollieren Sie den Programmablauf. Niedersächsisches Kultusministerium 5 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Material Zu Aufgabe 2c) Tabelle – Dijkstra-Algorithmus Ausgewählter Knoten Vorgängerknoten A B C D E F G H - - 0 - - - - - - - A - x 6 4 16 19 9 18 25 C A x 6 x 12 19 9 18 25 B A x x x 11 19 9 18 25 Zu Aufgabe 3d) Abbildung 3.1 Niedersächsisches Kultusministerium 6 von 7 Zentralabitur 2012 Informatik Aufgabe II eA Schülermaterial Bearbeitungszeit: 300 min Der Klasse Tokenizer wird die Zeichenkette übergeben, die durch den Parser untersucht werden soll. Die Operation fronttoken spaltet das erste Terminalsymbol der Zeichenkette ab und gibt es als Zeichenkette zurück. doc enthält danach die verbleibende Restzeichenkette. hasNext gibt wahr zurück, wenn noch ein weiteres Terminalsymbol in der Zeichenkette verfügbar ist, und isNext prüft, ob das als Zeichenkette übergebene Terminalsymbol als nächstes in doc vorliegt. doc wird dadurch nicht verändert. Operationen istElement und istElementkoerper in Java: private boolean istElement() { String token = tokenizer.frontToken(); if (token.equals("<E>")) { return istElementKoerper() && tokenizer.frontToken().equals("</E>"); } else { return false; } } private boolean istElementKoerper() { if (tokenizer.isNext("<E>")) { return istElement(); } else { String token = tokenizer.frontToken(); return token.equals("TXT"); } } Operationen istElement und istElementkoerper in Delphi: function TParser.istElement: boolean; var token: String; begin token := tokenizer.fronttoken; if token = '<E>' then begin result := istElementKoerper and (tokenizer.fronttoken = '</E>'); end else result := false; end; function TParser.istElementKoerper: boolean; var token: String; begin if tokenizer.isNext('<E>') then result := istElement else begin token := tokenizer.fronttoken; result := (token = 'TXT'); end; end; Niedersächsisches Kultusministerium 7 von 7