Effiziente Algorithmen mit Python. D. Komm, T. Kohn

Größe: px
Ab Seite anzeigen:

Download "Effiziente Algorithmen mit Python. D. Komm, T. Kohn"

Transkript

1 Effiziente Algorithmen mit Python D. Komm, T. Kohn

2 Copyright c 2017, ABZ, ETH Zürich Version vom 7. September 2017.

3 Effiziente Algorithmen mit Python 3 1 Effizienz Effizient Effizienz hat nur Sinn in Bezug auf eine Metrik: Welcher Aspekt eines Algorithmus oder Programms soll effizient sein? Minimale Anzahl Rechenoperationen, Minimale Ausführungszeit, Minimale Speicherbelastung, Minimaler Energieverbrauch, Maximale Skalierbarkeit (grössere Eingaben), Maximale Ausnutzung der Resourcen (Parallelisierung), Minimale Programmlänge, Minimale Anzahl von Prozessorinstruktionen (kleinstes compiliertes Programm). Hier geht es in erster Linie um die minimale Anzahl an Operationen, die minimale Ausführungszeit, und vor allem auch um eine maximale Skalierbarkeit. Das bedeutet, dass das Programm auch dann schnell lauen soll, wenn wir die Eingabelänge erhöhen. Wir sprechen auch von der Laufzeit. Eingabelänge messen Für einen Algorithmus, der eine Liste sortiert, ist die Eingabelänge die Länge der Liste. Auch bei Strings (Texten) ergibt sich die Eingabelänge direkt aus der Länge des Textes. Für Zahlen verwenden wir als Eingabelänge analog die Anzahl der Stellen, und nicht den tatsächlichen Wert der Zahl! Im Bereich der Informatik wird diese Anzahl der Stellen binär gemessen. Das heisst: Die Eingabelänge einer Zahl ist die Anzahl der Bits. Zum Beispiel braucht die binäre Darstellung der Zahl «24» fünf Bits. «48» ist zwar doppelt so gross, braucht aber nur ein Bit mehr, nämlich sechs Bits. Big O-Notation Mit der O (Big O)-Notation drücken wir die Skalierbarkeit eines Algorithmus aus. Wir wollen also wissen, wie die Anzahl der Rechenoperationen von der Eingabelänge abhängt. Wenn die Funktion f(n) für die Eingabelänge n die Anzahl der Rechenschritte angibt, dann interessiert uns nur der «Grad» von f(x). Ist es

4 4 Effiziente Algorithmen mit Python eine lineare Funktion? Ist die Funktion quadratisch, oder sogar exponentiell? In der Informatik drücken wir das mit O(n), O(n 2 ) bzw. O(2 n ) aus. O ( g(n) ) ist die Menge aller Funktionen, die nicht schneller wachsen als g(n). Damit ist natürlich auch: O(1) O(n) O(n 2 ) O(n 3 ) O(2 n ) O(3 n ) Beispiele: 1. Prüfen, ob eine Zahl durch 2 teilbar ist, geht immer mit «einer» Operation. Wenn die letzte Ziffer gerade ist, dann ist auch die ganze Zahl gerade. Diese Aufgabe ist also in konstanter Zeit lösbar, sie hängt nicht von der Eingabelänge ab, d. h. O(1). 2. Prüfen, ob eine Zahl durch 3 teilbar ist, können wir über die Quersumme. Die Anzahl der Stellen gibt im Wesentlichen die Anzahl der Operationen an. Dieser Algorithmus arbeitet also in linearer Zeit, d. h. O(n). Ob das konkret nun bedeutet, dass wir n + 1, 2 n oder 3 n + 4 Operationen brauchen ist nicht wesentlich. Wichtig ist die Linearität. 3. Prüfen, ob eine Zahl eine Primzahl ist, können wir, indem wir jeden möglichen Teiler durchprobieren. Für eine vierstellige Zahl sind das im Wesentlichen 10 4, für eine fünfstellige Zahl 10 5 Divisionen. Es handelt sich also um einen exponentielles Algorithmus, der (binär gesehen) O(2 n ) Rechenschritte benötigt. In Python die Zeit messen Mit time.clock() lässt sich die verstrichene Zeit in Sekunden messen. Je nach System gibt clock() die Zeit seit Mitternacht, seit dem Start des Betriebssystems oder seit dem Start des Programms zurück. Weil wir uns nur für die Differenz interessieren ist der Startwert für uns aber irrelevant. 1 import time 2 t1 = time.clock() 3 # do something 4 t2 = time.clock() 5 print t2 - t1

5 Primzahl-Tests 5 2 Primzahl-Tests Problem Wir wollen möglichst schnell entscheiden, ob eine gegebene natürliche Zahl n eine Primzahl ist oder nicht. Das Problem eignet sich für den Unterricht, weil die Schüler Primzahlen bereits kennen und der naive Algorithmus simpel ist. Vor allem aber lässt sich daran sehr schön zeigen, wie eine (verständliche) algorithmische Verbesserung zu einer massiv schnelleren Lösung führt. Durchprobieren möglicher Teiler Erster Ansatz: Eine Primzahl p ist durch keine andere Zahl n mit 1 < n < p teilbar. Also prüfen wir für jede solche Zahl n, ob p ohne Rest durch n teilbar ist. 1 def primzahl(eingabe): 2 teiler = 2 3 while teiler < eingabe: 4 if eingabe % teiler == 0: 5 return False 6 teiler += 1 7 return True 8 9 if primzahl( ): 10 print "Primzahl" 11 else: 12 print "Keine Primzahl" Didaktische Schwierigkeiten: Für dieses Programm müssen die Schüler mit return umgehen können (ein schwieriges Konzept). Besonders schwierig ist auch der %-Operator: Hier lohnt es sich unter Umständen, eine Alternative zu verwenden: while teiler < eingabe: rest = eingabe % teiler if rest == 0: Oder: while teiler < eingabe: if isinteger(teiler / eingabe): Für jeden Teiler a einer Zahl z gilt, dass auch z a eine natürliche Zahl und Teiler von z ist. Dabei sind a und z a nicht beide grösser als die Wurzel von z; wenn z einen echten Teiler hat, dann hat z einen echten Teiler, der nicht grösser ist als z. Daher genügt es, nur die geraden Zahlen bis z als mögliche Teiler zu prüfen. Damit wird die Laufzeit von O(2 n ) auf O(2 n/2 ) verbessert. Der Algorithmus kann also in der selben Zeit doppelt so lange Zahlen verarbeiten.

