• Keine Ergebnisse gefunden

Ein Algorithmus

N/A
N/A
Protected

Academic year: 2021

Aktie "Ein Algorithmus"

Copied!
116
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen

\\//_

23. Dezember 2020

(2)

Gliederung (1)

Algorithmusbegriff

Eigenschaften von Algorithmen Darstellung von Algorithmen

Programmablaufpläne Struktogramme

Pseudocode

Anwendungsaufgabe

\\//_ Algorithmen 23. Dezember 2020 2 / 35

(3)

Gliederung (2)

Rekursion und Iteration Rekursion

Iteration

Effizienz und Komplexität

Grenzen der Berechenbarkeit

(4)

Algorithmusbegriff

Algorithmus: Definition

Ein Algorithmus

. . . ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems (oder einer Klasse von Problemen), die aus einer endlichen Folge von Anweisungen besteht.

Das Wort „Algorithmus“ ist eine Abwandlung des Namens Muhammed al-Chwarizmi (ca. 780 – 850), der in einem seiner Werke viele

Rechenverfahren beschrieben hat.

Die Abbildung zeigt ihn auf einer sowjetischen Briefmarke anlässlich seines 1200-jährigen Geburtsjubiläums.

Quelle:https://de.wikipedia.org/wiki/Datei:1983_CPA_5426_(1).png (23. 12. 2020);Dieses Werk unterliegt keinem Urheberrecht.

\\//_ Algorithmen 23. Dezember 2020 4 / 35

(5)

Algorithmusbegriff

Algorithmus: Definition

Ein Algorithmus

. . . ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems (oder einer Klasse von Problemen), die aus einer endlichen Folge von Anweisungen besteht.

Das Wort „Algorithmus“ ist eine Abwandlung des Namens Muhammed al-Chwarizmi (ca. 780 – 850), der in einem seiner Werke viele

Rechenverfahren beschrieben hat.

Die Abbildung zeigt ihn auf einer sowjetischen Briefmarke anlässlich seines 1200-jährigen Geburtsjubiläums.

Quelle:https://de.wikipedia.org/wiki/Datei:1983_CPA_5426_(1).png (23. 12. 2020);Dieses Werk unterliegt keinem Urheberrecht.

(6)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Algorithmen sind durch einige wesentliche Eigenschaften gekennzeichnet:

Determiniertheit

Der Algorithmus ist determiniert, wenn er bei jeder Ausführung mit gleichen Startbedingungen und Eingaben das gleiche Ergebnis liefert.

Determinismus

Ein Algorithmus ist deterministisch, wenn zu jedem Zeitpunkt der Ausführung der nächste Schritt eindeutig definiert ist.

\\//_ Algorithmen 23. Dezember 2020 5 / 35

(7)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Algorithmen sind durch einige wesentliche Eigenschaften gekennzeichnet:

Determiniertheit

Der Algorithmus ist determiniert, wenn er bei jeder Ausführung mit gleichen Startbedingungen und Eingaben das gleiche Ergebnis liefert.

Determinismus

Ein Algorithmus ist deterministisch, wenn zu jedem Zeitpunkt der Ausführung der nächste Schritt eindeutig definiert ist.

(8)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Algorithmen sind durch einige wesentliche Eigenschaften gekennzeichnet:

Determiniertheit

Der Algorithmus ist determiniert, wenn er bei jeder Ausführung mit gleichen Startbedingungen und Eingaben das gleiche Ergebnis liefert.

Determinismus

Ein Algorithmus ist deterministisch, wenn zu jedem Zeitpunkt der Ausführung der nächste Schritt eindeutig definiert ist.

\\//_ Algorithmen 23. Dezember 2020 5 / 35

(9)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Algorithmen sind durch einige wesentliche Eigenschaften gekennzeichnet:

Determiniertheit

Der Algorithmus ist determiniert, wenn er bei jeder Ausführung mit gleichen Startbedingungen und Eingaben das gleiche Ergebnis liefert.

Determinismus

Ein Algorithmus ist deterministisch, wenn zu jedem Zeitpunkt der Ausführung der nächste Schritt eindeutig definiert ist.

(10)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Algorithmen sind durch einige wesentliche Eigenschaften gekennzeichnet:

Determiniertheit

Der Algorithmus ist determiniert, wenn er bei jeder Ausführung mit gleichen Startbedingungen und Eingaben das gleiche Ergebnis liefert.

Determinismus

Ein Algorithmus ist deterministisch, wenn zu jedem Zeitpunkt der Ausführung der nächste Schritt eindeutig definiert ist.

\\//_ Algorithmen 23. Dezember 2020 5 / 35

(11)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Dabei gilt:

À Jeder deterministische Algorithmus ist determiniert,

Á aber nicht jeder determinierte Algorithmus ist deterministisch.

Beispiele:

I Der euklidische Algorithmus (Bestimmung des größten gemeinsamen Teilers zweier ganzer Zahlen) und der Sortieralgorithmus Bubblesort sind deterministisch. I Der Sortieralgorithmus Quicksort nutzt ein zufällig

ausgewähltes Element zum Zerlegen einer Liste in zwei Teillisten. Er ist damit nicht deterministisch.

(12)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Dabei gilt:

À Jeder deterministische Algorithmus ist determiniert,

Á aber nicht jeder determinierte Algorithmus ist deterministisch.

Beispiele:

I Der euklidische Algorithmus (Bestimmung des größten gemeinsamen Teilers zweier ganzer Zahlen) und der Sortieralgorithmus Bubblesort sind deterministisch.

I Der Sortieralgorithmus Quicksort nutzt ein zufällig ausgewähltes Element zum Zerlegen einer Liste in zwei Teillisten. Er ist damit nicht deterministisch.

\\//_ Algorithmen 23. Dezember 2020 6 / 35

(13)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Dabei gilt:

À Jeder deterministische Algorithmus ist determiniert,

Á aber nicht jeder determinierte Algorithmus ist deterministisch.

Beispiele:

I Der euklidische Algorithmus (Bestimmung des größten gemeinsamen Teilers zweier ganzer Zahlen) und der Sortieralgorithmus Bubblesort sind deterministisch.

