T&A AD Lernkarten
Lernkarten für AD
Lernkarten für AD
Set of flashcards Details
Flashcards | 26 |
---|---|
Language | Deutsch |
Category | Computer Science |
Level | University |
Created / Updated | 23.05.2017 / 23.06.2017 |
Weblink |
https://card2brain.ch/box/20170523_ta_ad_lernkarten
|
Embed |
<iframe src="https://card2brain.ch/box/20170523_ta_ad_lernkarten/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Was ist ein Algorithmus?
Einfach: Lösungsverfahren (Rezept, Anleitung)
oder: präzise festgelegtes Verfahren zur Lösung eines Problemes / Problem Klasse.
Welche Eigenschaften müssen Algorithmus haben (4)
- schrittweises Verfahren
- ausführbare Schritte
- eindeutiger nächster Schritt (deterministisch)
- endet nach vielen Schritten (terministisch)
Was ist eine Datenstruktur?
Konzept zur Speicherung und Organisation von Daten.
Struktur -> Anordnung zum Verwalten der Dateien
Operationen -> Ermöglichen Zugriff
(alg. Datenstruktur s9)
Was ist Komplexität?
Resourcenbedarf = f(Eingabedaten)
Eingabedaten:
Datenmende
Datenwerte
Resourcen:
Rechenzeit - Zeitkomplexität
Speicherbedarf - Speicherkomplexität
Big-O notationen - Auflisten
O(1)
O(log(n))
O(n)
O(log(n) * n)
O(n^m)
O(d^n)
O(n!)
Big O auf kleinen algorithem anwendbar?
Nein - da konstante Faktoren wichtig werden
Langsame algorithmen könne io. sein
Datenstrukturen Eigenschaften (3)
explizit / implizit - parent hat referenz / hat referenz
statisch / dynamisch - grösse on init / dynamische grösse
direkt / indirekt - zugriff direkt möglich / indirekt über refenzen
Rekursion Positiv (4+1) negativ (4)
positiv
- mächtiges Lösungskonzept
- häufig einfache und elegante Lösung
- weniger Quellencode
- Korrektheit häufig einfacher nachweisbar
- spezielle Programmiersprachen: Lisp, Prolog
negativ:
- schnell viele methodenaufrufe
- tendenziell langsamer als iterativ - da viele methodenaufrufe
- grosser call-stack benötigt
- gefahr - stack overflow
Datenstruktur - mögiche Eigenschaften bezüglich Reihenfolge (3)
- unsortiert - einfach einfügen
- Datenelemente behalten ihre Reihenfolge
- Datenstrukur ist immer sortiert
Datenstrukturen - elementare methoden
Basic:
Einfügen
Suchen
Ersetzen
Entfernen
Reihenfolge spezifisch:
Nachfolger
Vorgägner
Sortieren
Maximum / Minimum
Array Ordnung - einfügen / entfernen & Eigenschaften
einfügen:
unsoritert : O(1)
sortiert: O(log n) + O(n) => O(n)
Entfernen:
sortiert: O(log n) + O(n) => O(n)
unsortiert: O(n)
suche:
sortiert: O(log n)
unsortiert: O(n)
Eigenschaften:
statisch
explizit
direkt
Reihenfolge
Liste Ordnung - Einfügen & Entfernen & suche + Eigenschaften + Typen(2)
Einfügen:
sortiert: O(log n) (wenn skip-list) -> sonst O(n)
unsortiert: O(1)
entfernen:
sortiert: O(log n) (wenn skip-list)
unsortiert: O(n) (suchen & entfernen -> indirekt)
Suche:
sortiert: O(log n) (wenn skip-list)
unsortiert: O(n)
Eigenschaften:dynamisch
implizit
indirekt
Reihenfolge
Typen:
einfach (tale)
doppelt (tale + head)
Stack - funktionen / Java-Implementationen / vergleich List <-> Array
push() - O(1) / pop() - O(1)
Java-Imp.:
ArrayDeque
LinkedList
Deque
Array:
+ Platz reserviert
+ schnelles einfügen
- beschränkte grösse
List:
+ Leerer Stack sehr klein
+ dynamische Grösse
- etwas langsamer - da Speicher muss platz gemacht werden
Queue - function / Java-Implementation / vergleich List <-> Array
offer() O(1) / poll() O(1)
enqueue / dequeue
Java-Implementationen
LinkedList
ArrayDeque
Deque<I>
List:
+ leere queue fast kein platz
+ dynamische grösse
- etwas längsämer - speicherreservation
Array:
+ maximaler Platz bereits reserviert
+ daher schnell
- statische Grösse
Wieso Bäume? (2)
- Daten haben hirarchische Struktur
- Binärsuche mit O(log(n))
Bäume Arten (7)
- Out-Tree - pfeile root ->
- In-Tree - pfeile -> root
- Binär-Baum - häufigsten
- AVL-Baum
- B-Baum
- B*-Baum
- Binominal-Baum
Bäume Elemente (4)
- Wurzel (Root)
- Knoten (Node)
- Blatt (Leafe)
- Kanten (Edge)
Eigenschaften (7) + (3) - Baumstatus
- Ordnung - max childs
- Grad - Anzahl childs - Knoten
- Pfad - weg von Knoten -> Wurzel
- Tiefe - Anzahl Knoten auf Pfad von Knoten (Wurzel = 1)
- Niveau - Ebene
- Höhe - Höhe des Baumes - Tiefe des weit entferntesten Knoten
- Gewicht - Anzahl Knoten
- ausgefüllt - alle inneren Knoten maximum an Kindern
- voll / ausgeglichen - alle niveaus voll ausser das letzte linksbündig
- vollständig / komplett - voller / symetrischer Baum
Traversieren eines Binären Baumes - Arten(3)
Preorder - Haupreihenfolge
Postorder - Nebenreihenfolge
Inorder - Symetrische Reihenfolge
Operationen auf Binärem-Suchbaum? (5)
- Suchen
- Einfügen
- Entfernen
- Balancieren
- Traversieren
Binärere baum was beachten beim entfernen? (3)
- Blatt - just do it
- Knoten mit einem Blatt : Blatt -> Knoten
- Knoten mit zwei Blätter: Knoten mit weitesten linkes Blatt des rechten Teilbaumes austauschen (nächst grösserer Wert)
Hastable Konflikt - Kollision?
Speichergrösse zu Kollisions verminderung -> Konflikt
#Load-Faktor : Wie viel grösser ist die Datenstruktur als ihre Werte.
Equals Tipps (5)
- Final / Finalisieren
- Unit-Testen / gut testen
- Gleichheit nur auf Schlüsselwerte vergleichen
- @Override - compiler hilft wenn fehlgetibt und co
- Equals by Objektreferenzen weiter delegieren
Immutable Objects - Eigenschaften und pros
Eigenschaften:
- Keine Methoden die Daten mutieren
- final / keine spezialisierung der Klasse zulässig
- Attribute werden privat & final (nur beim erzeugen setzten)
- Exklusiver Zugriff
- nur getter
- keine mutierbaren referenzen ausserhalb
+ Thread safe ohne synchronisation
+ beliebig verteilbar - unproblematisch beim verwenden von Collections oder Datensharing
+ gut als Attributtypen bei komplexen strukturen
Einfach -> alles was man kann -> final
wenn get Funktion -> nur immutable Objekt oder eine kopie der referenz / instance
Thirdparty - libraries (3)
- Eclipse-Collections (kompakt & assagestarke API - wenig Speicher versprechen)
- HPPC (Grosse Set an elemtartypen
- google-guava (umfangreich)
sollte man 3rd-Party libraries verwenden?
Eher nicht: da
- abhängig
- zuerst Java-lib ansehen
- 3rd party-lib ausgiebig testen und vorteil aufzeigen
- wirklich nur bei special cases