6 6 Effiziente Algorithmen mit Python 1 def primzahl3(eingabe): 2 if eingabe!= 2 and eingabe % 2 == 0: 3 return True 4 teiler = 3 5 wurzel = sqrt(eingabe) 6 while teiler <= wurzel: 7 if eingabe % teiler == 0: 8 return False 9 teiler += 2 10 return True if primzahl3( ): 13 print "Primzahl" 14 else: 15 print "Keine Primzahl" Sieb des Eratosthenes Das Sieb des Eratosthenes ist konzeptuell einfach und löst das Problem auf einem «Umweg». Wir prüfen damit nicht direkt, ob eine Zahl eine Primzahl ist, sondern wir erzeugen eine Liste aller Primzahlen. Der Algorithmus ist zeitlich effizient (sofern wir eine Liste der Primzahlen wollen), braucht aber relativ viel Speicherplatz. 1 zahlen = [True] * # 0 und 1 sind keine Primzahlen 4 zahlen[0] = False 5 zahlen[1] = False 6 7 for i in range(2, sqrt(len(zahlen))): 8 if zahlen[i]: 9 j = i * i 10 while j < len(zahlen): 11 zahlen[j] = False 12 j += i primzahlen = [] 15 for i in indices(zahlen): 16 if zahlen[i]: 17 primzahlen.append(i) print primzahlen Verschiede Tricks können helfen, den Speicherverbrauch zu senken. Zum Beispiel ist a priori schon ersichtlich, dass nur ungerade Zahlen Primzahlen sein können (ausser der 2). Die Liste aller Zahlen müsste damit keine ungerade Zahlen enthalten. Das wird aber von der Programmierung her schwieriger.

7 Primzahl-Tests 7 Binäre Suche Die Funktion getlistofprimenumbers(n) im xprimes- Modul erzeugt mit dem Sieb des Eratosthenes eine Liste der ersten ca. n Millionen Primzahlen (genauer findet die Funktion alle Primzahlen im Bereich bis n 10 7, 1 n 25). Wir können dann prüfen, ob eine Zahl eine Primzahl ist, indem wir in der Liste nachsehen: 1 from xprimes import getlistofprimenumbers 2 primes = getlistofprimenumbers(2) 3 for x in [1, 11, 111, 1111, 11111, , ]: 4 print x, x in primes Dieses Programm läuft aber ziemlich langsam. Wenn die Liste der Primzahlen genug gross ist, dann dauert die Operation x in primes merklich etwa eine halbe Sekunde oder mehr. Das ist zu langsam! Hier lohnt es sich, mit binärer Suche zu prüfen, ob die Zahl x in der Liste L enthalten ist. 1 from xprimes import getlistofprimenumbers 2 3 def contains(l, x): 4 if L.first <= x <= L.last: 5 left, right = 0, len(l) 6 while left < right: 7 center = (left + right) // 2 8 value = L[center] 9 if x == value: 10 return True 11 if x < value: 12 right = center 13 else: 14 left = center return L[left] == x 16 else: 17 return False primes = getlistofprimenumbers(2) 20 for x in [1, 11, 111, 1111, 11111, , ]: 21 print x, contains(primes, x) Bessere Methoden Es gibt eine Reihe von sehr viel schnelleren Methoden, um zu prüfen, ob eine Zahl eine Primzahl ist. Zum Beispiel mit dem kleinen Satz von Fermat. Für jede Primzahl p und eine zu p teilfremde Basis a gilt: a p 1 1 mod p. Für eine Zahl p wählen wir eine teilerfremde Basis a und berechnen z = a p 1 mod p. Wenn z 1 ist, dann ist p garantiert keine Primzahl.

8 8 Effiziente Algorithmen mit Python Ist z = 1, so könnte z möglicherweise eine Primzahl sein (aber nicht zwingend). Dieses Verfahren erkennt zwar alle Primzahlen als prim, aber nicht alle zusammengesetzten Zahlen als zusammengesetzt. Die Idee eines probabilistischen Tests ist, dann wir zufällig verschiedene Basen a wählen und für jede solche Basis prüfen, ob a p 1 1 mod p gilt. Wenn das für alle zufälligen Basen a stimmt, dann ist p mit einer (berechnbaren) Wahrscheinlichkeit eine Primzahl. Je mehr Basen a geprüft werden, umso höher ist die Wahrscheinlichkeit. Der Algorithmus von Baillie-PSW (Baillie, Pomerance, Selfridge, Wagstaff) verwendet zwei ähnliche Verfahren, die ebenfalls einige zusammengesetzte Zahlen als Primzahlen angeben. Bis heute hat man noch keine zusammengesetzte Zahl gefunden, die von beiden Verfahren im Baillie-PSW-Algorithmus gleichzeitig als «falsche Primzahl» angegeben würde. Damit funktioniert dieser Algorithmus mindestens bis zu zuverlässig. In Python arbeitet die Funktion isprime(x) aus dem Modul primefac nach diesem Verfahren: 1 from primefac import isprime 2 3 for x in [1, 11, 111, 1111, 11111, , ]: 4 print x, isprime(x)

