Algorithmik mit Python

Größe: px
Ab Seite anzeigen:

Download "Algorithmik mit Python"

Transkript

1 Algorithmik mit Python Prof. Dr. Tobias Häberlein Hochschule Albstadt-Sigmaringen Studiengang Kommunikations- und Softwaretechnik Leipzig, T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

2 Überblick Implementierung von Algorithmen Sortieren Insertion-Sort Quicksort 3 Suchen Heaps Skip-Listen Bloomfilter Suchmaschinen 4 Graphen Grundlagen Kürzeste Wege Minimaler Spannbaum 5 Schwere Probleme Lösung des Traveling Salesman Problems Greedy-Heuristiken zur Lösung des TSP T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

3 Implementierung von Algorithmen Rekursion Eine Funktion heißt rekursiv, wenn Sie sich selbst ein oder mehrmals aufruft. Pro: Oft einfacher zu implementieren, als iterative Ansätze. Con: I. A. mehr Speicherverbrauch def faciter(n): erg = 3 for i in range(,n+) 4 erg = erg*i 5 return erg def facrec(n): if n==0: 3 return 4 else: 5 return n*fac(n-) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

4 Implementierung von Algorithmen Rekursive vs. Iterativ? Kochrezept Rekursionsabbruch: Was ist der einfache Fach (Größe n = 0 oder n = ). Rekursionsschritt: Gedankentrick: Angenommen, Aufgabe für alle kleineren Probleme gelöst wie kann man dann aus den Lösungen der kleineren Aufgaben, die Lösung der Gesamtaufgabe konstruieren. def rekalg(x): if len(x) is kleingenug: 3 return loesung(x) 4 else: y = rekalg(x) 7 y = rekalg(x) loesung = kombiniere(y,y 0 return loesung T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

5 Implementierung von Algorithmen Aufgaben: Rekursion () Aufgabe Definieren Sie die Funktion sum(n), die die Summe der Zahlen von bis n berechnen soll, rekursiv. Definieren Sie die Funktin len(lst), die die Länge der Liste lst berechnen soll, rekursiv. Aufgabe Implementieren Sie die Funktion ins(x,lst), die die Liste aller möglichen Einfügungen des Elements x in die Liste lst zurückliefert. Beispielanwendung: >>> ins(,[,3,4,5]) >>> [[,,3,4,5], [,,3,4,5], [,3,,4,5], [,3,4,,5], [,3,4,5,] Tipp: Das geht über eine rekursive Implementierung. Es empfiehlt sich auch die Verwendung einer Listenkomprehension. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

6 Implementierung von Algorithmen Aufgaben: Rekursion ()... und noch etwas schwieriger: Aufgabe 3 Implementieren sie eine rekursive Funktion perms(lst), die die Liste aller Permutationen der als Argument übergebenen Liste lst zurückliefert. Tipp: Verwenden Sie die eben definierte Funktion ins. Beispielanwendung: >>> perms([,,3]) >>> [[,,3],[,3,],[,,3],[,3,],[3,,],[3,,]] Aufgabe 4 Implementierung Sie die rekursive Funktion choice(lst,k), die eine Liste aller k-elementigen Teil mengen der Elemente aus lst zurückliefert. Beispielanwendung: >>> choice([,,3],) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

7 Implementierung von Algorithmen Rekursiv gehts einfacher Die rekursive Implementierung vieler Probleme ist viel einfacher! Beispiel: Zeichnen der Striche auf einem Lineal Rekursive Implementierung: from graphics import * linealcanv = GraphWin("Ein Lineal",000,50) 3 4 def strich(x,h): 5 '''Zeichne Strich an Position x mit Laenge h''' 6 l = Line(Point(x,0),Point(x,h)) 7 l.draw(linealcanv) 8 9 def lineal(l,r,h): 0 ''' Zeichne Lineal zwischen Pos l und r laengster Strich (in der Mitte) hat Hoehe h'''... T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

8 Implementierung von Algorithmen Aufgabe 5 Zeichnen Sie durch eine rekursiv definierte Python-Funktion und unter Verwendung der graphics-bibliothek folgenden Stern: Aufgabe 6 Schreiben Sie eine rekursive Prozedur baum(x,y,b,h) zum Zeichnen eines (binären) Baumes derart, dass die Wurzel sich bei (x,y) befindet, der Baum b breit und h hoch ist. Definieren Sie hierzu eine Python-Prozedur line(x,y,x,y), die eine Linie (x,y) zu (x,y) zeichnet. Beispiel für die Ausgabe von baum(0,0,6,4). 3 4 (0,0) 6 T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

9 Implementierung von Algorithmen Destruktiv vs. Nicht-Destruktiv list.sort() ist destruktiv: >>> l = list('hallo') >>> l.sort() # l wird veraendert >>> l ['a', 'h', 'l', 'l', 'o'] Vor-/Nachteile Pro Nicht-Destruktiv: sorted(list) ist nicht-destruktiv: >>> l = list('hallo') >>> sorted(l) # l unveraendert ['a', 'h', 'l', 'l', 'o'] Jeder destruktive Update verändert internen Zustand des Programms. Viele Zustände viele Abfragen viele mögliche Fehler Wenige Zustände besserer Überblick weniger mögliche Fehler Con Nicht-Destruktiv:...?... T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

10 Sortieren Insertion-Sort Insertion-Sort Funktionsweise So sortiert der Kartenspieler: Sukzessive werden Karten vom Stapel in die schon sortierten Karten auf der Hand eingefügt.. [53,6,63,94,56,8,7,44,70] 5. [6,53,56,63,94,8,7,44,70]. [6,53,63,94,56,8,7,44,70] 6. [6,8,53,56,63,94,7,44,70] 3. [6,53,63,94,56,8,7,44,70] 4. [6,53,63,94,56,8,7,44,70] 7. [6,8,53,56,63,7,94,44,70] 8. [6,8,44,53,56,63,7,94,70] Ergebnis: [6,8,44,53,56,63,70,7,94] T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

11 Sortieren Insertion-Sort Insertion-Sort Implementierung Wir teilen auf ins das Einfügen: def insatrightpos(alst, key): return [x for x in alst if x <=key] +[key] + 3 [x for x in alst if x>key] und das eigentliche Sortieren rekursiv implementiert. def insertionsort(alst): if len(alst)<=: return alst 3 else: return... Aufgabe 7 Ersetzen sie die... -Stelle in obigem Listing durch den notwendigen rekursiven Aufruf. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

12 Sortieren Insertion-Sort Insertion-Sort Implementierung in-place def insertionsort(lst): for j in range(,len(lst)): 3 key = lst[j] 4 i = j- 5 while i >= 0 and lst[i] > key: 6 lst[i+] = lst[i] 7 i = i - 8 lst[i+] = key Zwar schneller, aber schwieriger zu implementieren! T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

13 Sortieren Quicksort Quicksort Funktionsweise + Implementierung Wähle beliebiges Element lst j mit 0 j n aus (Pivot-Element). Zerteile lst in lst l (alle Elemente < lst j ) und lst r (alle Elemente lst j ) lst l und lst r werden rekursiv sortiert. Die rekursiv sortierten Teillisten werden einfach zusammengehängt. def quicksort(lst): if len(lst)<=: return lst # Rekursionsabbruch 3 pivot = lst[0] 4 lst_l = [a for a in lst[:] if a <= pivot] 5 lst_r = [a for a in lst[:] if a > pivot] 6 return... Aufgabe 8 Vervollständigen Sie die Implementierung von Quicksort an der... -Stelle. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

14 Sortieren Quicksort Quicksort Implementierung in-place Schneller, aber schwieriger zu implementieren! Die in-place-partitionierung def partitionip(lst,l,r): pivot=lst[l] 3 i=l- 4 j=r+ 5 while True: 6 while True: 7 j=j- 8 if lst[j]<=pivot: break 9 while True: 0 i=i+ if lst[i]>=pivot: break if i<j: 3 lst[i],lst[j]=lst[j],lst[i] 4 else: 5 return j Das eigentliche in-place-sortieren. def quicksortip(lst,l,r): if r>l: 3 i= partitionip(lst,l,r) 4 quicksortip(lst,l,i) 5 quicksortip(lst,i+,r) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

15 Suchen Heaps Die Heap-Struktur Ein Max-Heap ist ein fast vollständiger Binärbaum. Max-Heap-Eigenschaft: Der Schlüssel eines Knotens ist größer als die Schlüssel seiner beiden Kinder Ein Max-Heap: 3 Ein Min-Heap: Der Max-Heap kann repräsentiert werden als: [None,3,8,,9,7,9,5,,4,3,6] T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

16 Suchen Heaps Heap Aufgaben Implementierung Aufgabe 9 Implementieren Sie die Funktion leftchild(heap,i), die den Wert des linken Kindes von heap[i] zurückgibt. Gibt es kein solches, soll None zurückgeliefert werden. Implementieren Sie die Funktion rightchild(heap,i) entsprechend. 3 Implementieren Sie eine Funktion father(heap,i), die als Argument einen Heap heap und einen Index i übergeben bekommt und den Wert des Vaters von heap[i] zurückliefert. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

17 Suchen Heaps Heaps Einfügen Für viele Anwendungen wichtig: Effizientes Extrahieren des größten (kleinsten) Elements. Optimal dafür: Heaps! Einfügen: Aufgabe 0 Vervollständigen Sie den folgenden Code zur Implementierung der Einfüge-Operation in Heaps. def inserth(heap, x): heap.append(x) 3... T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

18 Suchen Heaps Heaps Min-Extrakt T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

19 Suchen Heaps Heaps Min-Extrakt-Implementierung def minextrakt(heap): returnval=heap[] 3 n=len(heap)- 4 heap[]=heap[n] # letztes Element an die Wurzel 5 del(heap[n]) 6 n-= # n soll weiterhin auf das letzte Element zeigen 7 i= 8 while i<=n/: 9 j=*i 0 if j<n and heap[j]>heap[j+]: j+= # waehle kleineres der beiden if heap[i]<=heap[j]: break heap[i],heap[j]=heap[j],heap[i] 3 i=j 4 return returnval Laufzeit: O(log n) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

20 Suchen Heaps Heaps build-heap-implementierung Hintere Hälfte der Liste (also lst[len(lst)/:]): Sammlung von len(lst)/ Heaps; noch über den vorderen Teil der Liste laufen und alle verletzten Heap-Bedingungen wiederherstellen. def buildheap(lst): # Es muss lst[0]==none gelten for i in range(len(lst)/,0,-): 3 minheapify(lst,i) Laufzeit: O(n) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

21 Suchen Heaps Heaps in Python Die Standard-Modul heapq implementiert Heaps. heapq.heapify(lst): Transformiert die Liste lst in-place in Min-Heap; heapq.heappop(lst): Enfernt kleinestes Element aus Heap lst; heapq.heappush(lst,x): Fügt ein neues Element x in Heap lst ein; T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

22 Suchen Skip-Listen Skip-Listen Beispiel: Sind ähnlich zu verketteten Listen, außer, dass ein Element mehrere Vorwärtszeiger haben kann Für Skip-Liste muss gelten: Wkeit, dass zufällig gewählter Eintrag i Vorwärtszeiger hat: p i ( p) Randomisierte Impl. from random import random p =... # Wkeit mit 0<p< 3 def randheight(): 4 i=0 5 while random()<=p: i+= 6 return min(i,maxheight) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

23 Suchen Skip-Listen Skip-Listen Implementierung class SLEntry(object): def init (self, key, ptrs=[], val=none): 3 self.key = key ; self.ptrs = ptrs ; self.val = val 4 5 class SkipList(object): 6 def init (self): 7 self.tail = SLEntry(Infty) 8 self.head = SLEntry(None,[self.tail]*(MaxHeight+)) 9 self.height = - Eine leere Skipliste hat ein tail Ein Ende mit key= head Ein Kopf mit allen Vorwärtszeigern auf tail T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

24 Suchen Skip-Listen Skip-Listen Suche Suche nach einem Eintrag mit Schlüssel key: class SkiptList(object):... 3 def search(self, key): 4 x = self.head 5 for i in range(self.height,-,-): 6 while x.ptrs[i].key < key: x = x.ptrs[i] 7 x = x.ptrs[0] 8 if x.key == key: return x.val 9 else: return None T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

25 Suchen Skip-Listen Skip-Listen Einfügen 7 Wähle Höhe i durch Zufallsentscheidung (randheight) Es müssen i Zeiger anderer Elemente umgebogen werden. updateptrs[3] updateptrs[] updateptrs[] 44 updateptrs[0] Der i-te Vorwärtszeiger von updateptrs[i] muss umgebogen werden Aufgabe Implementieren Sie eine Methode insert(key,val) der Klasse SkipList T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

26 Suchen Skip-Listen Skip-Listen Aufgaben () Aufgabe Implementieren Sie die Funktion str, so dass Skip-Listen folgendermaßen ausgegeben werden: >>> print skiplist >>> [ (30 ), (33 4), (40 3), (77 ), (98 ), (09 ), (93 3) ] Ausgegeben werden soll also der Schlüssel jedes Elements zusammen mit der Höhe des Elements. Aufgabe 3 Schreiben Sie eine Methode keys(), die eine Liste der in der Skip-Liste gespeicherten Schlüsselwerte zurückliefert. Schreiben Sie eine Methode vals(), die eine Liste der in der Skip-Liste gespeicherten Werte zurückliefert. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

27 Suchen Skip-Listen Skip-Listen Aufgaben () Aufgabe 4 Oft wird eine effiziente Bestimmung der Länge einer Skip-Liste benötigt. Erweitern Sie die Klasse SkipList um ein Attribut length, passen Sie entsprechend die Methoden insert und delete an und geben Sie eine Implementierung der Methode len an, so dass die len-funktion auf Skip-Listen anwendbar ist. Aufgabe 5 Schreiben Sie eine Funktion numheights(h), die die Anzahl der Elemente mit Höhe n zurückliefert. Schreiben Sie eine Funktion avgheight(s), die die durchschnittliche Höhe eines Elementes der Skip-Liste s berechnet. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

28 Suchen Bloomfilter Bloomfilter Grundlegendes Sehr platz- und zeiteffiziente Möglichkeit des Membership-Tests. Bloomfilter sind probabilistisch: Möglichkeit falsch-positiver Antworten. Datensatz in Bloomfilter Antwort immer korrekt! Datensatz nicht in Bloomfilter Antwort nicht immer korrekt! lang- samer Speicher Eine Anwendung unter vielen: w S? Bloomfilter nein ja y S? nein ja x S? ja nein z S? T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

29 Suchen Bloomfilter Bloomfilter Funktionsweise Bsp: Einfügen von eine h 0 (eine) = 3, h 0 (Einführung) =, h 0 (Informatik) = 6 h (eine) =, h (Einführung) = 8, h (Informatik) = false false false false false false false false false false Einfügen von Einführung = h (eine) = h 0 (eine) false true false true false false false false false false = h 0 (Einführung) false true false true false false false false true false Einfügen von Informatik false true false true false false true true true false = h (Einführung) = h 0 (Informatik) = h (Informatik) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

30 Suchen Bloomfilter Bloomfilter Implementierung class BloomFilter(object): def init (self, h, m): 3 self.k = len(h) ; self.h = h 4 self.a = [False]*m 5 self.m = m 6 7 def insert(self,x): 8... # Siehe Aufgabe 9 def elem(self,x): 0... # Siehe Aufgabe Aufgabe 6 Implementieren Sie insert und elem. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

31 Suchen Suchmaschinen Suchmaschinen Aufbau einer Suchmaschine Web Datenbank Dateisystem Crawler Indexer Index Suchanfrage Bearbeitung GUI Der invertierte Index... das Herz jeder Suchmaschine! Liste aller Wörter... Hashtabelle Heap Heapsort Hornerschema Insertion Sort... [430,0,344,98,...] T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57 [0,7,...] [0,...]

32 Suchen Suchmaschinen Implementierung def crawl(self, path): class Index(object): def tupl(x,y): return (x,y) def init (self, path=''): 3 for dirpath, dirnames, filenames \ 3 self.docid = 0 4 in os.walk(path): 4 self.ind = {} 5 for file in filenames: 5 self.docind = {} 6 f = os.path.join(dirpath, file) 6 if path!='': self.crawl(path) 7 if istxt(f): 8 self.addfile(f) def addfile(self, file): def tupl(x,y): return (x,y) 3 self.docind[self.docid] = file 4 filehandle = open(file) 5 filecont = filehandle.readlines() ; filehandle.close() 6 filecont = map(tupl, xrange(0,len(filecont)), filecont) 7 words = [(word.lower(),pos) for (pos,line) in filecont 8 for word in line.split() 9 if len(word) >=3 and word.isalpha() ] 0 for word,pos in words: self.toindex((word,pos), self.docid) self.docid+= T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

33 Suchen Suchmaschinen Aufgaben Aufgabe 7 Implementieren Sie die fehlende Methode toindex((word,pos),docid) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

34 Graphen Grundlagen Repräsentation von Graphen Der folgende Graph... mit: 5 G = (V, E) mit V = {,, 3, 4, 5}, 3 4 E = {(, ), (, ), (, 3), (, 3), (, 4), (3, 4), (4, 5)}... kann repräsentiert werden als... Adjazenzmatrix Adjazenzliste {, 3, 4} {, 3} {4} {5} {} T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

35 Graphen Grundlagen Repräsentation in Python class Graph(object): def init (self,n): 3 self.vertices = [] 4 self.numnodes = n 5 for i in range(0,n+): 6 self.vertices.append({}) self.vertices ist die Adjazenzliste deren Einträge dict-objekte sind die adjanzente Knoten (inkl. evtl. Gewichte) enthalten. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

36 Graphen Grundlagen Wichtige Methoden () Aufgabe 8 Implementieren Sie die Graph-Methoden addedge, isedge, G, V, E und füllen sie hierzu die Lücken in folgendem Listing: class Graph(object):... 3 def addedge(self,i,j,weight=none): def isedge(self,i,j): def G(self,i): def V(self): 0... def E(self):... T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

37 Graphen Grundlagen Wichtige Methoden () Aufgabe 9 Erweitern Sie die Klasse Graph um die Methode Graph.w(i,j), die das Gewicht der Kante (i, j) zurückliefert (bzw. None, falls die Kante kein Gewicht besitzt). Aufgabe 0 Erweitern Sie die Klasse Graph um die folgenden Methoden: Eine Methode Graph.isPath(vs), die eine Knotenliste vs übergeben bekommt und prüft, ob es sich hierbei um einen Pfad handelt. Eine Methode Graph.pathVal(vs), die eine Knotenliste vs übergeben bekommt. Handelt es sich dabei um einen gültigen Pfad, so wird der Wert dieses Pfades (d. h. die Summe der Gewichte der Kanten des Pfades) zurückgeliefert. Andernfalls soll der Wert (in Python: float('inf')) zurückgeliefert werden. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

38 Graphen Kürzeste Wege Algorithmus von Warshall Berechnet die kürzesten Wege zwischen allen Knotenpaaren. Berechnungsschema: Berechne W 0 : alle kürzesten Wege mit keinen Zwischenknoten Aus W k berechnet W k : alle kürzesten Wege mit Zwischenknoten {,..., i} 3 Lösung: W n Schritt von W k nach W k : k Pfad mit Knoten aus {,..., k} i j Pfad mit Knoten aus {,..., k } Es gilt: W k [i, j] := min{ W k [i, j], W k [i, k] + W k [k, j] } T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

39 Graphen Kürzeste Wege Warshall Implementierung def warshall(graph): n = graph.numnodes+ 3 W = [ [graph.w(i,j) for j in graph.v()] for i in graph.v() ]# W_ W: Adjazenzmatrix des Graphen, also W 0. Aufgabe Vervollständigen Sie die Implementierung des Warshall-Algorithmus, d. h. ersetzen sie die...-stelle durch Code, der Sukzessive W, W,..., W n berechnet. Aufgabe Was ist die Laufzeit des Warshall-Algorithmus? D. h. wie viele Berechnungsschritte in der O-Notation benötigt der Warshall-Algorithmus zur Berechnung der kürzesten Wege eines Graphen mit n Knoten? T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

40 Graphen Kürzeste Wege Der Dijkstra-Algorithmus Berechnet nicht alle Abstände zwischen allen Knoten, sondern berechnet ausgehend von einem Knoten v die Abstände l[u] (Länge der kürzesten Wege) zu allen Knoten u V. Edsger Dijkstra (930-00) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

41 Graphen Kürzeste Wege Der Dijkstra-Algorithmus Funktionsweise Dijkstra ist greedy: Knoten werden sukzessive abgehakt : Es kommt immer derjenige Knoten an die Reihe, der momentan den geringsten l-wert hat. Es wird versucht, die Abstände aller seiner Nachbarn zu verbessern. a b c d 5 l[u]=0 u f e g 8 W = {a, b, c, d, e, f, g, u} l[c]= l[u]=0 l[f ]= a c u f b d e g 0 8 l[d]=4 l[e]=7 l[g]=3 W = {a, b, c, d, e, g} l[c]=9 l[u]=0 l[f ]= a c u f b d e g 0 8 l[b]=4 l[d]=4 l[e]=6 l[g]=3 W = {a, b, c, e} l[c]= l[u]=0 l[f ]= a c u f b d e g 0 8 l[d]=4 l[e]=7 l[g]=5 W = {a, b, c, d, e, f, g} l[c]= l[u]=0 l[f ]= a c u f b d e g 0 8 l[d]=4 l[e]=7 l[g]=3 W = {a, b, c, d, e} l[a]= l[c]=9 l[u]=0 l[f ]= a c u f b d e g 0 8 l[b]=3 l[d]=4 l[e]=6 l[g]=3 W = {a, b} T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

42 Graphen Kürzeste Wege Der Dijkstra-Algorithmus Implementierung def dijkstra(u,graph): n = graph.numnodes 3 l = { u : 0 } ; W = graph.v() 4 F = [] ; k = {} 5 for i in range(0,n): 6 lv,v = min([ (l[lk],lk) for lk in l.keys() if lk in W ]) 7 W.remove(v) 8 if v!=u: F.append(k[v]) return l,f W: Menge der noch zu bearbeitenden Knoten k[v]: Vorgängerknoten von v auf kürzestem Weg nach v (vorläufig). F: Vorgängerknoten von v auf kürzestem Weg nach v (final). Aufgabe 3 Vervollständigen Sie die Implementierung des Dijkstra-Algorithmus. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

43 Graphen Minimaler Spannbaum Minimaler Spannbaum Kruskal-Algorithmus Spannbaum ˆ= Teilgraph G T = (V T, E T ) eines ungerichteten zusammenhängenden Graphen G = (V, E), der ein Baum (also kreisfrei und zusammenhängend) ist. a b c d e f g h a b c d e f g h a b c d e f g h a b c d e f g h a b c d e f g h Anwendungen: Möglichst preisgünstiges zusammenhängiges Netzwerk. Vermeidung von redundanten Sendepfaden. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

44 Graphen Minimaler Spannbaum Kruskal-Algorithmus Funktionsweise Algorithmus ist greedy: In jedem Schritt wird immer genau eine Kante hinzugenommen, für die gilt: minimales Gewicht + ohne dass Kreis entsteht.... solange, dass bis dies nicht mehr geht. Minimaler Spannbaum gefunden T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

45 Graphen Minimaler Spannbaum Kruskal-Algorithmus Implementierung def kruskal(graph): alledges = [(graph.w(i,j),i,j) for i,j in graph.e_undir()] 3 alledges.sort(reverse=true) # absteigend 4 spanntree = [] 5 while len(spanntree) < len(graph.v())- and alledges!=[]: 6 (w,i,j) = alledges.pop() 7 if not buildscircle(spanntree,(i,j)): 8 spanntree.append((i,j)) 9 return spanntree Aber: Sortieren aller Kanten:O( E log E ) ineffizienter als Verwendung eines Heap: O( E + V log E ) Implementierung von buildscircle? T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

46 Graphen Minimaler Spannbaum Union-Find-Datenstruktur Bietet effiziente Implementierung der Mengenoperationen Vereinigung (zweier Mengen) union(x,y) x und y eindeutige Repräsentanten einer Menge... Suche eines Elementes in einer Menge find(x) liefert eindeutigen Repräsentanten der Menge, die x enthält. Gleichzeitig: Effizienter Test, ob durch das Hinzufügen einer Kante (i, j) ein Kreis entsteht (a):find(3) find(6) (b):find(8) find(9) (c):find(7) find(9) (d):find(4) find(8) (e):find(5) find(6) (f):find() find(3) (g):find() find() (h):find(6) find(7) T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, /

47 Graphen Minimaler Spannbaum Union-Find im Kruskal-Algorithmus Kante {i, j} hinzufügen? Zwei Fälle: Falls find(i)==find(j): Nicht hinzufügen! Denn: i und j befinden sich in derselbsen Zusammenhangskomponente. i und j verbunden. Es würde ein Kreis entstehen. Falls find(i)!=find(j): Hinzufügen! Denn: i und j bisher nicht verbunden. Es entsteht kein Kreis T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

48 Graphen Minimaler Spannbaum Union-Find Implementierung self.parent: Speichert für jeden Knoten den Elternknoten. self.parent[i]== 0 gdw. i hat keinen Elternknoten. find(x): Liefert Wurzel des Baumes, der x enthält. union(x,y): fügt zwei Bäume zusammen, indem die Wurzel des einen Baumes (der y enthält) als Kind unter die Wurzel des anderen Baumes (der x enthält) gehängt wird. class UF(object): def init (self,n): 3 self.parent = [0]*n 4 5 def find(self,x): 6 while self.parent[x] > 0: 7 x = self.parent[x] 8 return x 9 0 def union(self,x,y): self.parent[y] = x T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

49 Graphen Minimaler Spannbaum Union-Find Aufgaben/Verbesserungen Aufgabe 4 Implementieren Sie für die Klasse UF die str-funktion, die ein Objekt der Klasse in einen String umwandelt. Beispiel-Ausgabe: >>> uf = UF(0) >>> uf.union(,) ; uf.union(,3) ; uf.union(5,6) ; uf.union(8,9) >>> str(uf) >>> '{,, 3} {4} {5, 6} {7} {8, 9} ' Eine sehr nützliche Verbesserung: Balancierung! Aufgabe 5 Verbessern Sie die Union-Find-Impl. indem Sie auf die Balancierung der Bäume achten. find(x) sollte nur dann als Kind unter die Wurzel von find(y) gehängt werden, wenn Höhe(find(x)) < Höhe(find(y)); andernfalls: find(y) unter die Wurzel von find(x) hängen. Tipp: (Negative) Höhe in der Wurzel speichern. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

50 Graphen Minimaler Spannbaum Union-Find Aufgaben/Verbesserungen Eine weitere sehr nützliche Verbesserung: Pfad-Komprimierung! Aufgabe 6 find(x) findet immer den Pfad von x zur Wurzel. füge danach Direktkante von x zur Wurzel ein.... und auch Direktkanten für alle Knoten auf dem Pfad. Implementieren Sie diese Verbesserung. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

51 Graphen Minimaler Spannbaum Kruskal-Algorithmus Aufgabe Aufgabe 7 Implementieren Sie den Kruskal-Algorithmus unter Verwendung der Union-Find-Datenstruktur. Aufgabe 8 Man kann den minimalen Spannbaum auch finden, indem man genau umgekehrt wie der Kruskal-Algorithmus vorgeht: Man beginne mit allen im Graphen enthaltenen Kanten und entfernt Kanten mit dem momentan höchsten Gewicht nur dann aber, wenn man dadurch den Graphen nicht auseinander bricht. Geben Sie eine Implementierung des umgekehrten Kruskal-Algorithmus an. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

52 Schwere Probleme Lösung des Traveling Salesman Problems Das TSP-Problem Bremen Hamburg TSP ˆ= Travelling Salesman Problem. Gegeben: n Städte Gesucht: Kürzeste Rundtour, die jede Stadt genau einmal besucht. Duisburg Essen Bochum Dortmund Düsseldorf Wuppertal Köln Bonn Hannover Bielefeld Frankfurt am Main Mannheim Stuttgart Nürnberg Berlin Leipzig Dresden München Lösung des TSP für die 0 größten Deutschen Städte. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

53 Schwere Probleme Lösung des Traveling Salesman Problems TSP-Lösung durch Ausprobieren Lösung des TSP ˆ= Permutation der n Städte. Durchprobieren aller Permutationen perms(graph.v()) Aufgabe 9 Implementieren Sie den Brute-Force-Lösungsansatz Durchprobieren aller Permutationen, um die optimale Lösung des TSP zu finden und vervollständigen Sie hierzu den folgenden Code: def TSPBruteForce(graph): nodelist = graph.v()[:] 3 return... Tipp: Verwenden Sie graph.pathval um die Länge eines Pfades zu bestimmen. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

54 Schwere Probleme Lösung des Traveling Salesman Problems TSP-Lösung durch Dynamische Programmierung Fürs TSP gilt das sog. (Bellmannsche) Optimalitätsprinzip: Eine optimale Lösung setzt sich zusammen aus kleineren optimalen Lösungen. Lösung durch Dynamische Programmierung möglich: Zuerst: Lösungen der kleinen Teilprobleme berechnen und Zwischenergebnisse in Tabelle speichern. Bei Berechnung der größeren Teilprobleme: Auf Tabelle zurückgreifen. Fürs TSP gilt: T (i, S): Wert der kürzesten Tour, startend bei Knoten i, die alle Knoten aus S genau einmal besucht und bei Knoten endet Dann gilt: ( ) T (i, S) = min w(i, j) + T (j, S \ {j}) j S T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

55 Schwere Probleme Lösung des Traveling Salesman Problems TSP-Lösung durch Dynamische Programmierung () Die Formel ( ) T (i, S) = min w(i, j) + T (j, S \ {j}) j S Entspricht in Python (T ist Dict-Objekt): T[(i,S)] = min( graph.w(i,j)+t[(j,diff(s,[j]))] for j in S) def tsp(graph): n = graph.numnodes 3 T = {} 4 for i in range(,n+): T[(i,())] = graph.w(i,) 5 for k in range(,n-): 6... Aufgabe 30 Vervollständigen Sie die Implementierung und ersetzen Sie die... durch den entsprechenden Code. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

56 Schwere Probleme Greedy-Heuristiken zur Lösung des TSP Nearest-Neighbor-Heuristik Von der aktuellen Stadt aus wählt man einfach immer die nächste aus. Aufgabe 3 Implementieren Sie die Nearest-Neighbor-Heuristik für das Traveling- Salesman-Problem und testen Sie diese durch Berechnung der kürzesten Tour durch die größten 0 deutschen Städte.... größten 40 deutschen Städte. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

57 Schwere Probleme Greedy-Heuristiken zur Lösung des TSP Insertion-Heuristiken Man beginnt mit sehr kurzer ( Städte) Tour und fügt sukzessive weitere Knoten hinzu. Folgende Strategien: Nearest Insertion : Als nächtes wird derjenige Knoten hinzugefügt, der zur momentanen Tour den geringsten Abstand hat. Farthest Insertion : Als nächtes wird derjenige Knoten hinzugefügt, der zur momentanen Tour den größten Abstand hat. Random Insertion : Als nächtes wird zufällig ein noch nicht in der Tour befindlicher Knoten zur Tour hinzugfügt. Aufgabe 3 Implementieren Sie die Nearest/Farthest/Random-Insertion-Heuristik. T. Häberlein HS AlbSig Algorithmik mit Python Leipzig, / 57

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

Aufgabe 3: Übersetzen Sie die folgenden natürlich-sprachlichen Aussagen in die Sprache der

Aufgabe 3: Übersetzen Sie die folgenden natürlich-sprachlichen Aussagen in die Sprache der Aufgabe 1: Sind die folgenden Abbildungen jeweils injektiv, surjektiv und/oder bijektiv? (a) f 1 (x) = x, mit f 1 : R + R + (b) f (x) = x, mit f : R R (c) f 3 (x) = x, mit f 3 : R R (d) f 4 (x) = 3x, mit

Mehr

Anmerkungen zur Übergangsprüfung

Anmerkungen zur Übergangsprüfung DM11 Slide 1 Anmerkungen zur Übergangsprüfung Aufgabeneingrenzung Aufgaben des folgenden Typs werden wegen ihres Schwierigkeitsgrads oder wegen eines ungeeigneten fachlichen Schwerpunkts in der Übergangsprüfung

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Konzepte der Informatik

Konzepte der Informatik Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Paradigmen im Algorithmenentwurf Problemlösen Problem definieren Algorithmus entwerfen

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:... Studiengang Bachelor of Computer Science Modulprüfung Praktische Informatik 1 Wintersemester 2010 / 2011 Name:... Vorname:... Matrikel-Nr.:... Unterschrift:... Hinweise: 1.) Schreiben Sie Ihren Namen und

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

Suchen und Sortieren Sortieren. Heaps

Suchen und Sortieren Sortieren. Heaps Suchen und Heaps (Folie 245, Seite 63 im Skript) 3 7 21 10 17 31 49 28 14 35 24 42 38 Definition Ein Heap ist ein Binärbaum, der die Heapeigenschaft hat (Kinder sind größer als der Vater), bis auf die

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel 3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel EADS 3.1 Konstruktion von minimalen Spannbäumen 16/36

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7) Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.rwth-aachen.de/i2/dsal0/ Algorithmus 8. Mai 200 Joost-Pieter

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 16.10.2015 Technische Universität Braunschweig, IPS Inhaltsverzeichnis Suchen Binärsuche Binäre Suchbäume 16.10.2015 Dr. Werner

