Algorithmen & Datenstrukturen

2. Semester Informatik (HSLU)

2. Semester Informatik (HSLU)


C. C.
Diese Lernkarten behandeln grundlegende und fortgeschrittene Konzepte von Algorithmen und Datenstrukturen auf Universitätsniveau. Sie konzentrieren sich auf verschiedene Datenstrukturen wie Listen, Arrays und Stacks, sowie deren Implementierung, Operationen und Ressourcenbedarf. Die Karteikarten erklären auch Algorithmen wie binäres Suchen und deren Aufwand. Sie sind besonders nützlich für Studierende der Informatik, die ihr Verständnis von Algorithmen und Datenstrukturen vertiefen möchten, um effiziente Lösungen für komplexe Probleme zu entwickeln.
Flashcards
134
Students
20
Language
German
Category
Computer Science
Level
University
Created / Updated
21.02.2017 / 08.09.2023

Flashcards

Was ist der Heap?

In diesem Speicherbereich werden die Objekte gespeichert, d.h. deren Instanzvariablen bwz. Zustände. Nicht mehr referenzierbare Objekte werden durch den Garbage Collector (GC) automatisch gelöscht

Was ist der Call Stack?

Letztendlich wird bei der Ausführung eines Java-Programms eine Kette von Methoden aufgerufen/abgearbeitet. Ursprung ist die main()-Methode. Jeder Methodenaufruf bedingt gewissen Speicher, insbesondere für ihre aktuellen Parameter und lokalen Variablen. Dazu dient der Call Stack. Ein neuer Methodenaufruf bewirkt, dass der Call Stack wächst bzw. darauf ein zusätzlicher -> Stack Frame angelegt wird.

Wie sieht der Call Stack in Aktion aus?

(siehe Bild)

Mächtigkeit der Rekursion:

Erläutere das Bild

- Rekursion und Iteration sind gleich mächtig
- D.h. die Menge der berechenbaren Problemstellungen bei Verwendung der Rekursion und Verwendung der Iteration ist gleich.
- D.h. eine rekursive Implementation lässt sich grundsätzlich immer in eine gleichwertige iterative Implementation umprogrammieren und umgekehrt.

(Hinweis: Dies gilt exakt nur für sogenannte primitiv-rekursive Probleme, d.h. bei linearer und nicht geschachtelter Rekursion bzw. bei reinen Zählschleifen)

Welche Motivation haben wir für die Rekursion?

- mächtiges Lösungskonzept
- häufig einfache und elegante Problemlösungen
- weniger Quellcode
- Korrektheit häufig einfacher zu zeigen
- z.B. kennen die Programmiersprachen (Lisp: List Processing, Prolog: Programming in Logic) nur Rekursion!

Was sind Tücken der Rekursion?

- schnell sehr viele Methodenaufrufe
- tendenziell langsamere Programmausführung
- grosser Speicherbedarf auf dem Call Stack
- Gefahr eines Stack Overflow!

Bei Wahlmöglichkeit eine iterative Implementation bevorzugen!

Weshalb sollten Fibonacci-Zahlen zum Beispiel nicht rekursiv umgesetzt werden, obwohl es sich rekursiv präsentiert?

(siehe Bild)

Welche Rekursions-Typen gibt es?

- lineare Rekursion
- nichtlineare Rekursion
- direkte Rekursion
- indirekte Rekursion

Erläutere lineare Rekursion

(siehe Bild)

Erläutere nichtlineare Rekursion

Die Ausführung der Methode m(...) führt zu mehr als einem rekursiven Aufruf.

Erläutere direkte Rekursion

Eine rekursive Methode ruft sich direkt selbst auf

Erläutere indirekte Rekursion

Eine rekursive Methode ruft sich indirekt selbst auf (siehe Bild)

Beispiel Permutation (Passwort Cracking)

Jemand hat sein Passwort vergessen. Es war sechs Zeichen lang. Im Passwort kamen nur die Buchstaben von A bis F vor und jeder Buchstabe nur einmal. Wie viele verschiedene Passwörter bzw. Buchstaben-Kombinationen muss er/sie durchprobieren?

Mit anderen Worten: Gefragt sind alle Permutationen der Buchstaben A bis F? 
Also 6 ・5 ・4 ・3 ・… ・1 = 6! Permuationen

Im Falle von nur drei Buchstaben A, B und C ergeben sich diese Permutationen: ABC, BAC, CBA, BCA, ACB, CAB.

Eine entsprechende Methode soll alle Permutationen ausgeben (siehe Bild)

Wie sieht diese Implementation in Java aus?

(siehe Bild)

Siehe die Problemstellung im Bild.
Wie sieht die rekursive Lösungsstrategie und dessen Implementation in Java aus?

(siehe Bild)

Selbstähnlichkeit bzw. Rekursion findet sich bei Algorithmen und __________.

Datenstrukturen

Stimmt diese Aussage?

Iteration und Rekursion sind zentrale aber nicht gleich mächtige Konzepte in der Programmierung.

Nein, sie sind praktisch gleich mächtige Konzepte. Je nach Fall muss entschieden werden, welches Konzept besser geeignet ist.

Stimmt diese Aussage?

Rekursive Lösungen sind häufig elegant und einfach, haben aber ihre Tücken!

