Algorithmen & Datenstrukturen
2. Semester Informatik (HSLU)
2. Semester Informatik (HSLU)
-
- 1 / 134
-
Flashcards
Was ist die Definition eines Algoritmus?
- Ein Algorithmus ist ein präzise festgelegtes Verfahren zur Lösung eines Problems; genauer gesagt von einer Problem-Klasse beinhaltend (unendlich) viele gleichartige Probleme.
- Etwas salopp: Algorithmus = Lösungsverfahren (Rezept, Anleitung)
- Probleme bzw. Problem-Klassen , die mit Algorithmen gelöst werden können, heissen (berechenbar)
Nennen Sie einfache Beispiele eines Algorithmus
- Berechnung des grössten gemeinsamen Teilers (ggT) für zwei beliebige natürliche Zahlen.
- Zeichnen der Verbindungslinie, welche zwei Punkte verbindet.
- Sortierung von zufällig vorliegenden ganze Zahlen.
- Finden des kürzesten Weges zwischen zwei Knoten in einem zusammenhängenden Graphen.
- Entscheiden, ob es sich bei einer vorliegenden natürlichen Zahl um eine Primzahl handelt.
- Berechnung des Integrals bei vorliegenden Funktionswerten in einem bestimmten Bereich.
- Finden einer Lösung in einem vorgegebenen Lösungsraum.
Was sind grundlegende Eigenschaften eines Algorithmus?
- schrittweises Verfahren
- ausführbare Schritte
- eindeutiger nächster Schritt (determiniert)
- endet nach endlich vielen Schritten (terminiert)
Der Computer ist DER "Algorithmen-Cruncher". Anhand von was kann man sehen?
- arbeitet schrittweise, gemäss Programm
- Anweisung für Anweisung, jede Anweisung korrespondiert mit einem ausführbaren Befehl
- arbeitet präzise und schnell
Algorithmen sind ein zentrales Thema in der Informatik und in der Mathematik. Zeige Beispiele.
- Algorithmentheorie: Guter Lösungsalgorithmus für bestimmte Problemstellung?
- Komplexitätstheorie: Ressourcenverbrauch von Rechenzeit und Speicherbedarf?
- Berechenbarkeitstheorie: Was ist mit einer Maschine grundsätzlich lösbar bzw. nicht lösbar?
Was ist die Definition einer Datenstruktur?
Eine Datenstruktur ist ein Konzept zur Speicherung und Organisation von Daten. Es handelt sich um eine Struktur, weil die Daten in einer bestimmten Art und Weise angeordnet und verknüpft werden, um den Zugriff auf sie und ihre Verwaltung möglichst effizient zu ermöglichen. Datenstrukturen sind daher insbesondere auch durch die Operationen charakterisiert, welche Zugriff und Verwaltung realisieren.
Beispiele:
Array: direkter Zugriff (+), fixe Grösse (-)
Liste: flexible Grösse (+), sequentieller Zugriff (-)
Algorithms + Data Structures = Programs. Erläutere.
Bei vielen Algorithmen hängt der Ressourcenbedarf, d.h. sowohl die benötigte Laufzeit als auch der Speicherbedarf, von der Verwendung geeigneter Datenstrukturen ab.
Algorithmen operieren auf Datenstrukturen und Datenstrukturen bedingen spezifische Algorithmen. Beides ist untrennbar miteinander verbunden!
Welche Fragen stellen sich betreffend Algorithmen und Datenstrukturen?
- Adäquat für kleine Probleme? Adäquat für grosse Probleme?
- Selber entwickeln oder aus Bibliothek wählen?
- Einfach zu verstehen, zu implementieren, zu warten oder schwierig?
- Schneller Algorithmus mit grossem Speicherbedarf oder umgekehrt?
Extrembeispiel: Ist n eine Primzahl, ja/nein?
- Prüfen, ob n durch 2, 3, 4, 5, 6, … , sqrt(n) ganzzahlig teilbar. Wenig Speicher, lange Rechenzeit
- Alle Primzahlen 2, 3, 5, 7, 11, … im Voraus in einer Tabelle abspeichern. Viel Speicher, schnell (natürlich kann man dies praktisch nur für eine endliche Anzahl Primzahlen tun)
Was ist das Fazit der unterschiedlichen Implementierungen des euklidischen Algorithmus zur Berechnung des ggT?
- Alle Implementierungen basieren auf Euklid.
- unterschiedliche Ansätze: Schleifen vs. Rekursion
- "Abkürzungen": Modulo-Operation anstelle x-mal A-B
- unterschiedliche Anzahl Schleifendurchläufe
- Ausführungsgeschwindigkeit
- unterschiedliche Anzahl Methodenaufrufe
- unterschiedlicher Speicherbedarf
- Alle Implementierungen liefern die gleichen Resultate (gemäss Testing).
- Alle Implementierungen sind gleichwertig.
Was ist die Definition von Komplexität in Algorithmen & Datenstrukturen?
- Komplexität (auch Aufwand oder Kosten) eines Algorithmus:
Ressourcenbedarf = f (Eingabedaten). D.h. «Wie hängt der Ressourcenbedarf von den Eingabedaten ab?»
- Ressourcenbedarf:
Rechenzeit -> Zeitkomplexität, Speicherbedarf -> Speicherkomplexität
- Eingabedaten:
Grösse der Datenmenge (z.B. 100 vs. 1'000'000'000 zu sortierende Elemente), Grösse eines Datenwertes (z.B. 10! vs. 1'000'000'000!)
Was uns interessiert uns weiter bei der Frage:
Wie wächst der Ressourcenbedarf, wenn mehr Daten zu verarbeiten sind?
- Bleibt der Ressourcenbedarf gleich, wenn wir den ggT von zwei sehr grossen Zahlenwerten berechnen wollen?
- Verdoppelt oder vervierfacht sich der Ressourcenbedarf für das Sortieren der doppelten Datenmenge?
Was interessiert uns nicht weiter bei der Frage:
Wie wächst der Ressourcenbedarf, wenn mehr Daten zu verarbeiten sind?
Der exakte / absolute Ressourcenbedarf!
- Z.B., die ggT-Berechnung von 1’000’000’489 und 9’123’000’124 auf dem Computer XY mit der Konfiguration Z dauert 0.42 Sek.
- Vgl., solche Rechenzeiten sind für jeden Computer anders. Möchte man die Rechenzeit reduzieren, so lässt sich jederzeit ein schnellerer Computer kaufen! (bessere Hardware)
Was ist die Definition von "Big-O-Notation"?
Die Big-O-Notation (landau’sches Symbol) bringt zum Ausdruck, dass eine Funktion f(n) höchstens so schnell wächst wie eine andere Funktion g(n). g(n) ist die obere Schranke für f(n).
Abschliessende Bemerkung zu Big-O-Notation
Die Ordnung ignoriert _______ Faktoren. Diese können aber praktisch relevant sein!
Abschliessende Bemerkung zu Big-O-Notation
Die Ordnung berücksichtigt das Verhalten bei _______ n nicht. Langsamere Algorithmen sind aber bei _______ n oft auch brauchbar oder gar die bessere Wahl!
Abschliessende Bemerkung zu Big-O-Notation
Die exakte mathematische Analyse von vielen Algorithmen ist (1)________ oder sogar (2)__________!
Abschliessende Bemerkung zu Big-O-Notation
Häufig muss man bei der Analyse differenzieren:
- bester Fall (best Case)
- schlimmster Fall (wort Case)
- mittlere Fall (average Case)
Welcher Fall ist das bessere Mass für die Leistung eines Algorithmus?
Häufig ist der mittlere Fall ein besseres Mass für die Leistung eines Algorithmus, als der schlimmste.
Ein Algorithmus ist ein Lösungsverfahren für eine Problemklasse
Algorithmen und Datenstrukturen sind _________ miteinander verbunden
Für eine Problemklasse gibt es typisch _______ Lösungs-Algorithmus/Algorithmen
Unter Komplexität eines Algorithmus versteht man __________ in Abhängigkeit der Eingabedaten.
Beid en Ressourcen geht es um was?
Rechenzeit und Speicherbedarf
Stimmt diese Aussage?
Es interessiert insbesondere, wie sich der Ressourcenbedarf bei einem bestimmten Algorithmus bei kleinen Problemen entwickelt.
Nein
Es interessiert insbesondere, wie sich der Ressourcenbedarf bei einem bestimmten Algorithmus bei grossen Problemen entwickelt.
Was ermöglicht die Big-O-Notation vielfacht?
Eine adäquate Qualifizierung
Für die Ausführung eines Programmes verwendet die Java Virtual Machine (JVM) welche zwei wichtige Speicher?
Heap und Call Stack