Mehr

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: AVL-Bäume Analyse (Folie 85, Seite 39 im Skript) Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: 0 falls n = 0 F n = 1 falls

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2006 3. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik [email protected] Algorithmen für Graphen Fragestellungen: Suche

Mehr

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können. 6. Bäume Lernziele 6. Bäume Lernziele: Definition und Eigenschaften binärer Bäume kennen, Traversierungsalgorithmen für binäre Bäume implementieren können, die Bedeutung von Suchbäumen für die effiziente

Mehr

15 Optimales Kodieren

15 Optimales Kodieren 15 Optimales Kodieren Es soll ein optimaler Kodierer C(T ) entworfen werden, welcher eine Information (z.b. Text T ) mit möglichst geringer Bitanzahl eindeutig überträgt. Die Anforderungen an den optimalen

Mehr

EndTermTest PROGALGO WS1516 A

EndTermTest PROGALGO WS1516 A EndTermTest PROGALGO WS1516 A 14.1.2016 Name:................. UID:.................. PC-Nr:................ Beachten Sie: Lesen Sie erst die Angaben aufmerksam, genau und vollständig. Die Verwendung von

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Graphen: Datenstrukturen und Algorithmen

Graphen: Datenstrukturen und Algorithmen Graphen: Datenstrukturen und Algorithmen Ein Graph G = (V, E) wird durch die Knotenmenge V und die Kantenmenge E repräsentiert. G ist ungerichtet, wenn wir keinen Start- und Zielpunkt der Kanten auszeichnen.