I Der Sortieralgorithmus Quicksort nutzt ein zufällig ausgewähltes Element zum Zerlegen einer Liste in zwei Teillisten. Er ist damit nicht deterministisch.

(14)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblem

àbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

\\//_ Algorithmen 23. Dezember 2020 7 / 35

(15)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblem

àbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

(16)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblem

àbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

\\//_ Algorithmen 23. Dezember 2020 7 / 35

(17)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblem

àbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

(18)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblem

àbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

\\//_ Algorithmen 23. Dezember 2020 7 / 35

(19)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Finitheit

I Die Beschreibung des Algorithmus (der Quelltext) besitzt eine endliche Länge (à statische Finitheit).

I Der Algorithmus darf zu jedem Zeitpunkt der Ausführung nur einen begrenzten Speicherplatz belegen

(à dynamische Finitheit).

I Der Algorithmus hält bei jeder möglichen Eingabe nach endlich vielen Schritten an (à Terminiertheit).

Halteproblemàbewiesen durch Alan Turing

Es gibt keinen Algorithmus, der feststellen kann, ob ein anderer Algorithmus terminiert ist.

(20)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Effektivität

Der Effekt jeder Anweisung eines Algorithmus muss eindeutig festgelegt sein.

\\//_ Algorithmen 23. Dezember 2020 8 / 35

(21)

Eigenschaften von Algorithmen

Algorithmus: Eigenschaften

Effektivität

Der Effekt jeder Anweisung eines Algorithmus muss eindeutig festgelegt sein.

(22)

Darstellung von Algorithmen

Darstellung von Algorithmen

In Alltagssituationen werden Algorithmen meist umgangssprachlich beschrieben (z. B. Fahranweisungen bei Navigationssystemen).

In der Informatik nutzt man häufig abstraktere grafische Darstellungen. Dazu gehören:

I Programmablaufpläne (nach DIN 66001 oder ISO 5807) I Nassi-Shneiderman-Diagramme (bekannt als

„Struktogramme“)

I Pseudocode (ähnelt natürlicher Sprache und höheren

Programmiersprachen gemischt mit mathematischer Notation)

\\//_ Algorithmen 23. Dezember 2020 9 / 35

(23)

Darstellung von Algorithmen

Darstellung von Algorithmen

In Alltagssituationen werden Algorithmen meist umgangssprachlich beschrieben (z. B. Fahranweisungen bei Navigationssystemen).

In der Informatik nutzt man häufig abstraktere grafische Darstellungen. Dazu gehören:

I Programmablaufpläne (nach DIN 66001 oder ISO 5807) I Nassi-Shneiderman-Diagramme (bekannt als

„Struktogramme“)

I Pseudocode (ähnelt natürlicher Sprache und höheren

Programmiersprachen gemischt mit mathematischer Notation)

(24)

Darstellung von Algorithmen

Darstellung von Algorithmen

In Alltagssituationen werden Algorithmen meist umgangssprachlich beschrieben (z. B. Fahranweisungen bei Navigationssystemen).

In der Informatik nutzt man häufig abstraktere grafische Darstellungen. Dazu gehören:

I Programmablaufpläne (nach DIN 66001 oder ISO 5807)

I Nassi-Shneiderman-Diagramme (bekannt als

„Struktogramme“)

I Pseudocode (ähnelt natürlicher Sprache und höheren

Programmiersprachen gemischt mit mathematischer Notation)

\\//_ Algorithmen 23. Dezember 2020 9 / 35

(25)

Darstellung von Algorithmen

Darstellung von Algorithmen

In Alltagssituationen werden Algorithmen meist umgangssprachlich beschrieben (z. B. Fahranweisungen bei Navigationssystemen).

In der Informatik nutzt man häufig abstraktere grafische Darstellungen. Dazu gehören:

I Programmablaufpläne (nach DIN 66001 oder ISO 5807) I Nassi-Shneiderman-Diagramme (bekannt als

„Struktogramme“)

I Pseudocode (ähnelt natürlicher Sprache und höheren

Programmiersprachen gemischt mit mathematischer Notation)

(26)

Darstellung von Algorithmen

Darstellung von Algorithmen

In Alltagssituationen werden Algorithmen meist umgangssprachlich beschrieben (z. B. Fahranweisungen bei Navigationssystemen).

In der Informatik nutzt man häufig abstraktere grafische Darstellungen. Dazu gehören:

I Programmablaufpläne (nach DIN 66001 oder ISO 5807) I Nassi-Shneiderman-Diagramme (bekannt als

„Struktogramme“)

I Pseudocode (ähnelt natürlicher Sprache und höheren

Programmiersprachen gemischt mit mathematischer Notation)

\\//_ Algorithmen 23. Dezember 2020 9 / 35

(27)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne

Ein Programmablaufplan (PAP)

ist ein Ablaufdiagramm für ein Computerprogramm. Es wird auch als Flussdiagramm (engl. flowchart) oder Programmstrukturplan

bezeichnet.

Es beschreibt die Folge von Operationen zur Lösung einer Aufgabe.

Beispiel ß

(28)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne

Ein Programmablaufplan (PAP)

ist ein Ablaufdiagramm für ein Computerprogramm. Es wird auch als Flussdiagramm (engl. flowchart) oder Programmstrukturplan

bezeichnet.

Es beschreibt die Folge von Operationen zur Lösung einer Aufgabe.

Beispiel ß

\\//_ Algorithmen 23. Dezember 2020 10 / 35

(29)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne

Ein Programmablaufplan (PAP)

ist ein Ablaufdiagramm für ein Computerprogramm. Es wird auch als Flussdiagramm (engl. flowchart) oder Programmstrukturplan

bezeichnet.

Es beschreibt die Folge von Operationen zur Lösung einer Aufgabe.

Beispiel ß

(30)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

\\//_ Algorithmen 23. Dezember 2020 11 / 35

(31)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

(32)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

\\//_ Algorithmen 23. Dezember 2020 11 / 35

(33)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

(34)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

\\//_ Algorithmen 23. Dezember 2020 11 / 35

(35)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

(36)

Darstellung von Algorithmen Programmablaufpläne

Programmablaufpläne – Elemente

Kontrollpunkt:

Verbindung:

Operation:

