Christian Mansky mansky@wist.uni-linz.ac.at Design - Fallstudien Christian Mansky mansky@wist.uni-linz.ac.at.

Slides:



Advertisements
Ähnliche Präsentationen
Kurzwiederholung Informatik I, Teil I: Grundkonzepte
Advertisements

Programmierung 1 - Repetitorium
Informatik II – Kapitel 11
Thema: Algorithmusdesignverfahren Vu Hoang Lam IMN04 HTWK-Leipzig Obersemminar Softwareentwicklung.
Rekursion vs. Iteration
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Claudio Moraga; Gisbert Dittrich
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Rekursionen Erstellt von J. Rudolf im November 2001 /
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
Suche in Texten (Stringsuche )
G.Heyer Algorithmen und Datenstrukturen II 1 Algorithmen und Datenstrukturen II Wintersemester 2000 / 2001 Prof. Dr. Gerhard Heyer Institut für Informatik.
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
Synonyme: Stapel, Keller, LIFO-Liste usw.
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Geometrisches Divide and Conquer
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
DVG Gaußscher Algorithmus1 Gaußscher Algorithmus.
Gaußscher Algorithmus
Hauptseminar Automaten und Formale Sprachen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Rekursion Richard Göbel.
Vortrag zum Thema Brute - Force Algorithmus Vortragende
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Polynome und schnelle Fourier-Transformation
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
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.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Algorithmen und Datenstrukturen Übungsmodul 10
Algorithmen und Datenstrukturen SS 2005
Algorithm Engineering „Zeichenkettensuche“
Suchen In Texten Von Adriano Feola & Marc Draschl.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 5 Dr. W. Narzt u. Dr. A. Stritzinger.
2.4 Rekursion Klassifikation und Beispiele
Algorithmen und Datenstrukturen Übungsmodul 8
Algorithmen und Datenstrukturen Übungsmodul 11
Algorithmen und Datenstrukturen Übungsmodul 1
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
Komplexität von Algorithmen
Das Traveling Salesman Problem (TSP)
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Algorithmen und Datenstrukturen 1 SS 2002
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Unterprogramme / Methoden
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Suchen und Sortieren.
Rekursion – Speicherverwaltung
 Präsentation transkript:

Christian Mansky mansky@wist.uni-linz.ac.at Design - Fallstudien Christian Mansky mansky@wist.uni-linz.ac.at

Übersicht Das erste Problem und ein einfacher Algorithmus erster Lösungsversuch mit quadratischer Laufzeit mit linearer Laufzeit Suche in Zeichenfolgen: Aufgabenbeschreibung Brute Force Der Boyer-Moore Algorithmus (1) Der Boyer-Moore Algorithmus (2) Der Binomialkoeffizient: Die Aufgabenstellung Ein rekursiver Algorithmus Ein iterativer Algorithmus Ein linearer iterativer Algorithmus

Das Problem und ein einfacher Algorithmus Gegeben ist ein Eingabevektor x mit n Elementen (vom Typ Float). Gesucht ist die maximale Summe die in einem zusammenhängenden Subvektor der Eingabe gefunden werden kann.

Ein erster Lösungsversuch maxsofar = 0 for i= [0,n) for j= [i,n) sum = 0 for k= [i,j] sum += x[k] /* sum is sum of x[i..j] */ maxsofar = max (maxsofar, sum) Der Algorithmus hat kubische Laufzeit. Messungen auf meinem Computer: Bei n= 10.000 beträgt die Laufzeit ca. 14,5 Minuten. Bei n= 100.000 beträgt die Laufzeit schon ca. 10 Tage.

Ein Algorithmus mit quadratischer Laufzeit maxsofar = 0 for i= [0,n) sum = 0 for j= [i,n) sum += x[j] /* sum is sum of x[i..j] */ maxsofar = max (maxsofar, sum) Der Algorithmus hat quadratische Laufzeit. Das bedeutet bei n = 10.000 läuft der Algorithmus 797 ms. Bei n = 100.000 hat der Algorithmus eine Laufzeit von ca. 1,3 Minuten.

Ein Algorithmus mit linearer Laufzeit maxsofar = 0; maxendinghere = 0; for i= [0,n) maxendinghere = max (maxendinghere+x[i], 0); maxsofar = max (maxsofar, maxendinghere); Angenommen das Problem ist für x[0..i-1] gelöst: Das maximale Subarray in den ersten i Elementen befindet sich entweder in den ersten i-1Elementen (gespeichert in maxsofar), oder oder es endet auf Position i (gespeichert in maxendinghere) Die Laufzeit bei n= 1.000.000 Elementen beträgt 32 ms!

Suche in Zeichenfolgen: Aufgabenbeschreibung Gegeben: String text = „A string consisting ...“ String pattern =„sting“ Gesucht: int pos = 15

Suche in Zeichenfolgen: Brute Force i=1; pos = 0; while (i<length(text)-length(pattern)+1) & (pos=0) j=1 while (j<=length(pattern)) & (text[i+j-1] = pattern[j]) j=j+1 end if (j>length(pattern)) pos=i end; i:=i+1 /* Ergebnis in pos */ Laufzeitkomplexität: O(n^2)

Suche in Zeichenfolgen: Der Boyer-Moore Algorithmus (1) shift[s] = length(pattern)-1 shift[t] = length(pattern)-2 shift[i] = length(pattern)-3 shift[n] = length(pattern)-4 shift[g] = length(pattern)-5

Suche in Zeichenfolgen: Der Boyer-Moore Algorithmus (2) for i=[0,MAXCHAR] shift[i]=length(pattern) for j=[1,length(pattern)] shift[ORD(pattern[j])]= length(pattern) - j i = j = length (pattern) repeat if text[i]=pattern[j] i--; j--; else h=shift[ORD(text[i])] if (h>=length(pattern)-j+1) i=i+h else i=i+length(Pattern)-j+1 j = m; until (j=0) | (i>length(text)) If (j=0) pos=i+1; else pos=-1; return pos;

Der Binomialkoeffizient: Die Aufgabenstellung

Der Binomialkoeffizient: Ein rekursiver Algorithms binCoeff (int n, int k) { if (k==0 || k==n) return 1; else return binCoeff (n-1,k-1) + binCoeff (n-1, k); } + Einfacher Algorithmus - Ergebnisse die bereits berechnet wurden, werden nochmals berechnet - Sehr Laufzeitkomplex: O(2^n/n)

Der Binomialkoeffizient: Ein iterativer Algorithms /*Invariante: bc[n+1][k+1] wird mit 0 initialisiert*/ for i=[0, n] bc[i][0] = 1; bc[i][1] = i; for i=[1,n] for j=[2,k] bc [i][j] = bc[i-1][j-1]+bc[i-1][j]; } /*Ergebnis in bc[n][k]*/ Die Zeitkomplexität beträgt O(n*k)

Der Binomialkoeffizient: Ein linearer iterativer Algorithms nenner = zaehler1 = zaehler2 = 0 for i=[1,n] nenner *= i for j=[1,k] zaehler1 *= j for h=[1,n-k] zaheler2 *= h bc = i/(zahler1*zahler2) Verzicht auf Rekursion, wenn eine offensichtliche iterative Lösung existiert. Umgehe aber Rekursion nicht um jeden Preis! Probleme die ihrem Wesen nach eher rekursiv sind, können auch rekursiv implementiert werden.

Danke für die Aufmerksamkeit!