Aufgabe 2 - Suchbäume · Abitur NRW Informatik LK · Nachtermin 2022
Thema: Binärbäume und binäre Suchbäume · Aus der Prüfung LK · Nachtermin (2022)
Aufgabenstellung
Aufgabenstellung:
Im Nationalpark Wildlife teilen sich unterschiedliche Tierarten ein weitläufiges Freigelände. Die Parkleitung will das Zusammenspiel der Tiere näher untersuchen und stattet sie deshalb mit Halsbändern aus, die Begegnungen mit anderen Tieren erfassen und verwalten können.
Jedes Halsband sendet in regelmäßigen Zeitabständen ein Signal mit einem eindeutigen individuellen Schlüssel aus fünf Zeichen. Empfängt ein Halsband das Signal eines anderen Halsbands, kommt eine sogenannte Begegnung zustande. Bei dieser werden der mit dem Signal übertragene Schlüssel, die Stärke des Signals (z. B. zur Ermittlung des Abstands der beiden Tiere) und der Zeitpunkt der Begegnung lokal auf dem empfangenden Halsband gespeichert.
Wird ein bestimmter Schlüssel von einem Halsband erstmals empfangen, legt dieses dafür zusätzlich einen sogenannten Kontakt an. Ein Kontakt verwaltet sämtliche Begegnungen mit demselben Schlüssel. Ist zu einem Schlüssel ein Kontakt vorhanden, gab es also schon mindestens eine Begegnung mit dem Halsband, das diesen Schlüssel sendet. Daher ist bei jeder neuen Begegnung zu prüfen, ob schon ein passender Kontakt vorliegt.
Innerhalb eines Kontakts sind die Begegnungen aufsteigend nach dem Zeitpunkt geordnet. Die Kontakte selbst liegen in einem Suchbaum, der alphabetisch nach dem Schlüssel geordnet ist.
Zur Überprüfung der Funktionsweise werden die Halsbänder zunächst einen Tag lang in einem kleineren Gehege an einigen Erdmännchen des Parks getestet. Zum Zeitpunkt der Aktivierung sind auf den Halsbändern zunächst weder Kontakte noch Begegnungen gespeichert. Das Halsband eines Erdmännchens erfasst während des Tests Begegnungen in der in Abbildung 1 angegebenen Reihenfolge. Abbildung 2 zeigt den Suchbaum mit allen Kontakten (dargestellt über ihren Schlüssel und die Anzahl der zugehörigen Begegnungen), der sich bei der Verarbeitung der Begegnungen aus Abbildung 1 ergibt.
Nr. · Schlüssel · Signalstärke · Zeitpunkt
1 · ncgde · 132 · 2022-03-19 15:54
2 · grsmt · 154 · 2022-03-19 16:21
3 · grsmt · 46 · 2022-03-19 16:23
4 · bdsuw · 113 · 2022-03-19 16:27
5 · pwagb · 21 · 2022-03-19 16:33
6 · mkwda · 78 · 2022-03-19 16:34
7 · ncgde · 103 · 2022-03-19 16:35
8 · mkwda · 142 · 2022-03-19 16:39
9 · wrlyr · 69 · 2022-03-19 17:02
Abbildung 1: Begegnungen des Halsbands eines Erdmännchens
Abbildung 4 zeigt einen Ausschnitt aus dem Implementationsdiagramm des Softwaresystems der Halsbänder.
a)
In Abbildung 3 sind die Begegnungen aufgeführt, die das Halsband eines weiteren Erdmännchens am Testtag aufgezeichnet hat.
Stellen Sie den sich ergebenden Suchbaum mit sämtlichen darin verwalteten Kontakten (jeweils mit Schlüssel und Anzahl der zugehörigen Begegnungen) dar, der entsteht, nachdem alle Begegnungen aus Abbildung 3 verarbeitet wurden.
Begründen Sie, weshalb ein Suchbaum zur Verwaltung der Kontakte besser geeignet ist als eine lineare Liste.
b)
Gegeben ist die nachstehende Implementierung der Methode liefereEtwas der Klasse Halsband:
1 public Kontakt liefereEtwas() {
2
Kontakt ergebnis = null;
3
if (!kontakte.isEmpty()) {
4
Queue<BinarySearchTree<Kontakt>> q
5
= new Queue<BinarySearchTree<Kontakt>>();
6
int max = 0;
7
q.enqueue(kontakte);
8
do {
9
BinarySearchTree<Kontakt> hilf = q.front();
10
q.dequeue();
11
Kontakt aktuell = hilf.getContent();
12
if (aktuell.liefereMaximaleSignalstaerke() > max) {
13
max = aktuell.liefereMaximaleSignalstaerke();
14
ergebnis = aktuell;
15
}
16
if (!hilf.getLeftTree().isEmpty()) {
17
q.enqueue(hilf.getLeftTree());
18
}
19
if (!hilf.getRightTree().isEmpty()) {
20
q.enqueue(hilf.getRightTree());
21
}
22
} while (!q.isEmpty())
23
}
24
return ergebnis;
25 } Die Methode soll auf die Beispieldaten des Testtages aus den Abbildungen 1 und 2 angewandt werden; dabei wird der Suchbaum aus Abbildung 2 im Attribut kontakte verwaltet.
Erläutern Sie die Arbeitsweise der Methode liefereEtwas.
Erläutern Sie im Sachzusammenhang, welches Ergebnis die Methode liefereEtwas liefert.
c)
Die Methode liefereBegegnungen der Klasse Halsband bestimmt eine Liste aller Begegnungen, bei denen mindestens die Signalstärke pMin empfangen wurde. Ihr Methodenkopf lautet:
public List<Begegnung> liefereBegegnungen(int pMin) Entwickeln und erläutern Sie eine algorithmische Vorgehensweise für die Methode liefereBegegnungen.
Implementieren Sie die Methode liefereBegegnungen entsprechend Ihrer Strategie und der Dokumentation im Anhang:

