AlgoDat Fragen zu Vorlesung und Klausur

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Hochschule Fulda – FB ET Sommersemester 2010
Sortieren I - Bubblesort -
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
3. Kapitel: Komplexität und Komplexitätsklassen
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
der Universität Oldenburg
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Hochschule Fulda – FB ET Sommersemester 2010
EDV1 - Komplexe Datentypen
Arrays,Strings&Pointer in C/C++
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Dynamische Listen / Bäume
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Programmieren in C "Was ist wichtig?"
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Allgemeine Formulierung des Suchproblems
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Suchen und Sortieren.
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Programmieren in C / C++ Erste Schritte mit C++ Klassen und Objekte
Programmieren in C Grundlagen C 2
Programmieren in C Grundlagen C 1
Datentypen: integer, char, string, boolean
Programmieren in C Wie speichert C
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Programmieren in C Module und Bibliotheken
Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang
Hochschule Fulda – FB AI Sommersemester 2018
SS 04 Christiane Rauh Christian Hellinger
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Komplexität und Berechenbarkeit
 Präsentation transkript:

AlgoDat Fragen zu Vorlesung und Klausur Hochschule Fulda – FB AI Sommersemester 2016 http://ad.rz.hs-fulda.de Peter Klingebiel, HS Fulda, AI

Vorab: Was ist wichtig? AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Vorab: Was ist wichtig? AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

ALLES ! Vorab: Was ist wichtig? AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Der Alles-Markierer von Pia Valentin (AI - Digitale Medien – Danke an Pia für das Foto) 1. Platz im Fotowettbewerb „Zeig mir wie Du lernst“, HS Fulda 2014 AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Komplexität von Algorithmen 1 Wichtige Anforderungen an Algorithmen Laufzeiteffizienz Speichereffizienz Beispiel: Iteration vs. Rekursion? Beispiel: Sortieren in-place? sehr schwer abzuschätzen nur Näherungen möglich!  Modell eines einfachen Rechners  Definition von elementaren Operationen AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Komplexität von Algorithmen 2 Beispiele für Elementaroperationen Wert zuweisen, Zugriff auf Variable Arithmetische Operation / Logische Operation Zugriff auf Feldelement per Index Pointerzugriff bzw. –derefenzierung Aufruf einer Funktion / Rückkehr aus Funktion Elementaroperationen zählen liefert die Laufzeit des Algorithmus in Abhängigkeit der Menge der Eingabedaten Beispiel: Lineare Suche in Feld der Größe n AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

O-Notation 1 Berechnung der Laufzeit von Algorithmen ist sehr komplex, da sie von vielen Faktoren abhängig ist! Dennoch sind Aussagen zur Laufzeit eines Algorithmus sinnvoll und notwendig  Zur Laufzeitabschätzung Beschränkung auf „Rechnen in Größenordnungen“  Frage: Wie verändert sich die Laufzeit eines Algorithmus, wenn die Menge der Eingabedaten vergrößert wird? AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

O-Notation 2 Dabei werden konstante Faktoren und kleinere Beiträge zur Laufzeit vernachlässigt  O-Notation hilft obere Schranken für die Wachstumrate der Laufzeit eines Algorithmus zu finden Definition gegeben: zwei Funktionen f(n) und g(n) f(n) wächst asymptotisch nicht schneller als g(n), wenn es eine Konstante c > 0 und eine Zahl n0 gibt, so dass gilt: f(n) ≤ c g(n) für n ≥ n0 d.h. für alle n ≥ n0 ist f(n) nicht wesentlich größer als g(n) man sagt auch: f(n) ist O(g(n)) AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

O-Notation 3 Beispiele: 2n + 10 = O(n)  Wachstum linear n2 ≠ O(n)  Wachstum quadratisch, nicht linear 5n3 + 12n2 + 17 = O(n3) 4 log2 n + 9 = O(log2 n)  O-Notation gibt obere Schranken für die Wachstumrate einer Funktion an  O-Notation klassifiziert Funktionen gemäß ihres Wachstums vernachlässigt dabei kleine Problemgrößen, konstante Faktoren und Terme niedriger Ordnung AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