Unterprogramm ausführen:

Verzweigung:

Ein- und Ausgabe:

\\//_ Algorithmen 23. Dezember 2020 11 / 35

(37)

Darstellung von Algorithmen Struktogramme

Nassi-Shneiderman-Diagramm

. . . oder Struktogramm ist ein Diagrammtyp zur Darstellung von Programmentwürfen.

Es wurde 1972/73 von Isaac Nassi und Ben Shneiderman entwickelt und ist in der DIN 66261 genormt.

Nassi-Shneiderman-Diagramme können folgende nach DIN 66261 definierte Strukturelemente enthalten:

https://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

à siehe auch Tafelwerk!

(38)

Darstellung von Algorithmen Struktogramme

Nassi-Shneiderman-Diagramm

. . . oder Struktogramm ist ein Diagrammtyp zur Darstellung von Programmentwürfen.

Es wurde 1972/73 von Isaac Nassi und Ben Shneiderman entwickelt und ist in der DIN 66261 genormt.

Nassi-Shneiderman-Diagramme können folgende nach DIN 66261 definierte Strukturelemente enthalten:

https://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

à siehe auch Tafelwerk!

\\//_ Algorithmen 23. Dezember 2020 12 / 35

(39)

Darstellung von Algorithmen Struktogramme

Nassi-Shneiderman-Diagramm

. . . oder Struktogramm ist ein Diagrammtyp zur Darstellung von Programmentwürfen.

Es wurde 1972/73 von Isaac Nassi und Ben Shneiderman entwickelt und ist in der DIN 66261 genormt.

Nassi-Shneiderman-Diagramme können folgende nach DIN 66261 definierte Strukturelemente enthalten:

https://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

à siehe auch Tafelwerk!

(40)

Darstellung von Algorithmen Struktogramme

Nassi-Shneiderman-Diagramm

Beispiel: Euklidischer Algorithmus zur Berechnung des größten gemeinsamen Teilers zweier Zahlen

while (a>0 and b>0) a>b?

ja nein

a:=a-b b:=b-a

ja b=0? nein

Ausgabe a Ausgabe b

\\//_ Algorithmen 23. Dezember 2020 13 / 35

(41)

Darstellung von Algorithmen Struktogramme

Nassi-Shneiderman-Diagramm

Beispiel: Euklidischer Algorithmus zur Berechnung des größten gemeinsamen Teilers zweier Zahlen

while (a>0 and b>0) a>b?

ja nein

a:=a-b b:=b-a

ja b=0? nein

Ausgabe a Ausgabe b

(42)

Darstellung von Algorithmen Pseudocode

Pseudocode

Mit Pseudocode kann ein Programmablauf unabhängig von einer konkreten Programmiersprache beschrieben werden. Dadurch ist er oft kompakter und leichter verständlich als realer

Programmcode.

Häufig verwendete Schlüsselwörter siehe: https://de.wikipedia.org/wiki/Pseudocode

\\//_ Algorithmen 23. Dezember 2020 14 / 35

(43)

Darstellung von Algorithmen Pseudocode

Pseudocode

Mit Pseudocode kann ein Programmablauf unabhängig von einer konkreten Programmiersprache beschrieben werden. Dadurch ist er oft kompakter und leichter verständlich als realer

Programmcode.

Häufig verwendete Schlüsselwörter siehe:

https://de.wikipedia.org/wiki/Pseudocode

(44)

Darstellung von Algorithmen Pseudocode

Pseudocode

Beispiel: Pseudocode für eine rekursive Variante des Euklidischen Algorithmus:

EUCLID(a,b) 1 wenn b = 0

2 dann return a

3 sonst return EUCLID(b, a mod b)

\\//_ Algorithmen 23. Dezember 2020 15 / 35

(45)

Darstellung von Algorithmen Pseudocode

Pseudocode

Beispiel: Pseudocode für eine rekursive Variante des Euklidischen Algorithmus:

EUCLID(a,b) 1 wenn b = 0

2 dann return a

3 sonst return EUCLID(b, a mod b)

(46)

Darstellung von Algorithmen Anwendungsaufgabe

Aufgaben

1. Informieren Sie sich über Funktionsweise und Varianten des Euklidischen Algorithmus.

http://de.wikipedia.org/wiki/Euklidischer_Algorithmus

2. Wählen Sie eine iterative Variante aus und stellen Sie sie als Nassi-Shneiderman-Diagramm, Programmablaufplan und Pseudocode dar.

3. Programmieren und testen Sie ihre Variante mit Lazarus (zwei Eingabefelder, ein Ausgabefeld).

4. Ergänzen Sie ihr Programm um eine Ausgabe der Zwischen- ergebnisse. Verwenden Sie dazu z. B. die Komponente

TMemo. Mit memo1.Lines.Add(’STRING’) können Sie Strings zeilenweise anzeigen.

\\//_ Algorithmen 23. Dezember 2020 16 / 35

(47)

Darstellung von Algorithmen Anwendungsaufgabe

Aufgaben

1. Informieren Sie sich über Funktionsweise und Varianten des Euklidischen Algorithmus.

http://de.wikipedia.org/wiki/Euklidischer_Algorithmus

2. Wählen Sie eine iterative Variante aus und stellen Sie sie als Nassi-Shneiderman-Diagramm, Programmablaufplan und Pseudocode dar.

3. Programmieren und testen Sie ihre Variante mit Lazarus (zwei Eingabefelder, ein Ausgabefeld).

4. Ergänzen Sie ihr Programm um eine Ausgabe der Zwischen- ergebnisse. Verwenden Sie dazu z. B. die Komponente

TMemo. Mit memo1.Lines.Add(’STRING’) können Sie Strings zeilenweise anzeigen.

(48)

Darstellung von Algorithmen Anwendungsaufgabe

Aufgaben

1. Informieren Sie sich über Funktionsweise und Varianten des Euklidischen Algorithmus.

http://de.wikipedia.org/wiki/Euklidischer_Algorithmus

2. Wählen Sie eine iterative Variante aus und stellen Sie sie als Nassi-Shneiderman-Diagramm, Programmablaufplan und Pseudocode dar.

3. Programmieren und testen Sie ihre Variante mit Lazarus (zwei Eingabefelder, ein Ausgabefeld).

