Was kann ein Computer ausrechnen? -...

55
Was kann ein Computer ausrechnen? Vorkurs Sommersemester 2018 Werner Struckmann 23. März 2018

Transcript of Was kann ein Computer ausrechnen? -...

Page 1: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Was kann ein Computer ausrechnen?

Vorkurs Sommersemester 2018

Werner Struckmann

23. März 2018

Page 2: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Was kann ein Rechner ausrechnen?

Was sehen wir uns jetzt an?

Der intuitive Algorithmus

Vom Algorithmus zum Programm

Gibt es Probleme, für die kein Algorithmus existiert?

Der formale Algorithmus

Rechnen mit Programmen

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 2 / 50

Page 3: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Der intuitive Algorithmusbegriff

Gegeben sei ein „Problem“. Eine Handlungsvorschrift, deren mechanischesBefolgen ohne Verständnis des Problems zur Lösung des Problems führt, wird„Algorithmus“ genannt.

Etwas präziser: Ein Algorithmus ist eine wohldefinierte „Rechenvorschrift“, die eine(evtl. leere) Menge von Größen als Eingabe verwendet und eine Menge vonGrößen als Ausgabe erzeugt. Ein Algorithmus ist also eine Abfolge vonRechenschritten, die die (evtl. leere) Eingabe in eine Ausgabe umwandelt. Es wirdnicht gefordert, dass die Abfolge der Rechenschritte stets terminiert.

Ein Problem, für dessen Lösung ein Algorithmus existiert, heißt berechenbar.

Halteproblem: Es gibt keinen Algorithmus, der für Algorithmen und Eingabenberechnen kann, ob der Algorithmus bei der Eingabe terminiert.

Page 4: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Der intuitive Algorithmus

Ein Algorithmus ist eine „Berechnungsvorschrift“. Die Aufgabe, die der Algorithmuslösen soll, wird durch eine Spezifikation festgelegt.

Der Algorithmus muss durch einen endlichen Text in einer wohldefiniertenSprache beschrieben sein.

Sie beschreibt die auszuführenden Berechnungen „hinreichend präzise“.

Die Berechnungen sind aus „elementaren“ Operationen aufgebaut undbesitzen Aus- und evtl. Eingabewerte.

Die Objekte der Berechnung müssen klar sein.

Die Operationen müssen mechanisch ausführbar sein.

Die Reihenfolge der Operationen muss evtl. feststehen.

Hierbei handelt es ich um eine sog. intuitive Definition. In der Informatik wird aucheine formale Definition benötigt, zum Beispiel zum Nachweis, dass für einbestimmtes Problem kein Algorithmus existiert.

Bruce M. Hood: »Intuitiv heißt nicht erlernt.«

Page 5: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Eigenschaften von Algorithmen

Algorithmen sollen in der Regel terminieren, d. h. bei jeder Eingabeirgendwann zu einem Ende führen. Es gibt Ausnahmen: z. B.Betriebssysteme oder sogenannte „reaktive Systeme“.

Die Terminierung wird in der Definition des Algorithmusbegriffs nichtverwendet. Ein Grund hierfür ist zum Beispiel das Halteproblem.Definitionen müssen überprüfbar sein.

Einen Algorithmus nennt man deterministisch, wenn er bei gleichenEingabedaten stets die gleiche Berechnung ausführt.

Ein Algorithmus heißt determiniert, wenn er bei gleichen Eingabedaten stetsdie gleichen Ausgabedaten liefert.

Algorithmen können weitere Eigenschaften besitzen.Beispiele: nichtdeterministisch, parallel, randomisiert, ...

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 5 / 50

Page 6: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

1. Beispiel: Größter gemeinsamer Teiler

Es sollen zwei Brüche addiert werden:

14+

2352

=1352

+2352

=3652

=4 · 94 · 13

=913

Bestimme den Hauptnenner.

Erweitere die Brüche.

Addiere die Zähler.

Bestimme den ggT von Zähler und Nenner.

Wie berechnet man den ggT?

Kürze den Bruch.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 6 / 50

Page 7: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

1. Algorithmus: Teilermengen

a = 52, b = 36:

Ta = T52 = {1,2,4,13,26,52}Tb = T36 = {1,2,3,4,6,12,18,36}