O-Notation 4 O-Notation definiert Komplexitätsklassen O(1) konstant O(n) linear O(n2) quadratisch O(logn) logarithmisch O(en) exponentiell Bestimmung der Größenordnung einfache for-Schleife  n·O(1) = O(n) geschachtelte for-Schleife  n·n·O(1) = O(n2) erst einfache for-Schleife, danach geschachtelte for-Schleife  O(n + n2) = O(n2) Binäre Suche  O(log2 n) AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Dynamische Listen 1 Beispiel: einfach verkettete Liste /* Datentyp f. einfach verkettete Liste */ typedef struct _slist { int value; /* Daten */ struct slist *next; /* Nachfolger */ } slist; Beispiel: doppelt verkette Liste /* Datentyp f. doppelt verkettete Liste */ typedef struct _dlist { int value; /* Daten */ struct dlist *prev; /* Vorgaenger */ struct dlist *next; /* Nachfolger */ } dlist; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 2 Objekte der Listentypen werden zur Laufzeit alloziert slist *insert(slist *llp, int value){ slist *nlp; nlp = (slist *) malloc(sizeof(slist)); besetzt bzw. initialisiert nlp-> value = value; nlp->next = NULL; und in die Liste eingehängt if(llp) llp->next = nlp; return(nlp); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 3 Einfache Liste: Erzeugung 1. Element Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 4 Einfache Liste: 2. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 5 Einfache Liste: 3. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 6 Einfache Liste: 4. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 7 Einfache Liste: 5. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 8 Erstes Element wird oft Wurzel, Anker oder Kopf der Liste genannt Durchlaufen der Liste i.d.R. von der Wurzel der Liste aus slist *root, *slp; for(slp = root; slp; slp = slp->next) printf("%d\n", slp->value); Wird das letzte Listenobjekt mit der Wurzel verlinkt  Ringpuffer Sortieren bei Erzeugen der Liste möglich Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 9 Doppelte Liste: Erzeugung 1. Element Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 10 Doppelte Liste: 2. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 11 Doppelte Liste: 3. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dynamische Listen 12 Doppelte Liste: 4. Element und Verkettung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Binärbäume Binäre Bäume AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 1 Speicherplatz von a, b,c  Orte im Speicher AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 2 Zuweisung a=4;  Wert an Speicherstelle AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 3 Programmstart und Aufruf von main() AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 4 Zuweisung i = 5; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 5 Zuweisung ip = &i; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Adressen und Pointer 6 Berechnung *ip + *ip; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Pointer und Pointersyntax Beispiel: einfache Pointersyntax int var = 11; int sum; int *varptr = &var; // varptr -> var *varptr += 4; // um 4 erhoehen sum = var + *varptr; // sum ? // sum = 15 + 15 = 30; Beispiel: Struct mit Pointer struct _list { // einfache Liste int value; // wert struct _list *next; // Ptr auf nächstes Elem. } struct _list *root, *lptr; lptr = root->next; root->next->next == lptr->next; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Insertion Sort Algorithmus und C-Code // insertionsort von Feld ia mit n Elementen void isort(int a[], int n) { int i, j, t; // Lauf- und Tempvariable for(i = 1; i < n; i++) { j = i; while(j > 0 && a[j] < a[j-1]) { t = a[j]; a[j] = a[j-1]; a[j-1] = t; --j; } } } AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Bubble Sort Algorithmus und C-Code // bubblesort von Feld ia mit n Elementen void bsort(int a[], int n) { int i, j, t; for(i = 0 ; i < n; i++) { for(j = 0 ; j < n-i-1; j++) { if(a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } } AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Quick Sort Algorithmus und C-Code //quicksortsort von Feld ia mit n Elementen void qsort(int a[], int l, int r) { int pivot = a[(l+r)/2], i = l, j = r, t; while(i <= j) { while(a[i] < pivot) i++; while(a[j] > pivot) j--; if(i <= j) { t = a[i]; a[i] = a[j]; a[j] = t; i++; j--; } } if(l < j) qsort(a, l, j); if(r > i) qsort(a, i, r); } AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Vergleich der Sortieralgorithmen AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Fragen zu Vorlesung / Klausur Komplexität von Algorithmen (O-Funktionen) Listen (Felder und Bäume) Pointer und Pointersyntax Sortieren Bitoperationen und Bitfelder AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Zahlendarstellung Integerzahlen Dezimal-, Sedezimal-, Binärdarstellung AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Logische Operatoren ! && || Logische Operationen Logische Operatoren ! && || Ergebnis: wahr  1, falsch  0 (Typ int) expr1 op expr2 AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Bitoperationen 1 Bitoperatoren ~ & | ^ expr1 op expr2 bzw. ~expr AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Bitoperationen 2 Bitshiftoperatoren << >> expr1 op expr2 Bits in expr1 um expr2 Bits verschoben Bsp. 1 << 2 1 um 2 Bits nach links Bsp: n >> 5 n um 5 Bits nach rechts AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Bitfelder 1 Zugriff auf Variable: kleinste Einheit Byte Wenn Zugriff auf einzelne Bits (oder Gruppen von Bits) erforderlich  bitfield Bitfeld: Sonderform des Struct mit Angabe der Bitanzahl je Element Beispiel 8 Bit-IO-Register: typedef struct _register { int ready: 1; // geraet bereit int read: 1; // geraet auf eingabe int write: 1; // geraet auf ausgabe int dummy: 1; // nicht benutzt int data: 4: // 4 datenbits fuer io } register_t; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

Bitfelder 2 Beispiele für Zugriffe: // register definieren register_t reg; // io register int data; // datenwert // register auf eingabe stellen und lesen reg.write = 0; reg.read = 1; if(reg.ready) // lesen, wenn bereit data = reg.data; // register auf ausgabe stellen und schreiben reg.read = 0; reg.write = 1; if(reg.ready) reg.data = data; AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI

 … und nun: viel Erfolg in der Klausur … AlgoDat - Fragen - Peter Klingebiel - HS Fulda - AI