4. Ergänzen Sie ihr Programm um eine Ausgabe der Zwischen- ergebnisse. Verwenden Sie dazu z. B. die Komponente

TMemo. Mit memo1.Lines.Add(’STRING’) können Sie Strings zeilenweise anzeigen.

\\//_ Algorithmen 23. Dezember 2020 16 / 35

(49)

Darstellung von Algorithmen Anwendungsaufgabe

Aufgaben

1. Informieren Sie sich über Funktionsweise und Varianten des Euklidischen Algorithmus.

http://de.wikipedia.org/wiki/Euklidischer_Algorithmus

2. Wählen Sie eine iterative Variante aus und stellen Sie sie als Nassi-Shneiderman-Diagramm, Programmablaufplan und Pseudocode dar.

3. Programmieren und testen Sie ihre Variante mit Lazarus (zwei Eingabefelder, ein Ausgabefeld).

4. Ergänzen Sie ihr Programm um eine Ausgabe der Zwischen- ergebnisse. Verwenden Sie dazu z. B. die Komponente

TMemo. Mit memo1.Lines.Add(’STRING’) können Sie Strings zeilenweise anzeigen.

(50)

Rekursion und Iteration

Rekursion und Iteration

Algorithmen können beim Programmieren auf unterschiedliche Art und Weise implementiert werden:

I rekursiv, d. h. eine Prozedur, Funktion oder Methode ruft sich im Programm selbst wieder auf.

I iterativ, d. h. durch Schleifen werden Anweisungen oder Anweisungsblöcke wiederholt ausgeführt.

Rekursive Algorithmen können prinzipiell auch iterativ implementiert werden und umgekehrt.

\\//_ Algorithmen 23. Dezember 2020 17 / 35

(51)

Rekursion und Iteration

Rekursion und Iteration

Algorithmen können beim Programmieren auf unterschiedliche Art und Weise implementiert werden:

I rekursiv, d. h. eine Prozedur, Funktion oder Methode ruft sich im Programm selbst wieder auf.

I iterativ, d. h. durch Schleifenwerden Anweisungen oder Anweisungsblöcke wiederholt ausgeführt.

Rekursive Algorithmen können prinzipiell auch iterativ implementiert werden und umgekehrt.

(52)

Rekursion und Iteration

Rekursion und Iteration

Algorithmen können beim Programmieren auf unterschiedliche Art und Weise implementiert werden:

I rekursiv, d. h. eine Prozedur, Funktion oder Methode ruft sich im Programm selbst wieder auf.

I iterativ, d. h. durch Schleifenwerden Anweisungen oder Anweisungsblöcke wiederholt ausgeführt.

Rekursive Algorithmen können prinzipiell auch iterativ implementiert werden und umgekehrt.

\\//_ Algorithmen 23. Dezember 2020 17 / 35

(53)

Rekursion und Iteration

Rekursion und Iteration

Algorithmen können beim Programmieren auf unterschiedliche Art und Weise implementiert werden:

I rekursiv, d. h. eine Prozedur, Funktion oder Methode ruft sich im Programm selbst wieder auf.

I iterativ, d. h. durch Schleifenwerden Anweisungen oder Anweisungsblöcke wiederholt ausgeführt.

Rekursive Algorithmen können prinzipiell auch iterativ implementiert werden und umgekehrt.

(54)

Rekursion und Iteration Rekursion

Rekursion

Rekursion

. . . (von lateinisch „recurrere“ – „zurücklaufen“) ist eine Technik, eine Funktion durch sich selbst zu definieren.

Beispiel: mathematische Definition der Fakultät I Die Fakultät der Zahl 0 ist als 1 definiert.

I Die Fakultät einer ganzen Zahl größer Null ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.

Die nächste Folie zeigt die Funktionsweise dieser Definition am Beispiel der Berechnung der Fakultät von 3.

\\//_ Algorithmen 23. Dezember 2020 18 / 35

(55)

Rekursion und Iteration Rekursion

Rekursion

Rekursion

. . . (von lateinisch „recurrere“ – „zurücklaufen“) ist eine Technik, eine Funktion durch sich selbst zu definieren.

Beispiel: mathematische Definition der Fakultät

I Die Fakultät der Zahl 0 ist als 1 definiert.

I Die Fakultät einer ganzen Zahl größer Null ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.

Die nächste Folie zeigt die Funktionsweise dieser Definition am Beispiel der Berechnung der Fakultät von 3.

(56)

Rekursion und Iteration Rekursion

Rekursion

Rekursion

. . . (von lateinisch „recurrere“ – „zurücklaufen“) ist eine Technik, eine Funktion durch sich selbst zu definieren.

Beispiel: mathematische Definition der Fakultät I Die Fakultät der Zahl 0 ist als 1 definiert.

I Die Fakultät einer ganzen Zahl größer Null ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.

Die nächste Folie zeigt die Funktionsweise dieser Definition am Beispiel der Berechnung der Fakultät von 3.

\\//_ Algorithmen 23. Dezember 2020 18 / 35

(57)

Rekursion und Iteration Rekursion

Rekursion

Rekursion

. . . (von lateinisch „recurrere“ – „zurücklaufen“) ist eine Technik, eine Funktion durch sich selbst zu definieren.

Beispiel: mathematische Definition der Fakultät I Die Fakultät der Zahl 0 ist als 1 definiert.

I Die Fakultät einer ganzen Zahl größer Null ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.

Die nächste Folie zeigt die Funktionsweise dieser Definition am Beispiel der Berechnung der Fakultät von 3.

(58)

Rekursion und Iteration Rekursion

Rekursion

Rekursion

. . . (von lateinisch „recurrere“ – „zurücklaufen“) ist eine Technik, eine Funktion durch sich selbst zu definieren.

Beispiel: mathematische Definition der Fakultät I Die Fakultät der Zahl 0 ist als 1 definiert.

I Die Fakultät einer ganzen Zahl größer Null ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.

Die nächste Folie zeigt die Funktionsweise dieser Definition am Beispiel der Berechnung der Fakultät von 3.

\\//_ Algorithmen 23. Dezember 2020 18 / 35

(59)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

(60)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