Mehr

Programmieren I. Kapitel 7. Sortieren und Suchen

Programmieren I. Kapitel 7. Sortieren und Suchen Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN RALF HINZE Institut für Informatik III Universität Bonn Email: [email protected] Homepage: http://www.informatik.uni-bonn.de/~ralf Februar, 2001 Binäre Suchbäume

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 Bäume [email protected] 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden

Mehr

Algorithmische Mathematik

Algorithmische Mathematik Algorithmische Mathematik Wintersemester 2013 Prof. Dr. Marc Alexander Schweitzer und Dr. Einar Smith Patrick Diehl und Daniel Wissel Übungsblatt 6. Abgabe am 02.12.2013. Aufgabe 1. (Netzwerke und Definitionen)

Mehr

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert Inhalt Einführung 1. Arrays 1. Array unsortiert 2. Array sortiert 3. Heap 2. Listen 1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert 3. Bäume

Mehr

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein. Aufgabe 10 Binäre Bäume a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge, 28, 35, 31, 9, 4,, 17, 37, 25 ein. 1. Einfügen von : 3. Einfugen von 35: 2. Einfügen von 28: 28 28 10. Einfügen

Mehr

1 C H R I S T O P H D R Ö S S E R D E R M A T H E M A T I K V E R F Ü H R E R