9 Wurzel-Berechnung 9 3 Wurzel-Berechnung Angenommen, wir wollen einen einfachen Algorithmus schreiben, der zu einer gegebenen Zahl die Quadratwurzel ausgibt. Nehmen wir der Einfachheit halber an, die Eingabe sei eine Quadratzahl. Ein naiver Ansatz testet einfach alle Kandidaten und kann folgendermassen umgesetzt werden: 1 def wurzel(eingabe): 2 kandidat = 0 3 while (kandidat*kandidat < eingabe): 4 kandidat = kandidat+1 5 return kandidat Falls wir den allgemeineren Fall betrachten, dass die Eingabe keine Quadratzahl ist, können wir den Code wie folgt verallgemeinern: 1 def wurzel_prec(eingabe,prec): 2 kandidat = i = while (i >= 1/10**prec): 5 while (kandidat*kandidat < eingabe): 6 kandidat = kandidat+i 7 if (kandidat*kandidat == eingabe): 8 return kandidat 9 else: 10 kandidat = kandidat-i 11 i = i/10 12 return kandidat print wurzel_prec(2, 4) Wie schnell ist dieses Verfahren? Gehen wir wieder von dem einfachen Fall aus, dass die Quadratzahl der Eingabe eine natürliche Zahl ist. Sei ferner die Eingabelänge wieder n und habe damit eine Grösse von ungefähr 2 n. Um die Laufzeit des Algorithmus abzuschätzen, zählen wir wieder die Schleifendurchläufe. Die Variable kandidat beginnt bei 1 und die while-schleife (des ersten Algorithmus) wird durchlaufen, bis kandidat die Grösse 2 n hat. Damit ist die Laufzeit in O( 2 n ). Verbessertes Verfahren mit binärer Suche Einfacher geht es, wenn wir uns ein Verfahren zu Nutze machen, dass wir von der Suche in sortierten Daten kennen, nämlich die binäre Suche. Anstatt die Datenliste von links nach rechts nach dem gesuchten Element zu durchsuchen, gehen wir wie folgt vor: Definiere zwei Variablen links and rechts, welche den aktuellen Suchraum festlegen

10 10 Effiziente Algorithmen mit Python Betrachte den Wert in der Mitte der Datenliste (Variable aktuell) Ist dieser der gesuchte, sind wir fertig Ist dieser zu klein, ist auch alles links von ihm zu klein Dann setzen wir links = aktuell + 1 Ist dieser zu gross, ist auch alles rechts von ihm zu gross Dann setzen wir rechts = aktuell Diese Idee führt zu folgendem Algorithmus: 1 def bin_suche(eingabe,gesucht): 2 left = 0 3 right = len(eingabe) 4 while left < right: 5 current = (left + right) // 2 6 if eingabe[current] == gesucht: 7 return current 8 elif eingabe[current] < gesucht: 9 left = current else: 11 right = current 12 return None print bin_suche([3,5,7,9,11,14,16,19,22,35,37], 19) Für das Wurzelziehen einer Quadratzahl können wir die binäre Suche nun auf den Zahlenraum von 1 bis eingabe anwenden. Dieser definiert dann unseren Suchraum, also alle möglichen Kandidaten. In Python können wir diese Idee wie folgt umsetzen: 1 def wurzel2(eingabe): 2 left = 0 3 right = eingabe 4 while left < right: 5 test = (left + right) // 2 6 if test**2 == eingabe: 7 return test 8 elif test**2 < eingabe: 9 left = test else: 11 right = test print wurzel2(36) Es überrascht nicht, dass dieser Ansatz die Laufzeit exponentiell verbessert. Jedes Mal, wenn die Wurzel nicht gefunden wurde, wird der Suchraum halbiert. Am Anfang gibt es ungefähr eingabe = 2 n Kandidaten, nach dem ersten Test gibt es 2 n /2 = 2 n 1 Kandidaten, nach

11 Wurzel-Berechnung ,000 Schleifendurchläufe 400, , , ,000 0 Verbessertes Verfahren (wurzel2) Naiver Ansatz (wurzel) Eingabelänge n Abbildung 1: Die beiden Algorithmen zum Wurzelziehen dem zweiten Test gibt es 2 n 1 /2 = 2 n /4 = 2 n 2 Kandidaten, nach dem dritten Test gibt es noch 2 n 2 /2 = 2 n /8 = 2 n 3 Kandidaten usw. Wie viele Iterationen x sind nötig, bis nur noch eine Zahl übrig bleibt? In anderen Worten muss x 2 n /2 x = 1 x = n erfüllen und somit ist die Anzahl von Schleifendurchläufen in O(n). Die beiden Laufzeiten sind in Abb. 1 dargestellt. Dieses Beispiel eignet sich gut, um eine nicht ganz offensichtliche Anwendung der binären Suche zu zeigen. Für den Fall, dass das algorithmische Wurzelziehen genauer untersucht werden soll, wäre es als nächstes z.b. möglich, das Heron-Verfahren vorzustellen.