Ta ∩ Tb = T52 ∩ T36 = {1,2,4}ggT(52,36) = max(Ta ∩ Tb) = max{1,2,4} = 4

Bestimme die Teilermengen Ta und Tb.

Bestimme die Durchschnittsmenge Ta ∩ Tb.

Bestimme das Maximum von Ta ∩ Tb.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 7 / 50

Page 8: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

2. Algorithmus: Primfaktorzerlegung

a = 52, b = 36:

52 = 22 · 30 · 50 · 70 · 110 · 131

36 = 22 · 32 · 50 · 70 · 110 · 130

ggT(52,36) = 22 · 30 · 50 · 70 · 110 · 130 = 4

Bestimme die Primfaktorzerlegungen von a und b .

Bestimme die Primfaktorzerlegung des ggT:Das jeweilige Minimum der Exponenten der Primzahlen von a und b.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 8 / 50

Page 9: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

3. Algorithmus: Algorithmus von Euklid (ca. 300 v. Chr.)

a = 52, b = 36:

Berechne r = a mod b.

Setze a = b und b = r .

Wiederhole diese Schritte bis b = 0 ist.

a ist das Ergebnis.

r a b52 36

16 36 164 16 40 4 0

Als rekursiver Ausdruck:

ggt(a, b) =

{a b = 0

ggt(b, a mod b) b 6= 0

Page 10: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Was haben wir an diesem Beispiel gesehen?

Wenn es zur Lösung eines Problems einen Algorithmus gibt,dann kann es viele Algorithmen für dieses Problem geben.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 10 / 50

Page 11: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

2. Beispiel: Lineare diophantische Gleichung

Gegeben: a, b, c ∈ N (evtl. ∈ Z)

ax + by = c

Gesucht: x, y ∈ Z (ganzzahlige Lösungen)

Solche Gleichungen besitzen Lösungen, falls ggt(a, b) ein Teiler von c ist.

Beispiel:

36x + 52y = 24

Diese Gleichung besitzt Lösungen, da ggt(36,52) = 4 ein Teiler von 24 ist:

36 · 18 + 52 · (−12) = 24

Page 12: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Algorithmus von Berlekamp (Erweiterung des Algorithmus von Euklid)

Falls die Gleichung ax + by = c eine Lösung besitzt, kann die folgende Gleichunggelöst und ihre Ergebnisse multipliziert werden:

ax + by = ggt(a, b) (*)

Beispiel:

Gleichung: 36x + 52y = 24Variante: 36x + 52y = 4

Lösung der Variante: x = 3 und y = −2.Lösung der Gleichung: x = 3 ∗ 6 = 18 und y = −2 ∗ 6 = −12.

Page 13: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Algorithmus von Berlekamp (Erweiterung des Algorithmus von Euklid)

Gegeben: a, bGesucht: Tripel (ggt(a, b), x, y) mit ax + by = ggt(a, b)

berlekamp(a,b) =falls b = 0: (a,1,0)falls b 6= 0:

(t0, t1, t2) = berlekamp (b, a mod b);(t0, t2, t1 − (a/b) · t2)

TheoremDer Algorithmus von Berlekamp löst die Gleichung (*).Damit kann die allgemeine lineare diophantische Gleichung gelöst werden.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 13 / 50

Page 14: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Ansicht

Jetzt sehen wir uns die Algorithmen von Euklid undBerlekamp als Programme an!

Wie wird ein Algorithmus formuliert?

Paradigma.

Beispiele für Paradigmen: imperativ, objektorientiert, funktional, logisch.Es gibt weitere Paradigmen, diese vier sind aber die am häufigsten erwähnten.Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Page 15: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen

Java (objektorientierte Sprache)

s t a t i c i n t ggT ( i n t a , i n t b ) {i n t r ;while ( b != 0) {

r = a % b ;a = b ;b = r ;

}return a ;

}

Prolog (logische Sprache)

ggt (A,0 ,A ) .ggt (A,B, Z ) :− U is A mod B, ggt (B,U, Z ) .

Haskell (funktionale Sprache)

ggt : : Integer −> Integer −> Integerggt a b | b == 0 = a

| otherwise = ggt b ( a ‘mod‘ b )

C-Shell (Skriptsprache)

set a = . . . ; se t b = . . .while ( $b != 0)@ r = $a % $bset a = $bset b = $r

endecho $a

C (imperative Sprache)

i n t ggt ( i n t a , i n t b ) {i n t r ;while ( b != 0) {

r = a % b ;a = b ;b = r ;

}return a ;

}

Page 16: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Algorithmus von Berlekamp als Java-Programm

s t a t i c i n t ggt ( i n t a , i n t b ) {return ( b==0 | | a==b ) ? a : ggt ( b , a%b ) ;

}s t a t i c i n t [ ] berlekamp ( i n t a , i n t b ) {

i f ( b==0) return new i n t [ ] { a , 1 , 0 } ;else {

i n t [ ] t = berlekamp ( b , a%b ) ;return new i n t [ ] { t [ 0 ] , t [ 2 ] , t [1 ] − ( a / b ) * t [ 2 ] } ;

}}s t a t i c void d iophant isch ( i n t a , i n t b , i n t c ) {

i f ( c%ggt ( a , b)==0) {i n t z = c / ggt ( a , b ) ;i n t [ ] t = berlekamp ( a , b ) ;i n t x = t [ 1 ] * z ;i n t y = t [ 2 ] * z ;System . out . p r i n t f ( "%d*(%d)+%d*(%d)=%d%n " ,a , x , b , y , c ) ;

}}

Page 17: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Sprachen: Verwenden alle Sprachen den gleichen Begriff gleich?

Beispiel: Division mit Rest

TheoremFür alle Zahlen a, b ∈ Z, b 6= 0, gibt es genau ein q ∈ Z und ein r ∈ Z mit

a = q · b + r und 0 ≤ r < |b|.

Dieser Satz ist richtig.

Verwenden alle Programmiersprachen für a und b die gleichen Werte für q und r?Die Regel a = q · b + r wird typischerweise eingehalten. Die Werte können aberanders sein:

a b q r

7 -3 -2 1 7=(-2)·(-3)+1 r hat das Vorzeichen von a7 -3 -3 -2 7=(-3)·(-3)+(-2) r hat das Vorzeichen von b

Also Achtung: Semantik der verwendeten Sprache ansehen.

Page 18: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Paradigmen zur Formulierung von Algorithmen

In einem imperativen Algorithmus gibt es Variable, die verschiedene Werteannehmen können. Die Menge aller Variablen und ihrer Werte sowie derProgrammzähler beschreiben den Zustand zu einem bestimmten Zeitpunkt. EinAlgorithmus bewirkt eine Zustandstransformation.

Ein funktionaler Algorithmus formuliert die Berechnung durch Funktionen. DieFunktionen können rekursiv sein; auch gibt es Funktionen höherer Ordnung.

In einem objektorientierten Algorithmus werden Datenstrukturen und Methoden zueiner Klasse zusammengefasst. Von jeder Klasse können Objekte gemäß derDatenstruktur erstellt und über die Methoden manipuliert werden.

Ein logischer (deduktiver) Algorithmus führt Berechnungen durch, indem er ausFakten und Regeln durch Ableitungen in einem logischem Kalkül Ziele beweist.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 18 / 50

Page 19: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Programmiersprachen

Imperative Programmiersprachen:Cobol, Fortran, PL/I, Basic, Algol, Algol68, Pascal, Modula-2, C, Ada, ....

Funktionale Programmiersprachen:Lisp, Scheme, ML, Haskell, Scala, ....

Objektorientierte Programmiersprachen:C++, Eiffel, Smalltalk, Java, C#, Oberon, ....

Logische Programmiersprachen:Prolog.

Hybride Sprachen: z. B. Java, C++, Scala, ....

Skriptsprachen, Spezialsprachen

prozedurales, deklaratives Vorgehen

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 19 / 50

Page 20: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Gibt es Probleme, für die kein Algorithmus existiert?

Wir haben Folgendes schon gesehen:

Eine lineare diophantische Gleichung mit zwei Unbekannten x und y ist eineGleichung der Form

ax + by = c (1)

für gegebene ganze Zahlen a, b, c. Gesucht werden ganze Zahlen x und y , die dieGleichung erfüllen.

Die Gleichung besitzt eine Lösung, wenn der ggT(a, b) ein Teiler von c ist.Es gibt dann einen Algorithmus zum Finden einer Lösung.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 20 / 50

Page 21: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Gibt es Probleme, für die kein Algorithmus existiert?

DefinitionEine allgemeine diophantische Gleichung mit den Unbekannten x1, x2, . . . , xn isteine Gleichung der Form

p(x1, x2, . . . , xn) = 0,

wobei p ein ganzzahliges Polynom mit n Variablen ist.

ProblemGibt es einen Algorithmus, der entscheiden kann, ob eine allgemeinediophantische Gleichung ganzzahlige Lösungen besitzt?

Dies ist das berühmte zehnte Hilbertsche Problem aus dem Jahr 1900.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 21 / 50

Page 22: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Gibt es Probleme, für die kein Algorithmus existiert?

Fakt

Solch einen Algorithmus gibt es nicht.Dies wurde von Yuri Matijasevič im Jahre 1970 bewiesen.

Folgerung

Es gibt Probleme, die mit keinem Computer gelöst werden können!Zum Beispiel das Halteproblem oder das zehnte Hilbertsche Problem.

Gibt es viele Probleme, für die es keinen Algorithmus gibt?Diese Frage sehen wir uns jetzt an.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 22 / 50

Page 23: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Berechenbarkeit und Entscheidbarkeit

Beweise basieren auf formalen Definitionen.

BerechenbarkeitEine mathematische Funktion ist berechenbar, wenn für sie ein Algorithmusformuliert werden kann.

EntscheidbarkeitEine Eigenschaft einer Menge heißt entscheidbar, wenn es einen Algorithmusgibt, der für jedes Element der Menge antworten kann, ob es die Eigenschaftbesitzt oder nicht besitzt (Indikatorfunktion). Falls es kein solches Verfahrengibt, heißt die Eigenschaft für diese Menge unentscheidbar.

BerechnungsmodelleDie formalen Algorithmusdefinitionen nennt man auch Berechnungsmodelle.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 23 / 50

Page 24: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Der formale Algorithmus

Es gibt einige Definitionen für den Algorithmusbegriff:

Turing-Maschine

Markov-Algorithmus

λ-Kalkül

Register-Maschine

While-Programme

partiell-rekursive/µ-rekursive Funktionen

....

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 24 / 50

Page 25: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Church’sche These

ALONZO CHURCH stellte 1936 die folgende These auf, die bis heute nicht widerlegtwurde:

Church’sche These: Der intuitive Algorithmenbegriffwird durch das Modell der Turing-Maschine adäquat definiert.

Die Church’sche These kann natürlich nicht bewiesen werden, da sie denintuitiven Algorithmenbegriff verwendet. Über intuitive Dinge können keineformalen Beweise geführt werden.

Es wurde erwähnt, dass alle formalen Algorithmusdefinitionen äquivalentsind. Daher kann in der Church’schen These die Turing-Maschine durchandere Definitionen des Algorithmus ersetzt werden.

Die Church’sche These wurde bisher aber nicht widerlegt.

Wir sehen uns jetzt eine Definition eines Algorithmusbegriffs an.

Page 26: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Markov-Algorithmus

Ein Markov-Algorithmus M = (Σ, P ) besteht aus einem endlichen Alphabet Σ undeiner endlichen Menge P von sortierten Ableitungsregeln für Wörter über Σ . EinAlphabet ist eine Menge von Zeichen. Die Menge der Wörter über Σ bezeichnetman mit Σ ∗. Eine Ableitungsregel v → w ist ein Paar (v, w) ∈ P ⊆ Σ ∗ × Σ ∗.Außerdem ist eine Teilmenge Pt ⊆ P von terminalen Ableitungsregeln gegeben.Die Teilmenge Pt der terminalen Ableitungsregeln kann auch leer sein.

Die Eingabe e eines Algorithmus ist ein Wort e ∈ Σ ∗.

Die Ausgabe wird wie folgt durch Anwendungen von Ableitungsregeln berechnet:

Es wird die erste Ableitungsregel v → w der sortierten Menge P ausgewählt,deren Wort v ein Teilwort des zu bearbeitenden Wortes ist.

Das am weitesten links stehende Vorkommen von v wird durch w ersetzt.

Dieser Schritt wird wiederholt, bis eine Regel aus Pt angewendet wird oderkeine Regel aus P mehr anwendbar ist.

Das Wort, das nicht mehr verändert wird, ist die Ausgabe a der Eingabe e.

Ein Ableitungsschritt wird mit⇒ bezeichnet. λ ist das leere Wort.

Page 27: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Markov-Algorithmus: Beispiel für die Multiplikation zweier Zahlen

Gegeben sei der Markov-Algorithmus M = (Σ, P ) mit Σ = {a, A,B, #} und derfolgenden Menge der Ableitungsregeln:

P : Ba→ aB Aa→ aBA A→ λ a#→ #A #a→ # #→ λ B→ a

Zudem setzen wir Pt = ∅.

M übersetzt das Eingabewort ai#aj mit i , j ∈ N in das Ausgabewort ak mit k = i · j .

Als Beispiel berechnen wir das Produkt 2 · 3:

aa#aaa⇒ a#Aaaa⇒ a#aBAaa⇒ a#aBaBAa⇒ a#aaBBAa

⇒ a#aaBBaBA⇒ a#aaBaBBA⇒ a#aaaBBBA⇒ a#aaaBBB

⇒ . . .⇒ #aaaBBBBBB⇒ . . .⇒ aaaaaa

Es gilt also 2 · 3 = 6.

Page 28: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Respektion von Funktionen

M0,M1,M2, . . . sei eine Aufzählung aller Algorithmen.ϕ0, ϕ1, ϕ2, . . . seien die zugehörigen berechneten Funktionen.

Definition: Eine Menge von Indizes J ⊆ N respektiert Funktionen, wenn für allei , j ∈ N die Aussage

i ∈ J,ϕi = ϕj =⇒ j ∈ J

gilt.

Beispiele: Offenbar respektieren die folgenden Indexmengen Funktionen.

1. A = {i | 7 liegt im Wertebereich von ϕi },2. B = {i | ϕi ist total},3. C = {i | ϕi ist überall undefiniert},4. D = {i | ϕi = ξ} für eine gegebene partielle Funktion ξ : N→ N.

Page 29: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Der Satz von Rice

Satz: Henry Gordon Rice, 1953: Es sei J ⊆ N eine Menge von Indizes, dieFunktionen respektiert. Dann gilt

J ist entscheidbar ⇐⇒ J = ∅ oder J = N.

Beispiele: Da die obigen Indexmengen A,B,C und D nicht leer und ungleich Nsind und Funktionen respektieren, sind die folgenden Probleme nicht entscheidbar.

1. Gibt ein beliebiger Algorithmus für eine geeignete Eingabe die Zahl 7 aus?2. Hält ein beliebiger Algorithmus bei jeder Eingabe?3. Hält ein beliebiger Algorithmus bei keiner Eingabe?4. Berechnet ein beliebiger Algorithmus die gegebene partielle Funktionξ : N→ N?

Erweiterung: Die Definition und der Satz können auf n-stellige IndexmengenJ ⊆ Nn, n ≥ 2, übertragen werden. Man erhält beispielsweise, dass die Menge{(i , j ) |ϕi = ϕj } Funktionen respektiert und daher nicht entscheidbar ist. Also istdas Äquivalenzproblem für Algorithmen nicht entscheidbar.

Es ist also so gut wie kein Problem algorithmisch lösbar.Schon gesehen: Halteproblem, diophantische Gleichungen.

Page 30: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Der Satz von Rice

Der Beweis des Satzes von Rice wurde auf die Unentscheidbarkeit desHalteproblems zurückgeführt.

Er ist einer der wichtigsten Sätze der Grundlagen der Informatik!

Aus Zeitgründen können wir den Beweis uns aber leider nicht anschauen.

Page 31: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Grenzen der Mathematik

Dirk W. Hoffmann, Grenzen der Mathematik:

Die Tragweite des Satzes von Rice ist enorm! In einem Rundumschlag macht erdie Hoffnung zunichte, irgendeine nichttriviale funktionale Eigenschaft überTuring-Maschinen algorithmisch entscheiden zu können.

Die Grenzen, die uns dieser Satz auferlegt,reichen tief in die Praxis der realen Software-Entwicklung hinein.

So folgt daraus unmittelbar, dass es keinen Algorithmus geben kann, der fürein beliebiges Programm verifiziert, ob es sich entsprechend seinerSpezifikation verhält.

Selbst so einfache Probleme wie die Frage nach der Existenz vonEndlosschleifen entziehen sich einer algorithmischen Lösung.

Seine Allgemeinheit macht den Satz von Ricezu einer der wertvollsten Aussagen der Berechenbarkeitstheorie.

Page 32: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Kann ein Computer richtig rechnen?

Wir haben gesehen, dass es für viele Probleme keine Algorithmen gibt.

Aber dennoch gibt es für viele Probleme Algorithmen zur Verarbeitung derProbleme.

Wie wir gesehen haben, gibt es aber auch Probleme, für deren Lösung esmehrere Algorithmen gibt.

Macht der Computer es korrekt, wenn der Algorithmus korrekt ist?

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 32 / 50

Page 33: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Wie rechnet ein Computer?

Wie rechnet ein Computer?

Warum muss man das wissen, wenn man mit einem Computer arbeitet?

Das wollen wir uns ansehen!

Zuerst rechnen wir etwas selbst.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 33 / 50

Page 34: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

12 · 23 = ?

6

7

2

1 2 · 2 32 4

3 62 7 6

12·23 = (1·10+2)·(2·10+3) = 1·2·100+(1·3+2·2)·10+2·3 = 2·100+7·10+6 = 276

Page 35: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

12 · 23 = ?

6

7

2

1 2 · 2 32 4

3 62 7 6

12·23 = (1·10+2)·(2·10+3) = 1·2·100+(1·3+2·2)·10+2·3 = 2·100+7·10+6 = 276

Page 36: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

12 · 23 = ?

6

7

2

1 2 · 2 32 4

3 62 7 6

12·23 = (1·10+2)·(2·10+3) = 1·2·100+(1·3+2·2)·10+2·3 = 2·100+7·10+6 = 276

Page 37: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

1 2 · 1 21 2

2 41 4 4

1 2 3 · 1 2 31 2 3

2 4 63 6 9

1 5 1 2 9

1 2 3 4 · 1 2 3 41 2 3 4

2 4 6 83 7 0 2

4 9 3 61 5 2 2 7 5 6

Berechnen Sie 12345 · 12345.

Mit einem Java-Programm kontrollierenwir unsere Ergebnisse und berechnen123456 · 123456.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 35 / 50

Page 38: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

public class Mult01 {public s t a t i c void main ( S t r i n g [ ] args ) {

System . out . p r i n t l n ( 1 * 1 ) ;System . out . p r i n t l n (12 *12 ) ;System . out . p r i n t l n (123*123) ;System . out . p r i n t l n (1234*1234) ;System . out . p r i n t l n (12345*12345);System . out . p r i n t l n (123456*123456);

}}

Ausgabe:

1

144

15129

1522756

152399025

-1938485248

Das Quadrat einer Zahl ist nicht negativ. Hat sich der Computer verrechnet?

Page 39: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

public class Mult01 {public s t a t i c void main ( S t r i n g [ ] args ) {

System . out . p r i n t l n ( 1 * 1 ) ;System . out . p r i n t l n (12 *12 ) ;System . out . p r i n t l n (123*123) ;System . out . p r i n t l n (1234*1234) ;System . out . p r i n t l n (12345*12345);System . out . p r i n t l n (123456*123456);

}}

Ausgabe:

1

144

15129

1522756

152399025

-1938485248

Das Quadrat einer Zahl ist nicht negativ. Hat sich der Computer verrechnet?

Page 40: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

Wir sehen uns ein zweites Beispiel an:

public class Mult02 {public s t a t i c void main ( S t r i n g [ ] args ) {

i n t z = 256*256*256*128+2147483647;System . out . p r i n t l n ( z * z ) ;

}}

Ausgabe: 1

Hat sich der Computer schon wieder verrechnet?

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 37 / 50

Page 41: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Beispiel: Multiplikation zweier Zahlen

Wir sehen uns ein zweites Beispiel an:

public class Mult02 {public s t a t i c void main ( S t r i n g [ ] args ) {

i n t z = 256*256*256*128+2147483647;System . out . p r i n t l n ( z * z ) ;

}}

Ausgabe: 1

Hat sich der Computer schon wieder verrechnet?

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 37 / 50

Page 42: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Ariane-Rakete

Bevor wir uns anschauen, wie es zu solchen Fehlern kommt, sehen wir unseine Minute einen Film an.

Der Film zeigt den Start einer Ariane-Rakete.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 38 / 50

Page 43: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Ariane-Rakete

Wikipedia:

The launch ended in failure due to an error in the software designcaused by inadequate protection from integer overflow. This resulted inthe rocket veering off its flight path 37 seconds after launch, beginning todisintegrate under high aerodynamic forces, and finally self-destructingby its automated flight termination system. The failure has becomeknown as one of the most infamous software bugs in history. The failureresulted in a loss of more than US $ 370 million.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 39 / 50

Page 44: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Das nächste Beispiel: Kommazahlen können größere Werte annehmen

Java:

p u b l i c c lass Numerik {p u b l i c s t a t i c void main ( S t r i n g [ ] args ) {

double a = 1 . 0 / 3 . 0 ,b = 10.0+a−10.0 , c ;

i f ( a==b )c = 0;

elsec = 1 / ( a−b ) ;

System . out . p r i n t f ( " %20.5 f%n " , c ) ;}

}

Ausgabe: -1637672591771089.50000- 1 Billiarde 637 Billionen 672 Milliarden 591 Millionen 771 Tausend und 89,5

korrekter Wert: 0

Kann der Computer nicht rechnen?

Page 45: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Das nächste Beispiel: Kommazahlen können größere Werte annehmen

Java:

p u b l i c c lass Numerik {p u b l i c s t a t i c void main ( S t r i n g [ ] args ) {

double a = 1 . 0 / 3 . 0 ,b = 10.0+a−10.0 , c ;

i f ( a==b )c = 0;

elsec = 1 / ( a−b ) ;

System . out . p r i n t f ( " %20.5 f%n " , c ) ;}

}

Ausgabe: -1637672591771089.50000- 1 Billiarde 637 Billionen 672 Milliarden 591 Millionen 771 Tausend und 89,5

korrekter Wert: 0

Kann der Computer nicht rechnen?

Page 46: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Frage

Computer können Fehler machen.

Können wir es auch?

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 41 / 50

Page 47: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Fehler beim Programmieren

In Jahre 1999 wurde durch die Fehlfunktion eines Seitenairbags ein Babygetötet.

Die Untersuchungen ergaben einen Softwarefehler:Die Ausführungsreihenfolge zweier Anweisungen war vertauscht worden.

Der Fehler trat nur in der Software eines speziellen Fahrzeugmodells auf.

Es wurde vergessen, diese spezielle Software zu testen.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 42 / 50

Page 48: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Fehler beim Programmieren

Richtige Reihenfolge:

airbag = ein;if (kindersitz == belegt) {

airbag = aus;}

Falsche Reihenfolge:

if (kindersitz == belegt) {airbag = aus;

}airbag = ein;

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 43 / 50

Page 49: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Überprüfung von Behauptungen

Die Mathematiker haben bewiesen, dass jede 8-stellige Zahlder Form abcdabcd durch 73 und durch 137 teilbar ist.

Beispiel: 28632863 = 73 · 392231 = 137 · 208999

Gibt es ein Programm, dass diese Behauptung vollständig überprüft undeventuelle Fehlerfälle ausgibt?

Das folgende Programm würde die Zahlen ausgeben,die die Regel der Aufgabe nicht erfüllen.

Laufzeit dieses Programms: 7 Sekunden.Der mathematische Beweis hat vermutlich länger gedauert.

Page 50: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Überprüfung von Behauptungen

class Beweis {s t a t i c boolean check ( i n t x ) {

i f ( x <10000000||x>99999999) return fa lse ;i n t [ ] y = new i n t [ 8 ] ;for ( i n t i =7; i >=0; i −−) {

y [ i ]=x%10; x=x / 1 0 ;}i f ( y [7]==y [ 3 ] && y [6]==y [ 2 ] && y [5]==y [ 1 ] & y [4]==y [ 0 ] ) {

i f ( x%73!=0 | | x%137!=0)return fa lse ;

}return true ;

}public s t a t i c void main ( f i n a l S t r i n g [ ] args ) {

for ( i n t i =10000000; i <=99999999; i++) {i f ( ! check ( i ) ) System . out . p r i n t l n ( i ) ;asser t check ( i ) ;

}}

}

Page 51: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Überprüfung von Behauptungen

Mit solchen Programmiersprachen kann man Programme erstellen, die Aussagenüber endliche viele Fälle prüfen.

Es gibt auch Sprachen, mit denen man Aussagen über unendliche Fälleberechnen oder prüfen kann.

Potenzreihe:

exp(x) =∞∑n=0

xn

n!

Beispiel in einer Computeralgebrasprache:

> sum(1/n!,n=0..infinity);exp(1)

> Digits:=40;Digits := 40

> evalf(exp(1));2.718281828459045235360287471352662497757

Page 52: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Rückblick/Ausblick

Was haben wir gelernt?Sehr viele Probleme können Computer nicht lösen.Computer können aber auch viele Probleme lösen.Wenn es einen Algorithmus gibt, kann es auch mehrere geben.Wenn man einem Computer eine Aufgabe gibt,muss man sich die Grundlagen ansehen:

– Sind der Algorithmus und das Programm partiell und total korrekt?Erfüllt das Programm die Spezifikation und terminiert es?

– Semantik und Realisierung der verwendeten SpracheBeispiele: Bedeutung von Ausdrücken,

Speicherung von Zahlen (Wertebereiche, Genauigkeit)

Außer Programmiersprachen gibt es viele weitere Sprachen:Domain Specific Languages (DSL)Beispiele: Sprachen für Computeralgebra, Datenbanken, .....

Es gibt weitere zu beachtende Aspekte:– Sicherheit von Daten– Komplexität des Algorithmus: Laufzeit, Speicherbedarf, ...– Es ist möglich, dass Programme nicht auf allen Computern gleich laufen.– ...

Page 53: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Fazit

– Es gibt viele Probleme, für die es keine Algorithmen als Lösung gibt.

– Es gibt viele Probleme, für die es viele Algorithmen als Lösung gibt.

– Für Algorithmen, Programme und Computer gibt es sehr vieleFehlermöglichkeiten.

– Es gibt viele Sprachen: GPL und DSL.

Meistens zählt man die Programmiersprachen zu den GPLs unddie Sprachen für spezielle Anwendungen zu den DSLs.

Die Klasseneinteilung ist nicht in allen Quellen genau identisch.

Fazit: Sprachen und Grundlagen anschauen.

Page 54: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Programmierveranstaltungen

Imperative und objektorientierte ProgrammierungProgrammieren I (Java, 1. Sem.)Programmieren II (Java und kleiner Blick auf C, JavaScript, 2. Sem.)

Software EngineeringSoftware Engineering I (UML, 3. Sem.)Software-Entwicklungspraktikum(UML, die Programmiersprache legt das betreuende Institut fest, 4. Sem.)

Übergeordnete Sichtweise, funktionale ProgrammierungProgrammieren f. Fortgeschrittene (zurzeit: Haskell)

Logisches Paradigma, weitere LogikenLogik in der Informatik (Prolog, Master)

Bedeutung und Umsetzung von ProgrammiersprachenSemantik von Programmiersprachen (Master)Compiler I, II, Praktikum (Master)

Konkrete AnwendungSoftwaretechnisches Industriepraktikum

Sie können also bei uns auch Programmieren lernen.

Page 55: Was kann ein Computer ausrechnen? - web.ifis.cs.tu-bs.deweb.ifis.cs.tu-bs.de/ips/struckmann/vorkurs18s/vortrag1.pdf · Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

Einführung Algorithmus Vom Algorithmus zum Programm Kein Algorithmus? Formaler Algorithmus Rechnen mit Programmen

Herzlichen Dank für Ihre Aufmerksamkeit!

Gibt es Fragen?

Ich freue mich, Sie als Student(in) in Braunschweig begrüßen zu dürfen.

23. März 2018 | Werner Struckmann | Was kann ein Computer ausrechnen? | Seite 50 / 50