1 C H R I S T O P H D R Ö S S E R D E R M A T H E M A T I K V E R F Ü H R E R C H R I S T O P H D R Ö S S E R D E R M A T H E M A T I K V E R F Ü H R E R L Ö S U N G E N Seite 7 n Wenn vier Menschen auf einem Quadratmeter stehen, dann hat jeder eine Fläche von 50 mal 50 Zentimeter

Mehr

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J Greedy-Strategie Definition Paradigma Greedy Der Greedy-Ansatz verwendet die Strategie 1 Top-down Auswahl: Bestimme in jedem Schritt eine lokal optimale Lösung, so dass man eine global optimale Lösung

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1 3.2 Binäre Suche Beispiel 6.5.1: Intervallschachtelung (oder binäre Suche) (Hier ist n die Anzahl der Elemente im Feld!) Ein Feld A: array (1..n) of Integer sei gegeben. Das Feld sei sortiert, d.h.: A(i)

Mehr

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10 Binäre Bäume Bäume gehören zu den wichtigsten Datenstrukturen in der Informatik. Sie repräsentieren z.b. die Struktur eines arithmetischen Terms oder die Struktur eines Buchs. Bäume beschreiben Organisationshierarchien

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. äume / Graphen 5. Hashing 6. Algorithmische Geometrie 4/5, olie 1 2014 Prof. Steffen Lange - HDa/bI

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS) Dominating Set 59 Literatur Dominating Set Grundlagen 60 Dominating Set (DS) M. V. Marathe, H. Breu, H.B. Hunt III, S. S. Ravi, and D. J. Rosenkrantz: Simple Heuristics for Unit Disk Graphs. Networks 25,