12 12 Effiziente Algorithmen mit Python 4 Exponentiation Für eine feste Zahl a wollen wir die Potenz a n berechnen, wobei n N. Wenn wir den naiven Ansatz verwenden (wir multiplizieren die Basis a n Mal mit sich selbst), dann dauert das für grosse n relativ lange. 1 def exponenzieren(a, eingabe): 2 i = 1 3 ausgabe = 1 4 while i <= eingabe: 5 ausgabe *= a 6 i += 1 7 return ausgabe 8 9 print exponenzieren(3, 4) Eine deutliche Verbesserung wird hier erzielt, wenn wir a jeweils quadrieren. Zum Beispiel ist: ( ((a a 16 2 = ) ) ) Das sind nur vier Multiplikationen anstatt 16. Wenn der Exponent n keine Zweierpotenz ist, dann zerlegen wir n in Zweierpotenzen: a 23 = a = a 16 a 4 a 2 a Im Programm arbeiten wir von der kleinsten Stelle der Eingabe her. Wir prüfen jeweils, ob das letzte Bit gesetzt ist (die Eingabe ist dann ungerade). Wenn ja, dann multiplizieren wir das Resultat mit a k. Anschliessend entfernen wir das letzte Bit über eine Division durch zwei. 1 def exponenzieren3(a, eingabe): 2 ausgabe = 1 3 power = a 4 while eingabe!= 0: 5 if eingabe % 2 == 1: 6 ausgabe *= power 7 eingabe //= 2 8 power **= 2 9 return ausgabe print exponenzieren3(2, 10)

Komplexität von Algorithmen

Komplexität von Algorithmen Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen

Mehr

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016) Kostenmodell Daniel Graf, Tobias Pröger 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016) Erklärung: Diese Mitschrift ist als Ergänzung zur Vorlesung gedacht. Wir erheben keinen Anspruch

Mehr

Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme. Faktorisierung. Stefan Büttcher stefan@buettcher.org

Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme. Faktorisierung. Stefan Büttcher stefan@buettcher.org Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme Faktorisierung Stefan Büttcher stefan@buettcher.org 1 Definition. (RSA-Problem) Gegeben: Ò ÔÕ, ein RSA-Modul mit unbekannten Primfaktoren

Mehr

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20. Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.

Mehr

Algorithmentheorie Randomisierung. Robert Elsässer

Algorithmentheorie Randomisierung. Robert Elsässer Algorithmentheorie 03 - Randomisierung Robert Elsässer Randomisierung Klassen von randomisierten Algorithmen Randomisierter Quicksort Randomisierter Primzahltest Kryptographie 2 1. Klassen von randomisierten

Mehr

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik Grundlagen der Programmierung 1 Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2 Softwaretechnik Prof. Dr. O. Drobnik Professur Architektur und Betrieb verteilter Systeme Institut für

Mehr

1 Zahlentheorie. 1.1 Kongruenzen

1 Zahlentheorie. 1.1 Kongruenzen 3 Zahlentheorie. Kongruenzen Der letzte Abschnitt zeigte, daß es sinnvoll ist, mit großen Zahlen möglichst einfach rechnen zu können. Oft kommt es nicht darauf, an eine Zahl im Detail zu kennen, sondern

Mehr

Programmiertechnik II

Programmiertechnik II Analyse von Algorithmen Algorithmenentwurf Algorithmen sind oft Teil einer größeren Anwendung operieren auf Daten der Anwendung, sollen aber unabhängig von konkreten Typen sein Darstellung der Algorithmen

Mehr

Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein.

Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. 3 1384788374932954500363985493554603584759389 mod 28374618732464817362847326847331872341234 Wieso kann ein

Mehr

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung.

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung. I. Programmierung ================================================================== Programmierung ist die Planung einer Abfolge von Schritten (Instruktionen), nach denen ein Computer handeln soll. Schritt

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

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen

Mehr

RSA Verfahren. Kapitel 7 p. 103

RSA Verfahren. Kapitel 7 p. 103 RSA Verfahren RSA benannt nach den Erfindern Ron Rivest, Adi Shamir und Leonard Adleman war das erste Public-Key Verschlüsselungsverfahren. Sicherheit hängt eng mit der Schwierigkeit zusammen, große Zahlen

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

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens Mathematische Grundlagen der Kryptographie 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe Stefan Brandstädter Jennifer Karstens 18. Januar 2005 Inhaltsverzeichnis 1 Ganze Zahlen 1 1.1 Grundlagen............................

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

Proseminar SS08 - Miller-Rabin-Primzahltest

Proseminar SS08 - Miller-Rabin-Primzahltest Proseminar SS08 - Miller-Rabin-Primzahltest von Technische Unviersität München Vorlesung Perlen der Informatik 2, 2008 Professor Tobias Nipkow 17. April 2008 Inhaltsverzeichnis 1 Einleitung 3 2 Primzahltests

Mehr

Kostenmaße. F3 03/04 p.188/395

Kostenmaße. F3 03/04 p.188/395 Kostenmaße Bei der TM nur ein Kostenmaß: Ein Schritt (Konfigurationsübergang) kostet eine Zeiteinheit; eine Bandzelle kostet eine Platzeinheit. Bei der RAM zwei Kostenmaße: uniformes Kostenmaß: (wie oben);

Mehr

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2009 Grundlagen: Algorithmen und Datenstrukturen Übungsblatt 2 Prof. Dr. Helmut Seidl, S. Pott,

Mehr

Einleitung Shor s Algorithmus Anhang. Thomas Neder. 19. Mai 2009

Einleitung Shor s Algorithmus Anhang. Thomas Neder. 19. Mai 2009 19. Mai 2009 Einleitung Problemstellung Beispiel: RSA Teiler von Zahlen und Periode von Funktionen Klassischer Teil Quantenmechanischer Teil Quantenfouriertransformation Algorithmus zur Suche nach Perioden

