AD - Algorithmen FS17
HSLU Informatik - Algorithmen & Datenstrukturen - Teil Algorithmen - FS17
HSLU Informatik - Algorithmen & Datenstrukturen - Teil Algorithmen - FS17
Kartei Details
Karten | 62 |
---|---|
Lernende | 23 |
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 20.06.2017 / 14.06.2023 |
Weblink |
https://card2brain.ch/box/20170620_ad_algorithmen_fs17
|
Einbinden |
<iframe src="https://card2brain.ch/box/20170620_ad_algorithmen_fs17/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Lernkarteien erstellen oder kopieren
Mit einem Upgrade kannst du unlimitiert Lernkarteien erstellen oder kopieren und viele Zusatzfunktionen mehr nutzen.
Melde dich an, um alle Karten zu sehen.
Was sind die Best-, Worst- und Average Case Werte für Heapsort?
- Best Case = O(n log n)
- Worst Case = O(n log n)
- Average Case = O(n log n)
Wie funktioniert das Prinzip "Teile und Herrsche"?
Ein komplexes Problem durch Zerlegen in einfachere Teilprobleme lösen:
- Problem in Teilprobleme zerlegen.
- Teilprobleme lösen.
- Teillösungen zur Gesamtlösung zusammensetzen.
Was kann man mit dem Prinzip "Teile und Herrsche" erreichen?
- eine Lösungsfindung
- einen rekursiven Lösungsansatz
- parallelisierbare Lösungen (falls Teilprobleme unabhängig lösbar)
- eine Reduktion des Lösungsaufwandes
Welche Methoden von Object sollten für Elemente einer Collection überschrieben werden?
- boolean equals(Object obj)
- int hashCode()
Welche Sortiermethoden bietet die Klasse java.util.Arrays?
- static void sort(int[] a)
- static void sort(Object[] a)
- static <T> void sort(T[] a, Comparator<? super T> c)
Welche Sortiermethoden bietet die Klasse java.util.Collections?
- static <T extends Comparable<? super T>> void sort(List<T> list)
- static <T> void sort(List<T> list, Comparator<? super T> c)
Nennen sie Nützliche Hilfsmethoden um Arrays und Listen umzuwandeln.
Collection in Array umwandeln:
Interface java.util.Collection<E>
- Object[ ] toArray()
- <T> T[ ] toArray(T[] a)
Array in Liste umwandeln:
Klasse java.util.Arrays
- static <T> List<T> asList(T... a)
Nenne nützliche Hilfsmethoden für Geordnete Collections und geordnete binäre Bäume.
für ungleiche Objekte, deshalb Set:
Klasse java.util.TreeSet<E>
- TreeSet()
- TreeSet(Comparator<? super E> comparator)
Klasse java.util.Collections
- static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
für Key/Value-Paare, deshalb Map:
Klasse java.util.TreeMap<K,V>
- TreeMap()
- TreeMap(Comparator<? super K> comparator)
Klasse java.util.Collections
- static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
Nenne einige Anwendungsgebiete von Automaten.
- Steuerungsautomaten (Ampelsteuerung, Billettautomat, Waschmaschine, Prozessor)
- Lexikalische Analyse (Gehört ein vorliegendes Wort zur Sprache?)
- Textsuche (Kommt ein bestimmtes Muster in einem Text vor?)
- Kommunikationsprotokolle
- Verarbeiten von Ereignisfolgen
- Verhaltensmodellierung (Steuerung, System, Dialog)
Wie heissen die drei Automaten-Grundtypen?
- Allgemeiner-Automat
- Mealy-Automat
- Moore-Automat
Was bewirkt ein Ereignis in einem Allgemeinen Automaten?
Ein Zustandswechsel ohne expliziete Ausgabe.
Was bewirkt ein Ereignis in einem Mealy-Automaten?
Ein Zustandswechsel (Zustandsübergang), der selber eine Ausgabe bewirkt.
Was bewirkt ein Ereignis in einem Moore-Automaten?
Ein Zustandswechsel. Jeder Zustand bewirkt selber eine Ausgabe.
Wie kann man einen Automaten implementieren?
Verschachtelte Switch statements.
Was ist ein Algorithmus?
Ein Algorithmus ist ein präzise festgelegtes Verfahren zur Lösung eines Problems; genauer gesagt von einer Problem- Klasse beinhaltend (unendlich) viele gleichartige Probleme.
Algorithmus = Lösungsverfahren
Wie beweist man die Gleichwertigkeit von Algorithmen?
Die Gleichwertigkeit von Algorithmen allgemein zu beweisen ist ein unlösbares Problem. Dies bedeutet, dass es kein Java-Programm geben kann, das den Quellcode von zwei Implementationen einliest und feststellt, ob sie gleichwertige Algorithmen repräsentieren oder nicht!
Weshalb hängen Algorithmen und Datenstrukturen eng zusammen?
Algorithmen operieren auf Datenstrukturen und Datenstrukturen bedingen spezifische Algorithmen.
Definieren Sie Komplexität im Bezug auf Algorithmen.
Wie hängt der Ressourcenbedarf von den Eingabedaten ab?
Ressourcenbedarf = f ( Eingabedaten )
Ressourcenbedarf:
- Rechenzeit → Zeitkomplexität
- Speicherbedarf → Speicherkomplexität
Eingabedaten:
- Grösse der Datenmenge
- Grösse eines Datenwertes
Zählen Sie die Wichtigsten Ordnungsfunktionen in der richtigen Reihenfolge auf.
Konstant O( 1 ) Hashing
Logarithmisch O( ln( n ) ) binäres Suchen
Linear O( n ) Suchen in Texten
n log n O( n · ln( n ) ) schlaues Sortieren
Polynomial O( n m ) einfaches Sortieren
Exponential O( d n ) Optimierungen
Fakultät O( n ! ) Permutationen, TSP
Was sind die Schwächen der Big-O-Notation
- Die Ordnung ignoriert konstante Faktoren. Diese können aber praktisch relevant sein!
- Die Ordnung berücksichtigt das Verhalten bei kleinen n nicht. Langsamere Algorithmen sind aber bei kleinen n oft auch brauchbar oder gar die bessere Wahl!
- Die exakte mathematische Analyse von vielen Algorithmen ist schwierig oder sogar unmöglich!
- Häufig muss man bei der Analyse differenzieren (Best-, Worst-, Average Case). Häufig ist der mittlere Fall ein besseres Mass für die Leistung eines Algorithmus, als der schlimmste.
Was haben Algorithmen und Datenstrukturen mit Selbstähnlichkeit und Selbstbezug zu tun?
Viele Algorithmen und Datenstrukturen sind von Natur aus selbstähnlich bzw. selbstbezüglich:
- Der ggT von (21, 15) ist gleich dem ggT von (21-15, 15).
- Ein Verzeichnis enthält Dateien und andere Verzeichnisse.
- Ein Ausschnitt einer Matrix, einer Liste, eines Baumes, eines Graphen ist wieder eine Matrix, eine Liste, ein Baum, ein Graph.
⇒ Grundlage für Rekursion
Wozu dient der Heap der JVM?
In diesem Speicherbereich werden die Objekte gespeichert, d.h. deren Instanzvariablen bzw. Zustände. Nicht mehr referenzierbare Objekte werden durch den Garbage Collector (GC) automatisch gelöscht.
Wozu dient der Call Stack der JVM?
Bei der Ausführung eines Programms «eine Kette» von Methoden abgearbeitet. Jeder Methodenaufruf bedingt gewissen Speicher, insbesondere für 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.
Was haben Rekursionen und Iterationen gemeinsam?
Sie sind gleich mächtig:
- Die Menge der berechenbaren Problemstellungen bei Verwendung der Rekursion und Verwendung der Iteration ist gleich.
- Eine rekursive Implementation lässt sich grundsätzlich immer in eine gleichwertige iterative Implementation umprogrammieren und umgekehrt.
Was sind die Motivationen für Rekursion?
- mächtiges Lösungskonzept
- häufig einfache und elegante Problemlösungen
- weniger Quellcode
- Korrektheit häufig einfacher zu zeigen
- Gewisse Programmiersprachen (zB Lisp, Prolog) kennen nur Rekursion!
Was sind die 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 Implementierung bevorzugen!
Was ist die Motivation fürs Sortieren?
Schneller & Effizienter Zugriff auf gewünschte Daten.
Beispiele:
- Person mit bestimmter ID
- Prozess mit höchster Priorität
- Zugsverbindung mit Abfahrtszeit früher als x
- Taxi, das am nächsten ist
-
- 1 / 62
-