Lösung
Nach den offiziellen Korrekturhinweisen
a) Stellen Sie den Suchbaum mit sämtlichen darin verwalteten Kontakten (jeweils mit Schlüssel und Anzahl der zugehörigen Begegnungen) dar, der entsteht, nachdem alle Begegnungen aus Abbildung 3 verarbeitet wurden.
Lösung:
a) Begründen Sie, weshalb ein Suchbaum zur Verwaltung der Kontakte besser geeignet ist als eine lineare Liste.
Lösung: Grundsätzlich eignen sich sowohl ein Suchbaum als auch eine lineare Liste, um eine beliebige Anzahl von Objekten des gleichen Typs nach einem bestimmten Attribut sortiert zu verwalten. Bei der Verarbeitung einer neuen Begegnung muss zunächst nach einem Kontakt zum Schlüssel der Begegnung gesucht werden, um zu prüfen, ob dieser bereits zuvor angelegt wurde. Ist dies nicht der Fall, muss er als neuer Kontakt an der richtigen Stelle bzgl. der gewünschten Sortierung eingefügt werden. Bei einer Liste wird diese von vorne beginnend elementweise durchlaufen, bis der bereits existierende Kontakt bzw. die Einfügestelle des neu anzulegenden Kontakts gefunden wurde. Im Gegensatz dazu halbiert sich bei einem optimal besetzten Suchbaum die Anzahl der zu betrachtenden Elemente mit jedem Schritt, so dass der Kontakt bzw. die Einfügestelle im Durchschnitt erheblich schneller (d. h. mit weniger durchzuführenden Operationen) gefunden werden kann. Ein Suchbaum kann im ungünstigsten Fall vollständig zu einer linearen Liste entarten und keinen Vorteil mehr gegenüber dieser besitzen. Dies erscheint im vorliegenden Sachzusammenhang unwahrscheinlich, da die Schlüssel aus zufälligen Zeichenfolgen bestehen und die Reihenfolge, in der die Tiere sich begegnen, mehr oder weniger zufallsabhängig ist. Insgesamt ist ein Suchbaum also einer linearen Liste vorzuziehen.
b) Geben Sie an, was die Methode liefereEtwas bei Anwendung auf die Beispieldaten aus den Abbildungen 1 und 2 zurückgibt.
Lösung: grsmt / Kontakt grsmt
b) Erläutern Sie die Arbeitsweise der Methode liefereEtwas.
Lösung: Die Methode liefereEtwas erwartet keine Parameter und liefert ein Objekt vom Typ Kontakt zurück (Zeile 1). Falls Kontakte existieren (Zeile 3), werden eine leere Hilfsschlange q aus Suchbäumen und eine mit 0 initialisierte Ganzzahl max angelegt (Zeilen 4 bis 6). Der im Attribut kontakte referenzierte Suchbaum wird an q angehängt (Zeile 7) und eine Schleife mindestens einmal ausgeführt. Diese bricht ab, wenn q leer ist (Zeilen 8 bis 22). Innerhalb der Schleife wird das erste Objekt von q (Suchbaum) als hilf referenziert und aus q entfernt, anschließend wird der Inhalt der Wurzel von hilf (Kontakt) als aktuell referenziert (Zeilen 9 bis 11). Falls die maximale Signalstärke aller der vom aktuell betrachteten Kontakt verwalteten Begegnungen größer als der bisherige maximale Wert max ist, so wird max auf diese maximale Signalstärke gesetzt und die Ergebnisvariable referenziert den aktuell betrachteten Kontakt (Zeilen 12 bis 15). Danach werden der linke bzw. der rechte Teilbaum des aktuell als hilf referenzierten Suchbaums an q angehängt, sofern diese jeweils nicht leer sind (Zeilen 16 bis 21). Am Ende wird der zuletzt als ergebnis referenzierte Kontakt zurückgegeben oder null, falls noch keine Kontakte existieren (Zeilen 2, 3 und 24). Durch die Nutzung der Hilfsschlange q werden die einzelnen Kontakte des Suchbaums gemäß einer Breitensuche Ebene für Ebene traversiert.
b) Erläutern Sie im Sachzusammenhang, welches Ergebnis die Methode liefereEtwas liefert.
Lösung: Im Sachzusammenhang liefert die Methode den Kontakt, mit dem es die engste Begegnung (Begegnung mit der größten Signalstärke) gab, falls bereits Kontakte existieren. Gibt es mehrere Kontakte mit Begegnungen mit der gleichen maximalen Signalstärke, so wird der gemäß der Breitensuche zuerst betrachtete Kontakt zurückgegeben.
c) Entwickeln und erläutern Sie eine algorithmische Vorgehensweise für die Methode liefereBegegnungen.
Lösung: Um alle Begegnungen aller Kontakte hinsichtlich der geforderten Mindest-Signalstärke zu überprüfen, muss der Suchbaum kontakte vollständig traversiert werden. Dies ist z. B. rekursiv nach dem Prinzip in-order möglich. Dazu wird eine private Hilfsmethode implementiert, die die Parameterliste von liefereBegegnungen um einen weiteren Parameter (vom Typ BinarySearchTree mit Inhaltsobjekten vom Typ Kontakt) ergänzt, die von der öffentlichen Methode mit dem zusätzlichen Parameterwert kontakte aufgerufen und deren Rückgabe von dieser zurückgegeben wird. Die private Hilfsmethode erzeugt eine leere Liste, die Objekte der Klasse Begegnung verwaltet. Sofern der übergebene Suchbaum nicht leer ist, geschieht Folgendes: Zunächst wird das Ergebnis des rekursiven Aufrufs der Hilfsmethode für den linken Teilbaum des übergebenen Suchbaums an die Liste angehängt. Danach werden die Begegnungen des Inhalts der Wurzel des übergebenen Suchbaums (Begegnungen des aktuell betrachteten Kontakts) überprüft. Übersteigt die Signalstärke der aktuell betrachteten Begegnung den als pMin übergebenen Wert, wird diese Begegnung hinten an die Liste angehängt. Abschließend wird das Ergebnis des rekursiven Aufrufs der Hilfsmethode für den rechten Teilbaum des übergebenen Suchbaums an die Liste angehängt. Zuletzt wird die erzeugte (ggf. leere) Liste zurückgegeben.
c) Implementieren Sie die Methode liefereBegegnungen entsprechend Ihrer Strategie und der Dokumentation im Anhang.
Lösung: ```java public List<Begegnung> liefereBegegnungen(int pMin) { return liefereBegegnungen(kontakte, pMin); } private List<Begegnung> liefereBegegnungen( BinarySearchTree<Kontakt> pBaum, int pMin) { List<Begegnung> ergebnis = new List<Begegnung>(); if (!pBaum.isEmpty()) { ergebnis.concat(liefereBegegnungen(pBaum.getLeftTree(), pMin)); List<Begegnung> begegnungen = pBaum.getContent().gibBegegnungen(); begegnungen.toFirst(); while (begegnungen.hasAccess()) { Begegnung aktuell = begegnungen.getContent(); if (aktuell.gibSignalstaerke() > pMin) { ergebnis.append(aktuell); } begegnungen.next(); } ergebnis.concat(liefereBegegnungen(pBaum.getRightTree(), pMin)); } return ergebnis; } ```
Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium
Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.
‹ Aufgabe 2 - Binärbäume · GK · Nachtermin 2022 · Aufgabe 2 - Binärbäume und binäre Suchbäume · GK · Haupttermin 2021 ›
Mehr Aufgaben zu Binärbäume und binäre Suchbäume
- Aufgabe 2 - Binärbäume und binäre Suchbäume · GK · Haupttermin · Weiterbildungskolleg 2023
- Aufgabe 2 - Binäre Suchbäume · GK · Nachtermin 2023
- Aufgabe 2 - Binärbäume und binäre Suchbäume · LK · Nachtermin 2023
- Aufgabe 2 - Binärbäume und binäre Suchbäume · GK · Haupttermin 2022
- Aufgabe 2 - Binärbäume · GK · Nachtermin 2022
- Aufgabe 2 - Binärbäume und binäre Suchbäume · GK · Haupttermin 2021
- Aufgabe 2 - Binäre Suchbäume · GK · Haupttermin · Weiterbildungskolleg 2021
- Aufgabe 2 - Binärbäume und binäre Suchbäume · GK · Nachtermin 2021
- Aufgabe 2 - Binäre Suchbäume · LK · Haupttermin 2021
- Aufgabe 2 - Binärbäume und binäre Suchbäume · LK · Nachtermin 2021