Mehr

Vorkurs für. Studierende in Mathematik und Physik. Einführung in Kryptographie Kurzskript 2015

Vorkurs für. Studierende in Mathematik und Physik. Einführung in Kryptographie Kurzskript 2015 Vorkurs für Studierende in Mathematik und Physik Einführung in Kryptographie Kurzskript 2015 Felix Fontein Institut für Mathematik Universität Zürich Winterthurerstrasse 190 8057 Zürich 11. September 2015

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

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

MINT-Circle-Schülerakademie

MINT-Circle-Schülerakademie 1 Einführung MINT-Circle-Schülerakademie Kurze Einführung, was Maple ist, wozu es dienen kann, wo es verwendet wird. Zur Einführung die folgenden Aufgaben bearbeiten lassen. Aufgabe 1. Gib unter Maple

Mehr

Lösungsblatt zur Vorlesung. Kryptanalyse WS 2009/2010. Blatt 6 / 23. Dezember 2009 / Abgabe bis spätestens 20. Januar 2010, 10 Uhr (vor der Übung)

Lösungsblatt zur Vorlesung. Kryptanalyse WS 2009/2010. Blatt 6 / 23. Dezember 2009 / Abgabe bis spätestens 20. Januar 2010, 10 Uhr (vor der Übung) Ruhr-Universität Bochum Lehrstuhl für Kryptologie und IT-Sicherheit Prof. Dr. Alexander May Mathias Herrmann, Alexander Meurer Lösungsblatt zur Vorlesung Kryptanalyse WS 2009/2010 Blatt 6 / 23. Dezember

Mehr

Projekt Systementwicklung

Projekt Systementwicklung Projekt Systementwicklung Effiziente Codierung: Laufzeitoptimierung Prof. Dr. Nikolaus Wulff Effiziente Codierung Der Wunsch effizienten Code zu schreiben entstammt mehreren Quellen: Zielplattformen mit

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

3.5 Ringe und Körper. Diese Eigenschaften kann man nun auch. 1. (R, +) ist eine kommutative Gruppe. 2. Es gilt das Assoziativgesetz bezüglich.