Ja

Bei einer rekursiven Methode unterscheidet man zwischen Rekursions-(1)______ und Rekursions-(2)__________ .

(1) Rekursionsbasis
(2) Rekursionsvorschrift

Für was ist die Rekursionsbasis da?

Für den Rekursionsabbruch

Für was ist die Rekursionsvorschrift da?

Beinhaltet die eigentliche Rekursion

Stimmt diese Aussage?

Auf dem Heap werden die Methoden gespeichert bzw. abgearbeitet und auf dem Call Stack werden die Objekte gespeichert.

Nein, es ist genau umgekehrt:

Auf dem Heap werden die Objekte gespeichert und auf dem Call Stack die Methoden gespeichert bzw. abgearbeitet

Was sind Datenstrukturen?

Datenstrukturen werden verwendet, um Mengen von Daten bzw. Objekten effizient zu speichern und verarbeiten zu können

Was versteht man unter Verarbeitung von Mengen von Daten? (Datenstrukturen)

Unter Verarbeitung versteht man Funktionen, wie z.B. alle enthaltenen Daten/Objekte einzeln zu bearbeiten, nach bestimmten Ojekten zu suchen, zu zählen, zu filtern oder nach unterschiedlichen Kriterien zu sortieren etc.

Es gibt verschiedene Arten von Datenstrukturen. Nenne Beispiele.

(siehe Bild)

Java bietet für jede Art von Datenstruktur jeweils nur eine Implementation dieser Datenstruktur an.

Java bietet für jede Art von Datenstruktur wiederum verschiedene Implementationen dieser Datenstrukturen an, um den unterschiedlichen Anforderungen gerecht zu werden -> Java Collections Frameworks

Eine universelle Datenstruktur, die alles perfekt kann, gibt es (leider) nicht, wir müssen fallspezifisch auswählen!

Die verschiedenen Datenstrukturen unterscheiden sich in vielerlei Hinsicht. Nenne Beispiele in denen sie sich unterscheiden.

(siehe Bild)

Anhand von was (und den teilweise damit eng verbundenen Algorithmen), sollten wir für jeden Anwendungsfall gezielt die geeignetste Datenstruktur auswählen?

Anhand der Eigenschaften der Datenstrukturen

Das Collection Framework besteht aus welchen drei wesentlichen Inhalten?

Interfaces, Implementationen und Algorithmen

Das Collection Framework besteht aus den drei wesentlichen Inhalten: Interfaces, Implementationen und Algorithmen. Erläutere diese Inhalte.

(siehe Bild)

Was zeigt dieses UML (siehe Bild)?

Ein unvollständiger Auszug aus den vorhandenen Schnittstellen der Java Collection Framework

Damit die polymorphen Algorithmen und Datenstrukturen des Collection Frameworks mit beliebigen Elementen funktionieren können, benötigen wir ein paar grundlegende Funktionen. Um welche grundlegende Funktionen handelt es sich?

- Für die Suche von Objekten (oder Verhindern von Duplikaten) müssen wir Objekte als «gleich» erkennen können.

- Für die Sortierung müssen wir Objekte vergleichen und als kleiner (<), gleich (=) oder grösser (>) beurteilen können.

Damit die polymorphen Algorithmen und Datenstrukturen des Collection Frameworks mit beliebigen Elementen funktionieren können, benötigen wir ein paar grundlegende Funktionen:

- Für Suche von Objekten müssen wir Objekte als «gleich» erkennen können
- Für Sortierung müssen wir Objekte vergleichen und als kleiner, gleich oder grösser beurteilen 

(1) Die Klasse Object definiert deswegen, welche dafür notwendige Methoden?
(2) Welche Interfaces müssen wir deswegen ggf. implementieren?

(1) equals(), hashCode()
(2) Comparable<T> oder Comparator<T>

Zeige ein Beispiel einer ArrayList im Einsatz

(siehe Bild)

Mache eine vereinfachte Annahme zu wie das Betriebssystem Speicher verwaltet

(siehe Bild)

Schaue die Annahme zur Speicherverwaltung eines Betriebssystem im Bild an und überlege:

- Was passiert nun, wenn man versucht einen Block mit malloc(7) anzufordern?
- Was passiert, wenn man auch noch free(yellow) freigibt?

(siehe Bild)

Was sind die wichtigsten Anforderungen an die Speicherverwaltung?

- soll zuverlässig sein (wertvoller Speicherplatz soll nicht verloren gehen)
- Allokation sollen schnell sein (keine lange Such nach einem in der Grösse passenden Block)
- schnelle Freigabe
- Mit der Zeit entstehen Lücken sowohl durch belegten als auch freien Speicher (Fragmentierung).
- Liegen freie Lücken nebeneinander, sollten diese in der Datenstruktur wieder zusammengefasst werden!
- Gute Frage dazu: Welche Datenstruktur(en) mit welchen spezifischen Eigenschaften (Sortierung, Suche etc.) eignet sich dafür am Besten?

Was zeigt dieses UML (siehe Bild)?

Speicherverwaltung.

Ein einfacher erster Ansatz zur Modellierung als Inspiration.

Auswahl und Einsatz von Datenstrukturen in der Speicherverwaltung ist _____ stark von den eingesetzten Algorithmen abhängig.

Study