(Lösung_2012InformatikEAAufg2, PDF

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