3.5 Ringe und Körper. Diese Eigenschaften kann man nun auch. 1. (R, +) ist eine kommutative Gruppe. 2. Es gilt das Assoziativgesetz bezüglich. 3.5 Ringe und Körper Gehen wir noch mal zu den ganzen Zahlen zurück. Wir wissen: (Z, + ist eine Gruppe, es gibt aber als Verknüpfung noch die Multiplikation, es gibt ein neutrales Element bezüglich, es

Mehr

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung Gliederung 1. Motivation / Einordnung / Grundlagen 2. Analyse der Laufzeit von Algorithmen 3. Untere Schranken für algorithmische Probleme 4. Sortier- und Selektionsverfahren 5. Paradigmen des Algorithmenentwurfs

Mehr

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr. Übersicht Datenstrukturen und Vorlesung 1: Prof. Dr. Erika Ábrahám Theorie Hybrider Systeme Informatik 2 http://ths.rwth-aachen.de/teaching/ss-14/ datenstrukturen-und-algorithmen/ Diese Präsentation verwendet

Mehr

Laufzeit und Komplexität

Laufzeit und Komplexität Laufzeit und Komplexität Laufzeit eines Algorithmus Benchmarking versus Analyse Abstraktion Rechenzeit, Anzahl Schritte Bester, Mittlerer, Schlechtester Fall Beispiel: Lineare Suche Komplexitätsklassen

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

Folge 13 - Quicksort

Folge 13 - Quicksort Für Abiturienten Folge 13 - Quicksort 13.1 Grundprinzip des Quicksort Schritt 1 Gegeben ist ein unsortierter Array von ganzen Zahlen. Ein Element des Arrays wird nun besonders behandelt, es wird nämlich

Mehr

Musterlösung zur Probeklausur zur Angewandten Diskreten Mathematik Dr. Hartmut Lanzinger, Hans- Peter Reck

Musterlösung zur Probeklausur zur Angewandten Diskreten Mathematik Dr. Hartmut Lanzinger, Hans- Peter Reck Musterlösung zur Probeklausur zur Angewandten Diskreten Mathematik Dr. Hartmut Lanzinger, Hans- Peter Reck Gesamtpunktzahl: 114 Punkte, 100 Punkte= 100 %, keine Abgabe 1. Es seien m = 1155 und n = 1280.

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Lenstras Algorithmus für Faktorisierung

Lenstras Algorithmus für Faktorisierung Lenstras Algorithmus für Faktorisierung Bertil Nestorius 9 März 2010 1 Motivation Die schnelle Faktorisierung von Zahlen ist heutzutage ein sehr wichtigen Thema, zb gibt es in der Kryptographie viele weit

Mehr

Suchen in Listen und Hashtabellen

Suchen in Listen und Hashtabellen Kapitel 12: Suchen in Listen und Hashtabellen Einführung in die Informatik Wintersemester 2007/08 Prof. Bernhard Jung Übersicht Einleitung Lineare Suche Binäre Suche (in sortierten Listen) Hashverfahren

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

Geordnete Binärbäume

Geordnete Binärbäume Geordnete Binärbäume Prof. Dr. Martin Wirsing in Zusammenarbeit mit Gilbert Beyer und Christian Kroiß http://www.pst.ifi.lmu.de/lehre/wise-09-10/infoeinf/ WS 09/10 Einführung in die Informatik: Programmierung

Mehr

Wirtschaftsinformatik I

Wirtschaftsinformatik I Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation

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

Primzahlzertifikat von Pratt

Primzahlzertifikat von Pratt Primzahlzertifikat von Pratt Daniela Steidl TU München 17. 04. 2008 Primzahltests in der Informatik "Dass das Problem, die Primzahlen von den Zusammengesetzten zu unterscheiden und letztere in ihre Primfaktoren

Mehr

Teile und Herrsche Teil 2

Teile und Herrsche Teil 2 Teile und Herrsche Teil 2 binär Suchen und schnell Multiplizieren Markus Fleck Manuel Mauky Hochschule Zittau/Görlitz 19. April 2009 Suchen in langen Listen (0, 1, 2, 7, 8, 9, 9, 13, 13, 14, 14, 14, 16,

Mehr

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion 17.11.04 1 HEUTE 17.11.04 3 Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: was ist Effizienz? vollständige Induktion JAVA: Arrays die for -Schleife die Sprunganweisungen break und continue

Mehr

WURZEL Werkstatt Mathematik Polynome Grundlagen Teil II

WURZEL Werkstatt Mathematik Polynome Grundlagen Teil II Die WURZEL Werkstatt Mathematik Polynome Grundlagen Teil II Polynome nur zu addieren, multiplizieren oder dividieren ist auf die Dauer langweilig. Polynome können mehr. Zum Beispiel ist es manchmal gar

Mehr

Probabilistische Primzahltests

Probabilistische Primzahltests Probabilistische Primzahltests Daniel Tanke 11. Dezember 2007 In dieser Arbeit wird ein Verfahren vorgestellt, mit welchem man relativ schnell testen kann, ob eine ganze Zahl eine Primzahl ist. Für einen

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Christian Serpé Universität Münster 14. September 2011 Christian Serpé (Universität Münster) 14. September 2011 1 / 56 Gliederung 1 Motivation Beispiele Allgemeines Vorgehen 2 Der Vektorraum R n 3 Lineare

Mehr

Prof. S. Krauter Dezimalbruchdarstellung rationaler Zahlen DezDarst.doc. Über die Darstellung von rationalen Zahlen als Dezimalbrüche.

Prof. S. Krauter Dezimalbruchdarstellung rationaler Zahlen DezDarst.doc. Über die Darstellung von rationalen Zahlen als Dezimalbrüche. 1 Prof. S. Krauter Dezimalbruchdarstellung rationaler Zahlen DezDarst.doc Über die Darstellung von rationalen Zahlen als Dezimalbrüche. Anmerkung: Die Beschränkung auf die Dezimaldarstellung ist unnötig.

Mehr

Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1

Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1 Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1 1 Primzahltest 1.1 Motivation Primzahlen spielen bei zahlreichen Algorithmen, die Methoden aus der Zahlen-Theorie verwenden, eine zentrale Rolle. Hierzu

Mehr

Michael Körner. Grundwissen Wurzeln und Potenzen Klasse VORSCHAU. Bergedorfer Kopiervorlagen. zur Vollversion

Michael Körner. Grundwissen Wurzeln und Potenzen Klasse VORSCHAU. Bergedorfer Kopiervorlagen. zur Vollversion Michael Körner Grundwissen Wurzeln und Potenzen 5.-10. Klasse Bergedorfer Kopiervorlagen Zu diesem Material Zu dieser Mappe Was sind Wurzeln? Wozu benötigt man Potenzen? Wieso gelten die Potenzgesetze

Mehr

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung Kapitel 6 Komplexität von Algorithmen 1 6.1 Beurteilung von Algorithmen I.d.R. existieren viele Algorithmen, um dieselbe Funktion zu realisieren. Welche Algorithmen sind die besseren? Betrachtung nicht-funktionaler

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

MATHEMATIK PROGRAMMIEREN MIT PYTHON

MATHEMATIK PROGRAMMIEREN MIT PYTHON MATHEMATIK PROGRAMMIEREN MIT PYTHON Univ. Prof. Dr. Stefan Müller-Stach AG Zahlentheorie 27. September 2006 PYTHON: Möglichkeiten einer Programmiersprache PYTHON: Objektorientierte Sprache von Guido van

Mehr

Demo-Text für Quadratwurzeln ALGEBRA. Teil 1. Einführung und Grundeigenschaften. (Klasse 8 / 9) Friedrich W.

Demo-Text für  Quadratwurzeln ALGEBRA. Teil 1. Einführung und Grundeigenschaften. (Klasse 8 / 9) Friedrich W. Teil 1 Einführung und Grundeigenschaften (Klasse 8 / 9) Datei Nr. 101 Friedrich W. Buckel Stand: 1. Mai 014 ALGEBRA Quadratwurzeln INTERNETBIBLIOTHEK FÜR SCHULMATHEMATIK Vorwort Die Einführung des 1-jährigen

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 2. April

Mehr

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner Musterlösung Problem : Average-case-Laufzeit vs Worst-case-Laufzeit pt (a) Folgender Algorithmus löst das Problem der

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking

Mehr

Die Klassen P und NP. Dr. Eva Richter. 29. Juni 2012

Die Klassen P und NP. Dr. Eva Richter. 29. Juni 2012 Die Klassen P und NP Dr. Eva Richter 29. Juni 2012 1 / 35 Die Klasse P P = DTIME(Pol) Klasse der Probleme, die sich von DTM in polynomieller Zeit lösen lassen nach Dogma die praktikablen Probleme beim

Mehr

SAGE-Crashkurs SoSe 2009

SAGE-Crashkurs SoSe 2009 SAGE-Crashkurs SoSe 2009 Lars Fischer (lars. fischer (an der) uni - siegen. de) Diese Zusammenstellung erläutert die wichtigsten Dinge, um SAGE in der Zahlentheorie- Vorlesung zum Lösen der ersten Übungsblätter

Mehr

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra Effiziente Algorithmen und Datenstrukturen I Kapitel 10: Lineare Algebra Christian Scheideler WS 2008 19.02.2009 Kapitel 10 1 Überblick Notation Arithmetik auf großen Zahlen (Addition und Multiplikation)

Mehr

Prof. Dr. Margarita Esponda

Prof. Dr. Margarita Esponda Die O-Notation Analyse von Algorithmen Die O-Notation Prof. Dr. Margarita Esponda Freie Universität Berlin ALP II: Margarita Esponda, 5. Vorlesung, 26.4.2012 1 Die O-Notation Analyse von Algorithmen Korrektheit

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 5 Asymptotische Laufzeitkomplexität Definition Regeln Beispiele Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger

Mehr

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44 Aufgabe 33 a) Der Pseudobefehl move $rd,$rs wird als addu $rd,$0,$rs übersetzt. Dabei macht sich SPIM zunutze, dass das Register $0 immer Null ist. Somit wird das Register $rd ersetzt durch $rd=0+$rs=$rs,

Mehr

Effizienz von Algorithmen

Effizienz von Algorithmen Effizienz von Algorithmen Letzte Bearbeitung: Jan 211 Ein wichtiger Aspekt bei Algorithmen sind seine "Kosten". Wir wollen uns hier ausschließlich mit der Laufzeit des gewählten Algorithmus beschäftigen.

Mehr

Technische Universität München. Lösung Montag WS 2013/14. (Einheitskreis, ohne Rechnung ersichtlich) (Einheitskreis, ohne Rechnung ersichtlich)

Technische Universität München. Lösung Montag WS 2013/14. (Einheitskreis, ohne Rechnung ersichtlich) (Einheitskreis, ohne Rechnung ersichtlich) Technische Universität München Andreas Wörfel Ferienkurs Analysis 1 für Physiker Lösung Montag WS 01/1 Aufgabe 1 Zum warm werden: Komplexe Zahlen - Lehrling Bestimmen Sie das komplex Konjugierte, den Betrag

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Flussdiagramm / Programmablaufplan (PAP)

Flussdiagramm / Programmablaufplan (PAP) Flussdiagramm / Programmablaufplan (PAP) Basissysmbole Grenzstelle (Anfang, Zwischenhalt oder Ende des Programms/Algorithmus) Verbindung Zur Verdeutlichung der Ablaufrichtung werden Linien mit einer Pfeilspitze

Mehr

Programmierung in Python

Programmierung in Python Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P

Mehr

5 Codierung nach RSA (Lösung)

5 Codierung nach RSA (Lösung) Kapitel 5 Codierung nach RSA (Lösung) Seite 1/17 5 Codierung nach RSA (Lösung) 5.1 Einführung Die drei Mathematiker Rivest, Shamir und Adleman entwickelten 1977 das nach ihnen benannte RSA-Verfahren. Es

Mehr

Seminar der WE AlZAGK. Glatte Zahlen

Seminar der WE AlZAGK. Glatte Zahlen Seminar der WE AlZAGK WiSe 200/ Glatte Zahlen von Sonja Riedel Mail: sriedel@math.uni-bremen.de Motivation Glatte Zahlen sind, grob gesagt, Zahlen, die nur kleine Primfaktoren besitzen. Sie werden in vielen

Mehr

Informatik II Greedy-Algorithmen

Informatik II Greedy-Algorithmen 7/7/06 lausthal Erinnerung: Dynamische Programmierung Informatik II reedy-algorithmen. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Zusammenfassung der grundlegenden Idee: Optimale Sub-Struktur:

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Übungen: 6 Schleifen Objektorientierte Programmierung OOP Programmieren mit Java 1. do-schleife 2. while-schleife 3. a) c) Verschiedene for-schleifen 6 Schleifen Übungen 4. for-schleife: halber Tannenbaum

