/
Kartei Details
Karten | 83 |
---|---|
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 19.01.2016 / 01.03.2016 |
Weblink |
https://card2brain.ch/box/algorithmen_und_datenstrukturen_3_semester
|
Einbinden |
<iframe src="https://card2brain.ch/box/algorithmen_und_datenstrukturen_3_semester/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Wie kann der Algorithmusbegriff informell definiert werden?
- eindeutige Handlungsvorschrift
- löst eine Klasse von Problemen
- aus endlich vielen, wohldefinierten Handlungsvorschriften
- Überführung einer bestimmten Eingabe in eine bestimmte Ausgabe
Welche Schritte führen von einer Problemklasse zu einem auf dem Computer ausführbaren Programm zur Lösung dieses Problems?
Problemklasse --> Lösungsidee --> (Formalisierung/Beweis) --> Algorithmus --> (Programmierung) --> Programm --> (Compilierung/Interpretation) --> Computer
Welche Eigenschaften besitzen Algorithmen und was bedeuten sie?
- finit (statisch): Beschreibung des Algorithmus besitzt endliche Länge
- finit (dynamisch): zu jedem Zeitpunkt nur endlich viel Speicher benötigt
- effektiv: jeder Algorithmusschritt ist tatsächlich ausführbar
- reproduzierbar: unabhängig von einer speziellen Implementierung
- terminierend: nach endlich vielen Schritten wird für jede Eingabe ein Ergebnis geliefert
- korrekt
- deterministisch: Verfahrensablauf zu jedem Zeitpunkt fest vorgeschrieben
- determiniert: gleiche Eingaben führen immer zum gleichen Ergebnis
- effizient: sparsamer Umgang mit Ressourcen
Wie verläuft der Design- und Analyseprozess eines Algorithmus'?
1.) Problem verstehen
2.) Entscheidung über Computer-Ressourcen, exakte oder Näherungslösung, Algorithmen-Design-Technik
3.) Algorithmusentwurf
4.) Beweis der Korrektheit (von hier möglicherweise Zurückgehen zu 2. oder 3. erforderlich)
5.) Analyse des Algorithmus' (von hier möglicherweise Zurückgehen zu 2. oder 3. erforderlich)
6.) Implementierung des Algorithmus
Welche Designtechniken gibt es für Algorithmen?
- Brute Force
- Decrease-and-Conquer
- Divide-and-Conquer
- Transform-and-Conquer
- Space and Time Tradeoffs
- Dynamic Programming
- Greedy Technique
- Iterative Improvement
- Backtracking
- Branch and Bound
Was ist eine Datenstruktur?
Organisationsform von Daten im Speicher zur Vereinfachung und zur Steigerung der Effizienz von Algorithmen
Was ist ein abstrakter Datentyp (ADT) und welche Vorteile bringt die Verwendung von ADTs?
Menge von Werten und zugeordneten Operationen, die unabhängig von ihrer Implementierung spezifiziert sind.
Vorteile:
- größere Verständlichkeit durch Abstraktion
- Austauschbarkeit der Implementierungen
- Wiederverwendbarkeit
Wie werden ADTs definiert?
Name
Schnittstelle (Operation 1, Operation 2, ...)
Invariante: relevante, stets (während der Durchführung der Operation darf sie kurz verletzt werden) geltende Eigenschaft, z.B. Sortiertheit der Elemente
Welche Klassen von Operationen gibt es?
- Erzeugung (eines leeren Exemplars)
- Sondierende Operationen (Sondierung des Zustands, ohne ihn zu verändern)
- Verändernde Operationen
- Erschaffende Operationen (Erschaffung eines weiteren Exemplars aus einem oder mehreren bestehenden Exemplaren)
- Zerstörung (Speicherfreigabe)
Wie werden Operationen notiert?
Vorbedingung: Eigenschaft, die vor Ausführung der Operation gelten muss
Nachbedingung: Eigenschaft, die nach Ausführung der Operation zugesichert wird
Zustand einer Datenstruktur: zur Beschreibung der Wirkung einer Operation
Nennen Sie elementare Datenstrukturen!
- Linare Datenstrukturen: Arrays, einfach und doppelt verkettete Listen
- Graphen: als Adjazenzmatrizen oder -listen
- Bäume: Binärbäume, n-äre Bäume
Was zeichnet ein Array aus?
- Sequenz von n Elementen des gleichen Datentyps
- Ablage in zusammenhängenden Hauptspeicherbereichen
- Zugriff auf Elemente über Index
- Hauptvorteil: Elementzugriff in konstanter Zeit
- Hauptnachteil: feste Größe
Was zeichnet eine einfach verkettete Liste aus?
- Folge von beliebig vielen Listenelementen bestehend aus Datenfeld und Next-Zeiger
- Ablage der Elemente verteilt im Hauptspeicher
- Zugriff auf Liste erfolgt über Head-Zeiger
- Listenende durch leeren Next-Zeiger (null) markiert
- Hauptvorteil: flexibles Wachsen (oder Schrumpfen)
- Hauptnachteil: größerer Speicherbedarf durch Zeiger, langsamer
Was zeichnet eine doppelt verkettete Liste aus?
- wie einfach verkettete Liste, zusätzlich noch Zeiger auf vorheriges Listenelement
- Prev-Zeiger des ersten Elementes ist null
- Hauptvorteil: teilweise effizientere Operationen als einfach verkettete Liste
- Hauptnachteil: noch größerer Speicherbedarf als einfach verkettete Liste
Geben Sie die informelle und die formelle Beschreibung eines Graphen an.
informell: Punkte (Knoten) in der Ebene, die durch Liniensegmente (Kanten) verbunden sein können.
formell: Graph G (V,E) mit V= {v1, v2, ... , vn} als nicht-leere, endliche Menge von Knoten und E= {e1, e2, ... , en} als endliche Menge von Kanten der Form (vi, vj)
Welcher Unterschied besteht zwischen gerichteten und ungerichteten Graphen?
ungerichtete Kanten = Linien, kein Unterschied zwischen Kante (u,v) und (v,u) - u und v sind benachbart (adjazent)
gerichtete Kanten = Pfeile, Unterschied zwischen (u,v) und (v,u) - für (u,v) ist v adjezent zu u
Was sind Schleifen und Mehrfachkanten?
Schleife: Kante von einem Knoten auf sich selbst, nach Definition erlaubt
Mehrfachkanten: mehrere Kanten zwischen denselben Knoten, nach Definition nicht erlaubt, falls benötigt --> Erweiterung zu Multigraphen
Was lässt sich über die Kantendichte sagen?
vollständiger Graph: alle erlaubten Kanten vorhanden
dichter Graph: nur wenige fehlende Kanten
lichter Graph: nur wenige Kanten vorhanden
Was versteht man unter einer Adjazenz-Matrix?
- boolesche n x n Matrix
- Wert an (i,j) besagt, ob Kante von i nach j existiert
Was versteht man unter einer Adjazenz-Liste?
- jeder Knoten besitzt eine verkettete Liste
- Listenelemente sind die zum Knoten adjazenten Knoten
Wie werden gewichtete Graphen dargestellt?
- Zuordnung von Zahlenwerten zu den Kanten
- Werte repräsentieren eine Größe des Anwendungsbereiches (z.B. Dauer)
- Übernahme der Werte in die Adjazenz-Liste oder -Matrix
Was ist ein Pfad und wie wird die Pfadlänge bestimmt?
- Pfad: Folge von adjazenten Knoten
- einfacher Pfad: jeder Knoten taucht nur einmal auf
- Pfadlänge: ungewichtet = Anzahl der Kanten im Pfad, gewichtet = Summe der Kantengewichte
Inwiefern können gerichtete Graphen in Bezug auf den Zusammenhang unterschieden werden?
stark zusammenhängend: alle Knotenpaare sind verbunden
schwach zusammenhängend: zugrundeliegender ungerichteter Graph ist verbunden
Was sind Zusammenhangskomponenten eines Graphen?
Maximalgroße zusammenhängende Teilgraphen des Graphen
Was sind die Bedingungen für einen Zyklus in einem Graphen?
Zyklus: Pfad von einem Knoten zu sich selbst
- positive Pfadlänge
- keine Kante wird mehrmals durchlaufen
Was ist ein Baum?
Ein Baum ist ein ungerichteter, zusammenhängender, zyklenfreier Graph.
Was versteht man unter einem Wurzelbaum oder welche Vorteile bringt er mit sich?
- Auszeichnung eines Knotens als Wurzel
- Vorteile: Pfadrichtung zur Wurzel weg oder hin; eindeutige, einfache Pfade zwischen Wurzel und allen anderen Knoten
Erklären Sie folgende Begriffe für Bäume: Vorgänger, Nachfolger, direkter Vorgänger, direkte Nachfolger und Geschwisterknoten von v sowie Blätter
Vorgänger: alle Knoten auf dem Pfad von v zur Wurzel
Nachfolger: alle Knoten (außer v), deren Pfade zur Wurzel den Knoten v enthalten
direkter Vorgänger: der erste Knoten auf dem Pfad zur Wurzel
direkte Nachfolger: alle Knoten, die v als Elternknoten besitzen
Geschwisterknoten: alle Knoten mit demselben Elternknoten wie v
Blätter: Knoten ohne Nachfolger
Erklären Sie folgende Begriffe für Bäume: Tiefe eines Knotens v, Höhe des Baumes, Ebene i des Baumes, Grad eines Knotens v, Grad n eines Baumes
Tiefe eines Knotens: Länge des einfachen Pfades von v zur Wurzel
Höhe des Baumes: Länge des längsten einfachen Pfades von der Wurzel zu einem Blatt
Ebene i des Baumes: alle Knoten, bei denen die Länge des einfachen Pfades von der Wurzel zu ihnen den Wert i besitzt
Grad eines Knotens: Anzahl der direkten Nachfolger von v
Grad n eines Baumes: maximaler Grad aller Knoten eines Baumes
Was sind binäre Suchbäume?
- sortierter Binärbaum (Wurzelbaum mit dem Grad 2)
- Wert aller linken Nachfolger <= Wert des Knotens
- Wert aller rechten Nachfolger > Wert des Knotens
Was sind zentrale Aspekte bei der Analyse von Algorithmen?
- Korrektheit
- Laufzeiteffizienz
- Speicherplatzeffizienz
- Optimalität
Welche Frage steht im Mittelpunkt der Analyse der Laufzeiteffizienz?
Wie oft wird die Basisoperation des Algorithmus ausgeführt?
Basisoperation: Operation, die am stärksten zu der Laufzeit des Algorithmus beiträgt (Ausführungsanzahl von Eingabegröße abhängig)
Laufzeit T in Abhängigkeit von Eingabegröße n: T(n) ≈ Ausführzeit Basisoperation * Ausführungsanzahl C(n)
Was meint der mittlere Fall (in Bezug auf die Beschaffenheit einer Eingabe)?
NICHT der Durchschnitt aus best und worst case!
Annahmen über die Beschaffenheit und Wahrscheinlichkeit von "typischen" Eingaben notwendig
Was meint die Speicherplatzeffizienz?
Anzahl zusätzlich benötigter Speicherplätze
Was ist die asymptotische Wachstumsanalyse?
Ansatz, um konstante Faktoren und Besonderheiten bei kleinen Eingabegrößen ausblenden zu können.
Groß-O-Funktion von g(n): Klasse der Funktionen f(n), die nicht schneller als g(n) wachsen.
Groß-Theta-Funktion von g(n): Klasse der Funktionen f(n), die gleich schnell wie g(n) wachsen
Groß-Omega-Funktion von g(n): Klasse der Funktionen f(n), die mindestens so schnell wie g(n) wachsen
Was besagt die Regel von L'Hôspital?
Falls lim f(n) = unendlich und lim g(n) = unendlich sowie f´(n) und g´(n) existieren, dann gilt:
lim (f(n)/g(n)) = lim (f´(n)/g´(n))
Was besagt die Stirlingformel?
Formel zur Abschätzung der Fakultät
n! ≈ \(\sqrt{2 \pi n} ( \frac n e)^n\)
Welche Funktionen beschränken andere Funktionen?
Jede Exponentialfunktion beschränkt jedes Polynom: nk = O(rn)
Jedes (nicht-konstante) Polynom beschränkt jede Logarithmus-Funktion: logr n = O(nk)
Die Wurzelfunktion ist linear beschränkt: \(\sqrt{n}\) = O(n)
Nennen Sie wichtige Rechenregeln, was die asymptotischen Wachstumsfunktionen anbelangt.
f1(n) = O(g(n)) und f2(n) = O(h(n))
Summenformel: f1(n) + f2(n) = O( max(g(n), h(n)) )
Produktregel: f1(n) * f2(n) = O(g(n)*h(n))
Nennen Sie häufig auftretende Wachstumsfunktionen und ordnen Sie sie in aufsteigender Reihenfolge.
O(1) = konstant
O(log n) = logarithmisch
O(n) = linear
O(n * log n) = überlogarithmisch
O(n2) = quadratisch
O(n3) = kubisch
O(kn) = exponentiell
O(n!) = faktoriell