Mehr

Algorithmen und Datenstrukturen. Große Übung vom 29.10.09 Nils Schweer

Algorithmen und Datenstrukturen. Große Übung vom 29.10.09 Nils Schweer Algorithmen und Datenstrukturen Große Übung vom 29.10.09 Nils Schweer Diese Folien Braucht man nicht abzuschreiben Stehen im Netz unter www.ibr.cs.tu-bs.de/courses/ws0910/aud/index.html Kleine Übungen

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Algorithmen und Datenstrukturen Balancierte Suchbäume

Algorithmen und Datenstrukturen Balancierte Suchbäume Algorithmen und Datenstrukturen Balancierte Suchbäume Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Überblick Einführung Einfügen und Löschen Einfügen

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Algorithmen und Datenstrukturen 265 10 Binäre Suchbäume Suchbäume Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Kann als Wörterbuch, aber auch zu mehr eingesetzt werden (Prioritätsschlange)

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

WS 2008/09. Diskrete Strukturen

WS 2008/09. Diskrete Strukturen WS 2008/09 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0809

Mehr

Programmiertechnik II

Programmiertechnik II Bäume Symboltabellen Suche nach Werten (items), die unter einem Schlüssel (key) gefunden werden können Bankkonten: Schlüssel ist Kontonummer Flugreservierung: Schlüssel ist Flugnummer, Reservierungsnummer,...

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Kapitel 6: Graphalgorithmen Gliederung