Mehr

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Python Programmieren. Variablen, Ausdrücke und Anweisungen Python Programmieren Funktionen Module und Namensräume Datentypen in Python Was noch zu sagen bleibt... richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Variablen Variablennamen und

Mehr

5 Zwei spieltheoretische Aspekte

5 Zwei spieltheoretische Aspekte 5 Zwei spieltheoretische Aspekte In diesem Kapitel wollen wir uns mit dem algorithmischen Problem beschäftigen, sogenannte Und-Oder-Bäume (kurz UOB) auszuwerten. Sie sind ein Spezialfall von Spielbäumen,

Mehr

Numerische Verfahren und Grundlagen der Analysis

Numerische Verfahren und Grundlagen der Analysis Numerische Verfahren und Grundlagen der Analysis Rasa Steuding Hochschule RheinMain Wiesbaden Wintersemester 2011/12 R. Steuding (HS-RM) NumAna Wintersemester 2011/12 1 / 16 4. Groß-O R. Steuding (HS-RM)

Mehr

Übungen zu Programmierung I - Blatt 8

Übungen zu Programmierung I - Blatt 8 Dr. G. Zachmann A. Greß Universität Bonn Institut für Informatik II 1. Dezember 2004 Wintersemester 2004/2005 Übungen zu Programmierung I - Blatt 8 Abgabe am Mittwoch, dem 15.12.2004, 15:00 Uhr per E-Mail

Mehr

Differenzengleichungen. und Polynome

Differenzengleichungen. und Polynome Lineare Differenzengleichungen und Polynome Franz Pauer Institut für Mathematik, Universität Innsbruck Technikerstr. 13/7, A-600 Innsbruck, Österreich franz.pauer@uibk.ac.at 1 Einleitung Mit linearen Differenzengleichungen

Mehr

5. Nichtdezimale Zahlensysteme

5. Nichtdezimale Zahlensysteme 10 5. Nichtdezimale Zahlensysteme Dezimalsystem: 2315 10 = 2 10 3 + 3 10 2 + 1 10 1 + 5 10 0 2 Tausender, 3 Hunderter, 1 Zehner und 5 Einer. Basis b = 10, Ziffern 0, 1,..., 9 (10 ist keine Ziffer!) bedeutet

Mehr

Nichtdeterministische Platzklassen

Nichtdeterministische Platzklassen Sommerakademie 2010 Rot an der Rot AG 1: Wieviel Platz brauchen Algorithmen wirklich? Nichtdeterministische Platzklassen Ulf Kulau August 23, 2010 1 Contents 1 Einführung 3 2 Nichtdeterminismus allgemein

Mehr

JAVA - Suchen - Sortieren

JAVA - Suchen - Sortieren Übungen Informatik I JAVA - Suchen - Sortieren http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Suchen/Sortieren binary search mergesort bubblesort Übungen Informatik

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 5. Kontrollstrukturen Allgemein Kontrollstrukturen dienen zur Steuerung des Programmablaufs. (Bemerkung: C und C++ besitzen die selben Kontrollstrukturen.)

Mehr

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Themen heute Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Besprechung des 3. Übungsblattes Aufgabe 3 Speicherplätze für Mikrocode-Anweisungen

Mehr

12. September 2012 Kompexität. Analyse von Algorithmen (Ziele) Empirische Analyse Beispiel Schlussfolgerungen

12. September 2012 Kompexität. Analyse von Algorithmen (Ziele) Empirische Analyse Beispiel Schlussfolgerungen Komplexität von Algorithmen Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 12. September 2012 ODE/FHTBM Komplexität von Algorithmen 12. September 2012 1/41 (Ziele)

Mehr

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren 1 und der Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2015 27. Oktober 2015 B. Nebel Info I 3 / 21 Der Vergleichsoperatoren

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 28 Einstieg in die Informatik mit Java Algorithmen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 28 1 Überblick 2 Algorithmus 3 Grundalgorithmen in Java 4 Flussdiagramme

Mehr

Tag der Mathematik 2013

Tag der Mathematik 2013 Tag der Mathematik 2013 Gruppenwettbewerb Allgemeine Hinweise: Als Hilfsmittel dürfen nur Schreibzeug, Geodreieck und Zirkel benutzt werden. Taschenrechner sind nicht zugelassen. Teamnummer Die folgende

Mehr

5.1 Drei wichtige Beweistechniken... 55 5.2 Erklärungen zu den Beweistechniken... 56

5.1 Drei wichtige Beweistechniken... 55 5.2 Erklärungen zu den Beweistechniken... 56 5 Beweistechniken Übersicht 5.1 Drei wichtige Beweistechniken................................. 55 5. Erklärungen zu den Beweistechniken............................ 56 Dieses Kapitel ist den drei wichtigsten

Mehr

Lösungsvorschlag für die Probeklausuren und Klausuren zu Algebra für Informations- und Kommunikationstechniker bei Prof. Dr.

Lösungsvorschlag für die Probeklausuren und Klausuren zu Algebra für Informations- und Kommunikationstechniker bei Prof. Dr. Lösungsvorschlag für die Probeklausuren und Klausuren zu Algebra für Informations- und Kommunikationstechniker bei Prof. Dr. Kurzweil Florian Franzmann André Diehl Kompiliert am 10. April 2006 um 18:33

Mehr

SCHRIFTLICHE ZUSAMMENFASSUNG ZUM VORTRAG DIE GRUNDLAGEN DER RSA-VERSCHLÜSSELUNG VON DANIEL METZSCH

SCHRIFTLICHE ZUSAMMENFASSUNG ZUM VORTRAG DIE GRUNDLAGEN DER RSA-VERSCHLÜSSELUNG VON DANIEL METZSCH SCHRIFTLICHE ZUSAMMENFASSUNG ZUM VORTRAG DIE GRUNDLAGEN DER RSA-VERSCHLÜSSELUNG VON DANIEL METZSCH Freie Universität Berlin Fachbereich für Mathematik & Informatik Institut für Mathematik II Seminar über

Mehr

Einführung in die Informatik I Kapitel II.3: Sortieren

Einführung in die Informatik I Kapitel II.3: Sortieren 1 Einführung in die Informatik I Kapitel II.3: Sortieren Prof. Dr.-Ing. Marcin Grzegorzek Juniorprofessur für Mustererkennung im Institut für Bildinformatik Department Elektrotechnik und Informatik Fakultät

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren für Felder (Listen) Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 10 (3.6.2014) Binäre Suchbäume I Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Programmieren mit Python

Programmieren mit Python Programmieren mit Python Programmieren heisst: Dem Computer sagen, was er tun soll. Die Befehle muss man übrigens in einer Sprache geben, die der Computer versteht. Darum sind verschiedene Programmiersprachen

Mehr

Kontrollstrukturen und Funktionen in C

Kontrollstrukturen und Funktionen in C Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren

Mehr

Mathematik und Logik

Mathematik und Logik Mathematik und Logik 6. Übungsaufgaben 2006-01-24, Lösung 1. Berechnen Sie für das Konto 204938716 bei der Bank mit der Bankleitzahl 54000 den IBAN. Das Verfahren ist z.b. auf http:// de.wikipedia.org/wiki/international_bank_account_number

Mehr