Effiziente Algorithmen mit Python. D. Komm, T. Kohn
|
|
- Wilfried Franke
- vor 6 Jahren
- Abrufe
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 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
Mehr2: 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,
MehrKostenmodell. 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
MehrFerienakademie 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: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.
MehrAlgorithmentheorie 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
MehrTeil 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
Mehr1 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
MehrProgrammiertechnik 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
MehrOft 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
MehrSchritt 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
MehrBeispiel 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
MehrEinfü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
MehrRSA 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
Mehr3.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)
MehrMathematische 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............................
Mehr13. 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),
MehrProseminar 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
MehrKostenmaß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);
MehrAbgabe: (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,
MehrEinleitung 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
MehrVorkurs 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
MehrAbschnitt: 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
MehrEinfü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
MehrMINT-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
MehrLö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
MehrProjekt Systementwicklung
Projekt Systementwicklung Effiziente Codierung: Laufzeitoptimierung Prof. Dr. Nikolaus Wulff Effiziente Codierung Der Wunsch effizienten Code zu schreiben entstammt mehreren Quellen: Zielplattformen mit
MehrEinfü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,
MehrGrundlagen 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");
MehrJava 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
Mehr3.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
MehrKapitel 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 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
MehrLaufzeit 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
MehrProgrammierkurs 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
MehrFolge 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
MehrMusterlö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.
MehrPrimitive 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.
MehrLenstras 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
MehrSuchen 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
MehrPrimzahlen 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
MehrGeordnete 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
MehrWirtschaftsinformatik 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
MehrEntscheidungsbä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
MehrPrimzahlzertifikat 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
MehrTeile 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,
MehrHEUTE. 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
MehrWURZEL 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
MehrProbabilistische 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
MehrLineare 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
MehrProf. 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.
MehrPraktikum 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
MehrMichael 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
MehrKapitel 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
MehrKapitel 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:
MehrMATHEMATIK 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
MehrDemo-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
MehrDatenstrukturen & 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
Mehr1. 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
MehrEinstieg 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
MehrDie 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
MehrSAGE-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
MehrEffiziente 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)
MehrProf. 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
MehrUE 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
MehrStephan 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,
MehrEffizienz 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.
MehrTechnische 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
MehrVBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
MehrFlussdiagramm / Programmablaufplan (PAP)
Flussdiagramm / Programmablaufplan (PAP) Basissysmbole Grenzstelle (Anfang, Zwischenhalt oder Ende des Programms/Algorithmus) Verbindung Zur Verdeutlichung der Ablaufrichtung werden Linien mit einer Pfeilspitze
MehrProgrammierung 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
Mehr5 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
MehrSeminar 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
MehrInformatik 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:
MehrObjektorientierte 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
MehrPython 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
Mehr5 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,
MehrNumerische 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
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
MehrDifferenzengleichungen. 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
Mehr5. 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
MehrNichtdeterministische 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
MehrJAVA - 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
MehrProgrammiersprache 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.)
MehrBesprechung 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
Mehr12. 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)
Mehr1 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
MehrEinstieg 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
MehrTag 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
Mehr5.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
MehrLö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
MehrSCHRIFTLICHE 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
MehrEinfü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
MehrModul 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
MehrSortierverfahren 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
MehrInformatik 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:
MehrProbeklausur: 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,
MehrProgrammieren 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
MehrKontrollstrukturen 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
MehrMathematik 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