Kapitel 6: Graphalgorithmen Gliederung Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen

Mehr

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen: 6 Partiell geordnete binäre Bäume: Heap (Haufen) Motivation für manchen Anwendungen nur partielle Ordnung der Elemente statt vollständiger nötig, z.b. - Prioritätsschlange: nur das minimale (oder maximale)

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Guten Morgen und Willkommen zur Saalübung!

Guten Morgen und Willkommen zur Saalübung! Guten Morgen und Willkommen zur Saalübung! 1 Wie gewinnt man ein Spiel? Was ist ein Spiel? 2 Verschiedene Spiele Schach, Tic-Tac-Toe, Go Memory Backgammon Poker Nim, Käsekästchen... 3 Einschränkungen Zwei

Mehr

Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 5: Dynamisches Programmieren Gliederung Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen

Mehr

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Statistische Untersuchungen zu endlichen Funktionsgraphen

Statistische Untersuchungen zu endlichen Funktionsgraphen C# Projekt 1 Name: Statistische Untersuchungen zu endlichen Funktionsgraphen Aufgabe: Basierend auf dem Abschnitt 2.1.6. Random mappings, Kap.2, S 54-55, in [1] sollen zunächst für eine beliebige Funktion

Mehr

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1 B 1.0 B 1.1 L: Wir wissen von, dass sie den Scheitel hat und durch den Punkt läuft. Was nichts bringt, ist beide Punkte in die allgemeine Parabelgleichung einzusetzen und das Gleichungssystem zu lösen,

