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>
|
Create or copy sets of flashcards
With an upgrade you can create or copy an unlimited number of sets and use many more additional features.
Log in to see all the cards.
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
-
- 1 / 26
-