\\//_ Algorithmen 23. Dezember 2020 19 / 35

(61)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

(62)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

\\//_ Algorithmen 23. Dezember 2020 19 / 35

(63)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert

Fakultät von 1 ist also 1·1=1 Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

(64)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

\\//_ Algorithmen 23. Dezember 2020 19 / 35

(65)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2

Fakultät von 3 ist also 1·1·2·3=6

(66)

Rekursion und Iteration Rekursion

Beispiel: Fakultät von 3

für Fakultät von 3 muss man Fakultät von 2 berechnen und mit 3 multiplizieren

für Fakultät von 2 muss man Fakultät von 1 berechnen und mit 2 multiplizieren

für Fakultät von 1 muss man Fakultät von 0 berechnen und mit 1 multiplizieren

Fakultät von 0 ist als 1 definiert Fakultät von 1 ist also 1·1=1

Fakultät von 2 ist also 1·1·2=2 Fakultät von 3 ist also 1·1·2·3=6

\\//_ Algorithmen 23. Dezember 2020 19 / 35

(67)

Rekursion und Iteration Rekursion

Implementation (Pascal)

function fac(x : Integer): Integer;

begin

if x = 0 then fac := 1

else fac := x * fac(x - 1);

end;

Aufgaben:

1. Implementieren Sie diesen Algorithmus mit Lazarus. 2. Testen Sie schrittweise größere Eingabewerte.

3. Variieren Sie das Programm mit anderen

Ganzzahlen-Datentypen und testen Sie erneut.

(68)

Rekursion und Iteration Rekursion

Implementation (Pascal)

function fac(x : Integer): Integer;

begin

if x = 0 then fac := 1

else fac := x * fac(x - 1);

end;

Aufgaben:

1. Implementieren Sie diesen Algorithmus mit Lazarus.

2. Testen Sie schrittweise größere Eingabewerte. 3. Variieren Sie das Programm mit anderen

Ganzzahlen-Datentypen und testen Sie erneut.

\\//_ Algorithmen 23. Dezember 2020 20 / 35

(69)

Rekursion und Iteration Rekursion

Implementation (Pascal)

function fac(x : Integer): Integer;

begin

if x = 0 then fac := 1

else fac := x * fac(x - 1);

end;

Aufgaben:

1. Implementieren Sie diesen Algorithmus mit Lazarus.

2. Testen Sie schrittweise größere Eingabewerte.

3. Variieren Sie das Programm mit anderen

Ganzzahlen-Datentypen und testen Sie erneut.

(70)

Rekursion und Iteration Rekursion

Implementation (Pascal)

function fac(x : Integer): Integer;

begin

if x = 0 then fac := 1

else fac := x * fac(x - 1);

end;

Aufgaben:

1. Implementieren Sie diesen Algorithmus mit Lazarus.

2. Testen Sie schrittweise größere Eingabewerte.

3. Variieren Sie das Programm mit anderen

Ganzzahlen-Datentypen und testen Sie erneut.

\\//_ Algorithmen 23. Dezember 2020 20 / 35

(71)

Rekursion und Iteration Rekursion

Rekursion

Vorteile:

I ermöglicht elegante Problemlösungen durch Zurückführen einer Aufgabe auf eine einfachere gleichartige Aufgabe

I à dadurch einfach und leicht verständlich

Nachteile

I geringe Performance und hoher Arbeitsspeicherverbrauch (durch Speichern aller Zwischenergebnisse)

I Stapel- oder Pufferüberläufe (buffer overflow)

I fehlerhafte Abbruchbedingung erzeugt infiniten Regress (à Endlosrekursion)

(72)

Rekursion und Iteration Rekursion

Rekursion

Vorteile:

I ermöglicht elegante Problemlösungen durch Zurückführen einer Aufgabe auf eine einfachere gleichartige Aufgabe I à dadurch einfach und leicht verständlich

Nachteile

I geringe Performance und hoher Arbeitsspeicherverbrauch (durch Speichern aller Zwischenergebnisse)

I Stapel- oder Pufferüberläufe (buffer overflow)

I fehlerhafte Abbruchbedingung erzeugt infiniten Regress (à Endlosrekursion)

\\//_ Algorithmen 23. Dezember 2020 21 / 35

(73)

Rekursion und Iteration Rekursion

Rekursion

Vorteile:

I ermöglicht elegante Problemlösungen durch Zurückführen einer Aufgabe auf eine einfachere gleichartige Aufgabe I à dadurch einfach und leicht verständlich

Nachteile

I geringe Performance und hoher Arbeitsspeicherverbrauch (durch Speichern aller Zwischenergebnisse)

I Stapel- oder Pufferüberläufe (buffer overflow)

I fehlerhafte Abbruchbedingung erzeugt infiniten Regress (à Endlosrekursion)

(74)

Rekursion und Iteration Rekursion

Rekursion

Vorteile:

I ermöglicht elegante Problemlösungen durch Zurückführen einer Aufgabe auf eine einfachere gleichartige Aufgabe I à dadurch einfach und leicht verständlich

Nachteile

I geringe Performance und hoher Arbeitsspeicherverbrauch (durch Speichern aller Zwischenergebnisse)

I Stapel- oder Pufferüberläufe (buffer overflow)

I fehlerhafte Abbruchbedingung erzeugt infiniten Regress (à Endlosrekursion)

\\//_ Algorithmen 23. Dezember 2020 21 / 35

(75)

Rekursion und Iteration Rekursion

Rekursion

Vorteile:

I ermöglicht elegante Problemlösungen durch Zurückführen einer Aufgabe auf eine einfachere gleichartige Aufgabe I à dadurch einfach und leicht verständlich

Nachteile

I geringe Performance und hoher Arbeitsspeicherverbrauch (durch Speichern aller Zwischenergebnisse)

I Stapel- oder Pufferüberläufe (buffer overflow)

I fehlerhafte Abbruchbedingung erzeugt infiniten Regress (à Endlosrekursion)

(76)

Rekursion und Iteration Iteration

Iteration

Iteration

. . . (von englisch „to iterate“ – „wiederholen“) verwendet Schleifen anstelle von Selbstaufrufen (àRekursion).

Vorteile

I Stapelüberläufe (àNachteil der Rekursion) werden verhindert I schnellere Programmabarbeitung, da die Methodenaufrufe

entfallen

Nachteile

I aufwändiger als Rekursion

I à dadurch evtl. schwerer verständlich

\\//_ Algorithmen 23. Dezember 2020 22 / 35

(77)

Rekursion und Iteration Iteration

Iteration

Iteration

. . . (von englisch „to iterate“ – „wiederholen“) verwendet Schleifen anstelle von Selbstaufrufen (àRekursion).

Vorteile

I Stapelüberläufe (àNachteil der Rekursion) werden verhindert I schnellere Programmabarbeitung, da die Methodenaufrufe

entfallen

Nachteile

I aufwändiger als Rekursion

I à dadurch evtl. schwerer verständlich

(78)

Rekursion und Iteration Iteration

Iteration

Iteration

. . . (von englisch „to iterate“ – „wiederholen“) verwendet Schleifen anstelle von Selbstaufrufen (àRekursion).

Vorteile

I Stapelüberläufe (àNachteil der Rekursion) werden verhindert I schnellere Programmabarbeitung, da die Methodenaufrufe

entfallen

Nachteile

I aufwändiger als Rekursion

I à dadurch evtl. schwerer verständlich

\\//_ Algorithmen 23. Dezember 2020 22 / 35

(79)

Rekursion und Iteration Iteration

Iteration

Iteration

. . . (von englisch „to iterate“ – „wiederholen“) verwendet Schleifen anstelle von Selbstaufrufen (àRekursion).

Vorteile

I Stapelüberläufe (àNachteil der Rekursion) werden verhindert I schnellere Programmabarbeitung, da die Methodenaufrufe

entfallen

Nachteile

I aufwändiger als Rekursion

I à dadurch evtl. schwerer verständlich

(80)

Rekursion und Iteration Iteration

Beispiel: Fakultät

function fac(x : integer): integer;

var i, ergebn : integer;

begin

ergebn := 1;

for i := 1 to x do ergebn := ergebn * i;

fac := ergebn;

end;

Aufgabe

Implementieren Sie diesen Algorithmus mit Lazarus. Nutzen Sie eine analoge Oberfläche wie bei der Rekursion. Testen Sie eben- falls mit verschiedenen Eingaben und Ganzzahlen-Datentypen.

\\//_ Algorithmen 23. Dezember 2020 23 / 35

(81)

Rekursion und Iteration Iteration

Beispiel: Fakultät

function fac(x : integer): integer;

var i, ergebn : integer;

begin

ergebn := 1;

for i := 1 to x do ergebn := ergebn * i;

fac := ergebn;

end;

Aufgabe

Implementieren Sie diesen Algorithmus mit Lazarus. Nutzen Sie eine analoge Oberfläche wie bei der Rekursion. Testen Sie eben- falls mit verschiedenen Eingaben und Ganzzahlen-Datentypen.

(82)

Rekursion und Iteration Iteration

Komplexaufgabe

Implementieren Sie den Algorithmus zur Berechnung der Fibonacci-Folge mit Lazarus.

Das Programm soll eine rekursive sowie eine iterative Implementierung beinhalten.

Das Programm kann auf Wunsch benotet werden. Dazu sollten folgende Anforderungen erfüllt werden:

I übersichtliche Oberfläche mit Eingabe der Elementnummer I Buttons für rekursive und iterative Berechnung

I Ausgabe des Elements und der gesamten Zahlenfolge (getrennt für Rekursion und Iteration)

I übersichtlicher und kommentierter Quelltext

\\//_ Algorithmen 23. Dezember 2020 24 / 35

(83)

Rekursion und Iteration Iteration

Komplexaufgabe

Implementieren Sie den Algorithmus zur Berechnung der Fibonacci-Folge mit Lazarus.

Das Programm soll eine rekursive sowie eine iterative Implementierung beinhalten.

Das Programm kann auf Wunsch benotet werden. Dazu sollten folgende Anforderungen erfüllt werden:

I übersichtliche Oberfläche mit Eingabe der Elementnummer I Buttons für rekursive und iterative Berechnung

I Ausgabe des Elements und der gesamten Zahlenfolge (getrennt für Rekursion und Iteration)

I übersichtlicher und kommentierter Quelltext

(84)

Rekursion und Iteration Iteration

Komplexaufgabe

Implementieren Sie den Algorithmus zur Berechnung der Fibonacci-Folge mit Lazarus.

Das Programm soll eine rekursive sowie eine iterative Implementierung beinhalten.

Das Programm kann auf Wunsch benotet werden. Dazu sollten folgende Anforderungen erfüllt werden:

I übersichtliche Oberfläche mit Eingabe der Elementnummer I Buttons für rekursive und iterative Berechnung

I Ausgabe des Elements und der gesamten Zahlenfolge (getrennt für Rekursion und Iteration)

I übersichtlicher und kommentierter Quelltext

\\//_ Algorithmen 23. Dezember 2020 24 / 35

(85)

Rekursion und Iteration Effizienz und Komplexität

Effizienz und Komplexität

Aufgabe

Testen Sie das Programm für unterschiedliche Elemente.

Welchen Unterschied können Sie bei größeren Elementen zwischen rekursivem und iterativem Aufruf feststellen?

Die maximale Elementnummer liegt bei Benutzung des Datentyps

„int64“ für das Berechnungsergebnis bei 92!

Ursache:

I die Anzahl der rekursiven Funktionsaufrufe nimmt mit steigender Elementzahl exponentiell zu

I bei der iterativen Berechnung wächst die Anzahl der Berechnungen nur linear bei steigender Elementzahl

(86)

Rekursion und Iteration Effizienz und Komplexität

Effizienz und Komplexität

Aufgabe

Testen Sie das Programm für unterschiedliche Elemente.

Welchen Unterschied können Sie bei größeren Elementen zwischen rekursivem und iterativem Aufruf feststellen?

Die maximale Elementnummer liegt bei Benutzung des Datentyps

„int64“ für das Berechnungsergebnis bei 92!

Ursache:

I die Anzahl der rekursiven Funktionsaufrufe nimmt mit steigender Elementzahl exponentiell zu

I bei der iterativen Berechnung wächst die Anzahl der Berechnungen nur linear bei steigender Elementzahl

\\//_ Algorithmen 23. Dezember 2020 25 / 35

(87)

Rekursion und Iteration Effizienz und Komplexität

Effizienz und Komplexität

Aufgabe

Testen Sie das Programm für unterschiedliche Elemente.

Welchen Unterschied können Sie bei größeren Elementen zwischen rekursivem und iterativem Aufruf feststellen?

Die maximale Elementnummer liegt bei Benutzung des Datentyps

„int64“ für das Berechnungsergebnis bei 92!

Ursache:

I die Anzahl der rekursiven Funktionsaufrufe nimmt mit steigender Elementzahl exponentiell zu

I bei der iterativen Berechnung wächst die Anzahl der Berechnungen nur linear bei steigender Elementzahl

(88)

Rekursion und Iteration Effizienz und Komplexität

Effizienz und Komplexität

Aufgabe

Testen Sie das Programm für unterschiedliche Elemente.

Welchen Unterschied können Sie bei größeren Elementen zwischen rekursivem und iterativem Aufruf feststellen?

Die maximale Elementnummer liegt bei Benutzung des Datentyps

„int64“ für das Berechnungsergebnis bei 92!

Ursache:

I die Anzahl der rekursiven Funktionsaufrufe nimmt mit steigender Elementzahl exponentiell zu

I bei der iterativen Berechnung wächst die Anzahl der Berechnungen nur linear bei steigender Elementzahl

\\//_ Algorithmen 23. Dezember 2020 25 / 35

(89)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

möglicher Algorithmus:

function fib_rek (n:integer):int64;

begin

if (n = 0) or (n = 1) then result := n

else result := fib_rek (n - 1) + fib_rek (n - 2) end;

Die Anzahl der Funktionsaufrufe nimmt hier exponentiell zu. Außerdem werden viele redundante Berechnungen ausgeführt. Dadurch kann es bei größeren n zu Laufzeit- und

Stackproblemen kommen.

Die folgende Folie zeigt das für die Aufrufe fib_rec(0) bis fib_rec(4).

(90)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

möglicher Algorithmus:

function fib_rek (n:integer):int64;

begin

if (n = 0) or (n = 1) then result := n

else result := fib_rek (n - 1) + fib_rek (n - 2) end;

Die Anzahl der Funktionsaufrufe nimmt hier exponentiell zu.

Außerdem werden viele redundante Berechnungen ausgeführt.

Dadurch kann es bei größeren n zu Laufzeit- und Stackproblemen kommen.

Die folgende Folie zeigt das für die Aufrufe fib_rec(0) bis fib_rec(4).

\\//_ Algorithmen 23. Dezember 2020 26 / 35

(91)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

möglicher Algorithmus:

function fib_rek (n:integer):int64;

begin

if (n = 0) or (n = 1) then result := n

else result := fib_rek (n - 1) + fib_rek (n - 2) end;

Die Anzahl der Funktionsaufrufe nimmt hier exponentiell zu.

Außerdem werden viele redundante Berechnungen ausgeführt.

Dadurch kann es bei größeren n zu Laufzeit- und Stackproblemen kommen.

Die folgende Folie zeigt das für die Aufrufe fib_rec(0) bis fib_rec(4).

(92)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

I n=0 und n=1 à je ein Aufruf

I n=2 (blau) à drei Aufrufe

I n=3 (grün und blau) à fünf Aufrufe I n=4 (rot, grün und blau) à neun Aufrufe

\\//_ Algorithmen 23. Dezember 2020 27 / 35

(93)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

I n=0 und n=1 à je ein Aufruf I n=2 (blau) à drei Aufrufe

I n=3 (grün und blau) à fünf Aufrufe I n=4 (rot, grün und blau) à neun Aufrufe

(94)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

I n=0 und n=1 à je ein Aufruf I n=2 (blau) à drei Aufrufe

I n=3 (grün und blau) à fünf Aufrufe

I n=4 (rot, grün und blau) à neun Aufrufe

\\//_ Algorithmen 23. Dezember 2020 27 / 35

(95)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

I n=0 und n=1 à je ein Aufruf I n=2 (blau) à drei Aufrufe

I n=3 (grün und blau) à fünf Aufrufe I n=4 (rot, grün und blau) à neun Aufrufe

(96)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

Die Anzahl R(n) für die Aufrufe der n-ten Fibonacci-Zahl berechnet sich aus der Summe der Anzahl der vorherigen Aufrufe, vermehrt um 1:

I R(0) = 1 I R(1) = 1

I R(n) = R(n−1) +R(n−2) +1

à

n 0 1 2 3 4 5 6 7 8 9 10

fib_rec(n) 0 1 1 2 3 5 8 13 21 34 55 R(n) 1 1 3 5 9 15 25 41 67 109 177

\\//_ Algorithmen 23. Dezember 2020 28 / 35

(97)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, rekursiv

Die Anzahl R(n) für die Aufrufe der n-ten Fibonacci-Zahl berechnet sich aus der Summe der Anzahl der vorherigen Aufrufe, vermehrt um 1:

I R(0) = 1 I R(1) = 1

I R(n) = R(n−1) +R(n−2) +1à

n 0 1 2 3 4 5 6 7 8 9 10

fib_rec(n) 0 1 1 2 3 5 8 13 21 34 55 R(n) 1 1 3 5 9 15 25 41 67 109 177

(98)

Rekursion und Iteration Effizienz und Komplexität

Funktionsplot für R(n) mit gnuplot

\\//_ Algorithmen 23. Dezember 2020 29 / 35

(99)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, iterativ

möglicher Algorithmus:

function fib_it (n:integer):int64;

var i : integer;

f0, f1, f2 : int64;

begin

f0 := 0; f1 := 1; f2 := 0; i := 0;

while i < n do begin

i := i + 1;

f0 := f1; f1 := f2;

f2 := f1 + f0 end;

result := f2 end;

Die Schleife wird für jede Erhöhung von n einmal mehr durchlaufen à lineare Abhängigkeit von R(n)!

(100)

Rekursion und Iteration Effizienz und Komplexität

Fibonacci, iterativ

möglicher Algorithmus:

function fib_it (n:integer):int64;

var i : integer;

f0, f1, f2 : int64;

begin

f0 := 0; f1 := 1; f2 := 0; i := 0;

while i < n do begin

i := i + 1;

f0 := f1; f1 := f2;

f2 := f1 + f0 end;

result := f2 end;

Die Schleife wird für jede Erhöhung von n einmal mehr durchlaufen à lineare Abhängigkeit von R(n)!

\\//_ Algorithmen 23. Dezember 2020 30 / 35

(101)

Grenzen der Berechenbarkeit

Grenzen der Berechenbarkeit

theoretische Berechenbarkeit

Eine mathematische Funktion f ist theoretisch berechenbar, wenn es einen Algorithmus gibt, der für eine beliebige Eingabe x aus dem Definitionsbereich den Funktionswert f(x) berechnet.

praktische Berechenbarkeit

Eine Funktion f ist praktisch berechenbar, wenn es ein Computerprogramm gibt, das für ein beliebiges x aus dem Definitionsbereich den Funktionswert f(x) auf einem Rechner in polynomialer Zeit berechnet.

(102)

Grenzen der Berechenbarkeit

Grenzen der Berechenbarkeit

theoretische Berechenbarkeit

Eine mathematische Funktion f ist theoretisch berechenbar, wenn es einen Algorithmus gibt, der für eine beliebige Eingabe x aus dem Definitionsbereich den Funktionswert f(x) berechnet.

praktische Berechenbarkeit

Eine Funktion f ist praktisch berechenbar, wenn es ein Computerprogramm gibt, das für ein beliebiges x aus dem Definitionsbereich den Funktionswert f(x) auf einem Rechner in polynomialer Zeit berechnet.

\\//_ Algorithmen 23. Dezember 2020 31 / 35

(103)

Grenzen der Berechenbarkeit

Grenzen der Berechenbarkeit

theoretische Berechenbarkeit

Eine mathematische Funktion f ist theoretisch berechenbar, wenn es einen Algorithmus gibt, der für eine beliebige Eingabe x aus dem Definitionsbereich den Funktionswert f(x) berechnet.

praktische Berechenbarkeit

Eine Funktion f ist praktisch berechenbar, wenn es ein Computerprogramm gibt, das für ein beliebiges x aus dem Definitionsbereich den Funktionswert f(x) auf einem Rechner in polynomialer Zeit berechnet.

(104)

Grenzen der Berechenbarkeit

polynomialer Aufwand

Algorithmen, deren Zeitverhalten als Polynom ausgedrückt werden kann, haben polynomialen Aufwand.

polynomialer Aufwand:

T (n) = a

r

n

r

+ a

r−1

n

r1

+ . . . + a

1

n

1

+ a

0

mit r ∈ N , a

r

. . . a

0

∈ R , a

r

6= 0

r ist dabei der Grad des Polynoms: I r =1 à linearer Aufwand

I r =2 à quadratischer Aufwand I r =3 à kubischer Aufwand

Sortieralgorithmen haben polynomialen Aufwand.

\\//_ Algorithmen 23. Dezember 2020 32 / 35

(105)

Grenzen der Berechenbarkeit

polynomialer Aufwand

Algorithmen, deren Zeitverhalten als Polynom ausgedrückt werden kann, haben polynomialen Aufwand.

polynomialer Aufwand:

T (n) = a

r

n

r

+ a

r−1

n

r1

+ . . . + a

1

n

1

+ a

0

mit r ∈ N , a

r

. . . a

0

∈ R , a

r

6= 0

r ist dabei der Grad des Polynoms: I r =1 à linearer Aufwand

I r =2 à quadratischer Aufwand I r =3 à kubischer Aufwand

Sortieralgorithmen haben polynomialen Aufwand.

(106)

Grenzen der Berechenbarkeit

polynomialer Aufwand

Algorithmen, deren Zeitverhalten als Polynom ausgedrückt werden kann, haben polynomialen Aufwand.

polynomialer Aufwand:

T (n) = a

r

n

r

+ a

r−1

n

r1

+ . . . + a

1

n

1

+ a

0

mit r ∈ N , a

r

. . . a

0

∈ R , a

r

6= 0

r ist dabei der Grad des Polynoms:

I r =1 à linearer Aufwand

I r =2 à quadratischer Aufwand I r =3 à kubischer Aufwand

Sortieralgorithmen haben polynomialen Aufwand.

\\//_ Algorithmen 23. Dezember 2020 32 / 35

(107)

Grenzen der Berechenbarkeit

polynomialer Aufwand

Algorithmen, deren Zeitverhalten als Polynom ausgedrückt werden kann, haben polynomialen Aufwand.

polynomialer Aufwand:

T (n) = a

r

n

r

+ a

r−1

n

r1

+ . . . + a

1

n

1

+ a

0

mit r ∈ N , a

r

. . . a

0

∈ R , a

r

6= 0

r ist dabei der Grad des Polynoms:

I r =1 à linearer Aufwand

I r =2 à quadratischer Aufwand I r =3 à kubischer Aufwand

Sortieralgorithmen haben polynomialen Aufwand.

Referenzen

ÄHNLICHE DOKUMENTE

Aus der Spiegelungssymmetrie folgt f¨ ur Palindrome, deren L¨ ange gr¨ oßer als 1 sind, die ¨ Ubereinstimmung von Anfangs- und End- buchstaben.. Aus der Spiegelungssym- metrie

[r]

(Methode benennen!) Ein l¨ osbares Ausgleichsproblem wird mit beiden Verfahren und derselben Gleitpunktarithmetik behan- delt. Wann wird die Abweichung in den beiden Ergebnissen

[r]

(1) Man beachte, dass die partiellen Ableitungen im Gegensatz zu den gew¨ ohn- lichen Ableitungen nicht durch Striche (oder Punkte im Falle der zeitlichen Ableitung)

Komplexe Nullstellen eines Polynoms mit reellen Koeffizienten treten aber immer in komplex konjugierten Paaren auf und somit ist die Anzahl der echt komplexen Nullstellen eine

5.4 Lineare Gleic h ungssysteme und Matrixin version... .und wie man aus ihnen

[r]