Mehr

Kap. 4.2: Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume Kap. 4.2: Binäre Suchbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 11. VO DAP2 SS 2009 26. Mai 2009 1 Zusätzliche Lernraumbetreuung Morteza Monemizadeh:

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Information Systems Engineering Seminar

Information Systems Engineering Seminar Information Systems Engineering Seminar Algorithmische Prüfung der Planarität eines Graphen Marcel Stüttgen, 22.10.2012 FH AACHEN UNIVERSITY OF APPLIED SCIENCES 1 Planarität - Definition Ein Graph heißt

Mehr

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany [email protected]. Stammbaum. Stammbaum. Stammbaum

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum lausthal Beispiele Stammbaum Informatik II. Zachmann lausthal University, ermany [email protected]. Zachmann Informatik - SS 06 Stammbaum Stammbaum / Parse tree, Rekursionsbaum Parse tree, Rekursionsbaum

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r ) Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v) Ein Baum T mit Knotengraden 2, dessen Knoten Schlüssel aus einer total geordneten Menge speichern, ist ein binärer Suchbaum (BST), wenn für jeden inneren Knoten v von T die Suchbaumeigenschaft gilt: Der

Mehr

16. All Pairs Shortest Path (ASPS)

16. All Pairs Shortest Path (ASPS) . All Pairs Shortest Path (ASPS) All Pairs Shortest Path (APSP): Eingabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar von Knoten u,v V die Distanz von u nach v sowie einen kürzesten Weg a b c d e

Mehr

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung rof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 23. April 2009 1/14 Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung Prof. G. Kemnitz Institut für Informatik,

Mehr

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1 Sortieren durch Einfügen Prof. Dr. W. Kowalk Sortieren durch Einfügen 1 Schon wieder aufräumen Schon wieder Aufräumen, dabei habe ich doch erst neulich man findet alles schneller wieder Bücher auf Regal

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens [email protected] Überblick Grundlagen Definitionen Elementare Datenstrukturen Rekursionen Bäume 2 1 Datenstruktur Baum Definition eines Baumes

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Vollständigkeit halber aufgeführt. Gehen wir einmal davon aus, dass die von uns angenommenen 70% im Beispiel exakt berechnet sind. Was würde

Mehr

Die Komplexitätsklassen P und NP

Die Komplexitätsklassen P und NP Die Komplexitätsklassen P und NP Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 3. Dezember 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit und

Mehr

Übung zur Algebra WiSe 2008/2009, Blatt 1

Übung zur Algebra WiSe 2008/2009, Blatt 1 Aufgabe 1: Zeigen Sie, dass die Untergruppe der Permutationsmatrizen in GL(n, R) isomorph zur symmetrischen Gruppe S n ist. Es sei Perm n die Menge der Permutationsmatrizen in GL(n, R). Der Isomorphismus

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland OECD Programme for International Student Assessment Deutschland PISA 2000 Lösungen der Beispielaufgaben aus dem Mathematiktest Beispielaufgaben PISA-Hauptstudie 2000 Seite 3 UNIT ÄPFEL Beispielaufgaben

Mehr

Anwendungsbeispiele Buchhaltung

Anwendungsbeispiele Buchhaltung Rechnungen erstellen mit Webling Webling ist ein Produkt der Firma: Inhaltsverzeichnis 1 Rechnungen erstellen mit Webling 1.1 Rechnung erstellen und ausdrucken 1.2 Rechnung mit Einzahlungsschein erstellen

Mehr

Beispiel 19. December 4, 2009

Beispiel 19. December 4, 2009 Beispiel 9 December 4, 2009 Computermathematik (für Informatik) 4. Übungsblatt (Musterlösung) 2. 2. 2009 Die heutigen Übungen sollen mit dem Computeralgebrasystem Sage gelöst werden. Die Lösung der Beispiele

Mehr

Scala kann auch faul sein

Scala kann auch faul sein Scala kann auch faul sein Kapitel 19 des Buches 1 Faulheit Faulheit ( lazy evaluation ) ist auch in C oder Java nicht unbekannt int x=0; if(x!=0 && 10/x>3){ System.out.println("In if"); } Nutzen der Faulheit?

Mehr

Kürzeste Wege in Graphen. Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik

Kürzeste Wege in Graphen. Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik Kürzeste Wege in Graphen Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik Gliederung Einleitung Definitionen Algorithmus von Dijkstra Bellmann-Ford Algorithmus Floyd-Warshall Algorithmus

Mehr

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte 50. Mathematik-Olympiade. Stufe (Regionalrunde) Klasse 3 Lösungen c 00 Aufgabenausschuss des Mathematik-Olympiaden e.v. www.mathematik-olympiaden.de. Alle Rechte vorbehalten. 503 Lösung 0 Punkte Es seien

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr