Vorkurs Informatik SoSe 15 Algorithmen 1

Institut für Programmierung und Reaktive Systeme Vorkurs Informatik SoSe 15 – Algorithmen 1 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigke...
7 downloads 0 Views 927KB Size
Institut für Programmierung und Reaktive Systeme

Vorkurs Informatik SoSe 15 – Algorithmen 1 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit, 31.03.2015 Technische Universität Braunschweig, IPS

Ziel des Vorkurses Informatik – Algorithmen Grundlegende Einführung in algorithmisches Denken Was ist ein Algorithmus? Was sind Berechnungsschritte? In welcher Reihenfolge sollen sie ausgeführt werden? Eingaben, Ausgaben, Zwischenergebnisse. . .

anhand von Beispielen: Sortierverfahren, Graphenalgorithmen

Zielgruppe Studierende, die wenige informatische Vorerfahrungen haben. Insbesondere, wenn Sie keinen Grund- oder Leistungskurs Informatik belegt haben, keine Programmiererfahrung haben.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 2 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Handlungsvorschriften

Viele Dinge im Leben werden nach einem festgelegtem Schema durchgeführt. Diese Schemata regeln, welche Schritte mit welchen Objekten in welcher Reihenfolge (beispielsweise nacheinander, wiederholt oder bedingt) gemacht werden. Beispiel: Wie heben Sie Geld am Geldautomaten ab? Von der Handlungsvorschrift zum Algorithmus. . .

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 3 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Rezept für Vanillekipferl 200g Mehl 250g Butter 180g Zucker 200g fein gemahlene Mandeln 1 Päckchen Vanillezucker Zubereitung: Aus den Zutaten einen Teig kneten. Eine etwa walnussgroße Menge Teig in der Hand rollen und ein Hörnchen formen. Diese nicht zu dicht auf ein mit Backpapier ausgelegtes Blech legen und im vorgeheizten Backofen bei schwacher Hitze (ca. 150 ◦ C) für ca. 10-15 Minuten goldbraun backen. Solange sie noch warm sind mit einem Gemisch aus 1 Tasse Puderzucker und 1 Päckchen Vanillezucker bestäuben. Abkühlen lassen und in einer gut verschließbaren Dose aufbewahren.

Der Algorithmusbegriff – Handlungsvorschrift Vanillekipferl I Implizit können wir dem Rezept folgende Handlungsvorschrift entnehmen: Nimm eine Schüssel Fülle 200g Mehl hinein Fülle 250g Butter hinein Fülle 180g Zucker hinein Fülle 200g fein gemahlene Mandeln hinein Fülle 1 Päckchen Vanillezucker hinein Knete den Inhalt der Schüssel, bis ein glatter Teig entsteht Forme aus walnussgroßen Stückchen Teig kleine Hörnchen und lege sie auf ein mit Papier ausgelegtes Blech 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 5 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Handlungsvorschrift Vanillekipferl II Schalte den Backofen auf 150 ◦ C Warte 10 Minuten Schiebe Blech in den Backofen Stelle eine Mischung aus einer Tasse Puderzucker und einer Packung Vanillezucker her Warte 10-15 Minuten bis Vanillekipferl goldbraun Nimm Blech aus dem Backofen heraus Bestäube die warmen Kipferl mit Mischung aus Puder- und Vanillezucker 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 6 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Intuitives Algorithmusverständnis Gegeben sei ein „Problem“ oder eine „Problemklasse“ Ein Algorithmus ist eine Handlungsvorschrift zum „Lösen“ des Problems, wobei die Handlungsvorschrift erkennbar einen Anfang und ein Ende1 hat, aus einzelnen Schritten besteht, für die jeweils klar ist, was mit welchen Dingen zu tun ist und die Reihenfolge der Schritte festlegt.

Ein Problem, für dessen Lösung ein Algorithmus existiert, heißt berechenbar. 1 Die Beschreibung ist ein endlicher Text, die Ausführung der Handlungsvorschrift dagegen muss nicht enden.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 7 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Vanillekipferl als Algorithmus I Nimm eine Schüssel Fülle 200g Mehl hinein Fülle 250g Butter hinein Fülle 180g Zucker hinein Fülle 200g fein gemahlene Mandeln hinein Fülle 1 Päckchen Vanillezucker hinein Knete den Inhalt der Schüssel, bis ein glatter Teig entsteht Forme aus walnussgroßen Stückchen Teig kleine Hörnchen und lege sie auf ein mit Papier ausgelegtes Blech 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 8 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Vanillekipferl als Algorithmus II Schalte den Backofen auf 150 ◦ C Warte 10 Minuten Schiebe Blech in den Backofen Stelle eine Mischung aus einer Tasse Puderzucker und einer Packung Vanillezucker her Warte 10-15 Minuten bis Vanillekipferl goldbraun Nimm Blech aus dem Backofen heraus Bestäube die warmen Kipferl mit Mischung aus Puder- und Vanillezucker

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 9 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Ein Algorithmus?

„Engagement, Teamgeist und das permanente Streben nach Perfektion sind wichtige Bausteine unseres Erfolgs. Und unserer Philosophie. Mit technologischer Kompetenz und Innovationskraft bringt XX bewegende Ideen auf die Straße. Der schnellste Sportwagen der Welt, das größte und stärkste Diesel-Aggregat, das je in einen PKW eingebaut wurde oder das sparsamste Automobil aller Zeiten sind nur einige Beispiele, wie XX mit technischen Revolutionen neue Maßstäbe setzt.“

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 10 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Beispiele für Algorithmen Koch- und Backrezepte Bedienungsanleitungen (z.B. für Handys) Notenfolgen zum Musizieren Waschmaschinenprogramme Sortierverfahren Abfolge in Produktionsstraßen Berechnungsverfahren: ggT bestimmen Funktionen ableiten

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 11 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Der Algorithmusbegriff – Präzisierung Ein Algorithmus ist eine wohldefinierte Rechenvorschrift, die eine (eventuell leere) Menge von Eingaben verwendet und eine Menge von Ausgaben erzeugt. Ein Algorithmus ist also eine Abfolge von Berechnungsschritten, die die Eingabe in die Ausgabe umwandelt. Der Algorithmus muss durch einen endlichen Text in einer wohldefinierten Sprache beschrieben sein. Die Objekte der Berechnung müssen klar sein. Die elementaren Operationen müssen mechanisch ausführbar sein. Die Reihenfolge der Operationen muss feststehen.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 12 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Darstellung von Algorithmen Man kann einen Algorithmus beispielsweise als Text Pseudocode oder in einer Programmiersprache als Flussdiagramm (Programmablaufplan) Struktogramm (Nassi-Shneiderman-Diagramm) ...

darstellen. Im Rahmen dieses Vorkurses werden wir Struktogramme nach Nassi-Shneiderman verwenden, wie sie auch in DIN 66261 festgelegt sind. Ein aus verschiedenen Strukturblöcken zusammengesetzte Struktogramm ist im Ganzen rechteckig, d.h. genauso breit wie sein breitester Strukturblock.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 13 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sinnbilder: Sinnbilder: Bennenung und Bemerkung Sinnbild Sinnbilder: Bennenung und Bemerkung Programmablaufplan DIN66001-1966 – Sinnbilder Sinnbild Sinnbild Sinnbild Sinnbild

Bennenung und Bemerkung Operation, allgemein (process) Bennenung und Bemerkung Operation, allgemein (process) Bennenung und Bemerkung Operation, allgemein (process) Operation, allgemein (process) Operation, allgemein (process)

Verzweigung (decision) Verzweigung (decision) Verzweigung (decision) Verzweigung (decision)

Verzweigung (decision)

Unterprogramm (prefdefined Unterprogramm (prefdefined process) Unterprogramm (prefdefined process) Unterprogramm (prefdefined Unterprogramm process) process)(prefdefined process) Ein- und Ausgabe (input/output) Ein- und Ausgabe (input/output) Ein- und Ausgabe (input/output) Einund Ausgabe (input/output) Ein- und Ausgabe (input/output) 02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 13 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 14 02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 13 Vorkurs Informatik SoSe 15 – Algorithmen 1

02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 13 02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 13

Institut für Programmierung und Reaktive Systeme

Sinnbilder: Sinnbild

Sinnbild Sinnbilder: Programmablaufplan Sinnbild Sinnbild Sinnbild

Bennenung und Bemerkung Bennenung und Bemerkung DIN66001-1966 Sinnbilder Bennenung – und Bemerkung Schleifenbegrenzung (loop limit) Schleifenbegrenzung (loop limit) Anfang Anfang Schleifenbegrenzung (loop limit) Bennenung und Bemerkung Bennenung und Bemerkung Anfang Schleifenbegrenzung (loop limit) Schleifenbegrenzung (loop limit) Anfang Schleifenbegrenzung (loop limit) Anfang Schleifenbegrenzung (loop limit) Ende Ende Schleifenbegrenzung (loop limit) Schleifenbegrenzung (loop limit) Ende Ende Schleifenbegrenzung (loop limit) Ende (flow line) Ablauflinie Ablauflinie (flow line) Ablauflinie (flow line) Vorzugsrichtungen Vorzugsrichtungen (Pfeil optional): Vorzugsrichtungen (Pfeil (Pfeil optional): Ablauflinie (flow line) optional): a) von oben nach unten a) von oben nach unten a) von oben nach unten Vorzugsrichtungen (Pfeil optional): b) von links nach rechts von links nach rechts Ablauflinie (flow line) b) von b) links nach rechts a) von oben nach unten Vorzugsrichtungen (Pfeil optional): b) von links nach rechts

Zusammenführen (junction) Zusammenführen (junction) a) von oben nach unten Zusammenführen (junction) Ausgang sollte durch einen Pfeil

Ausgang sollte durch Pfeil b) sollte von links nach rechts Ausgang durch einen Pfeileinen gekennzeichZusammenführen (junction) gekennzeichnet werden gekennzeichnet werden net werden Ausgang sollte durch einen Pfeil

Zusammenführen (junction) gekennzeichnet werden Ausgang sollte durch einen Pfeil gekennzeichnet werden

02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 14 02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 14

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 15 | Vorkurs Informatik – Algorithmen 1 | Seite 14 Vorkurs Informatik02.04.2014 SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Programmablaufplan DIN66001-1966 – Beispiel Beispiel für Programmablaufplan nach DIN66001-1966 Begin Dreckwäsche in die Waschmaschine

Fertig?

Waschmittel in die Waschmaschine

Warten

Waschmaschine anstellen

Fertig?

Wäsche in den Trockner

Warten

Trockner anstellen

Wäsche zusammenlegen

Wäsche in den Schrank räumen

Ende

02.04.2014 | Vorkurs Informatik – Algorithmen 1 | Seite 15

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 16 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme

Linearer Ablauf (Sequenz): Anweisung 1 Anweisung 2 Anweisung 3 Anweisung 4 Anweisung 5

Jede Anweisung wird in einen rechteckigen Strukturblock geschrieben. Strukturblöcke können untereinander gestellt werden. Die Strukturblöcke werden nacheinander von oben nach unten durchlaufen.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 17 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Vanillekipferl Nimm eine Schüsse Fülle 200g Mehl hinein Fülle 250g Butter hinein Fülle 180g Zucker hinein Fülle 200g fein gemahlene Mandeln hinein Fülle 1 Päckchen Vanillezucker hinein Knete den Inhalt der Schüssel, bis ein glatter Teig entsteht Forme aus walnussgroßen Stückchen Teig kleine Hörnchen und lege sie auf ein mit Papier ausgelegtes Backblech Schalte Backofen auf 150 ◦ C Warte 10 Minuten Schiebe Blech in den Backofen Warte 10-15 Minuten Stelle eine Mischung aus einer Tasse Puderzucker und einer Packung Vanillezucker her Nimm Blech aus Backofen heraus Bestäube die noch warmen Kipferl mit Mischung aus Puder- und Vanillezucker

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 18 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Zweifache Auswahl (alternative Verarbeitung) Bedingung Wahr Anweisungsblock 1

Falsch Anweisungsblock 2

Wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen. Trifft die Bedingung nicht zu (falsch), wird der Anweisungsblock 2 durchlaufen. Ein Anweisungsblock kann aus einer oder mehreren Anweisungen bestehen. Austritt erfolgt nach unten nach Abarbeitung des jeweiligen Anweisungsblocks.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 19 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Zweifache Auswahl (alternative Verarbeitung)

Anweisungen . . . Fülle ein Päckchen Vanillezucker hinzu Knete den Inhalt der Schüssel, bis ein glatter Teig entsteht Ist der Teig fest? Ja Fortfahren

Nein Füge einen Esslöffel Mehl hinzu

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 20 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Verschachtelte zweifache Auswahl

Anweisungen . . . Wird Mehl für das Rezept benötigt? Ja Ist Mehl vorrätig? Ja Nein Fortfahren Setze Mehl auf Einkaufsliste ∅ Anweisungen ...

Nein Fortfahren

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 21 Vorkurs Informatik SoSe 15 – Algorithmen 1



Institut für Programmierung und Reaktive Systeme

Struktogramme – Fallauswahl Variable

Wert 1 Anweisungsblock 1

Wert 2 Anweisungsblock 2

Wert n Anweisungsblock n

Sonst Alternativblock (optional)

Besonders bei mehr als drei abzuprüfenden Bedingungen geeignet. Der Wert von "Variable"kann bedingt auf Gleichheit wie auch auf Bereiche (größer/kleiner bei Zahlen) geprüft werden und der entsprechend zutreffende „Fall“ mit dem zugehörigen Anweisungsblock wird durchlaufen.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 22 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Abweisende (kopfgesteuerte) Schleife Anweisungen . . . Bedingung Anweisungsblock Anweisungen . . . Wiederholungsstruktur mit vorausgehender Bedingungsprüfung: Zuerst wird die Bedingung ausgewertet: Ergibt sie wahr, wird der Schleifenkörper (Anweisungsblock) einmal ausgeführt. Danach wird zum Beginn der Schleife zurückgekehrt und erneut mit der Prüfung der Bedingung begonnen. Ergibt die Auswertung der Bedingung falsch, wird unterhalb des Schleifenkörpers fortgefahren (ohne ihn auszuführen). Häufig benutzt man eine Bedingung, deren Wahrheitswert sich im Laufe der Zeit verändert, z.B. indem Variablen im Schleifenkörper verändert werden, die in der Bedingung vorkommen. Man führt also die Anweisungen im Schleifenkörper solange aus, bis die Bedingung nicht mehr zutrifft.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 23 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Abweisende Schleife – Beispiel

Anweisungen . . . Schiebe das Blech in den Backofen Solange Kipferl im Backofen noch nicht goldbraun warte eine Minute Nimm das Blech aus dem Ofen Anweisungen . . .

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 24 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Struktogramme – Durchführung

Probieren Sie diesen Algorithmus doch zu Hause einmal aus.

Wir würden uns im Laufe des Vorkurses über einen Nachweis der erfolgreichen Durchführung freuen!

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 25 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Einführung Sortieren als eines der Standardprobleme der Informatik Verschiedenste Algorithmen – Unterschiedliche Laufzeiten – Schlecht im Extremfall, gut im Mittel

Wichtige Unterschiede zum menschlichen Sortieren Um sich einen Überblick über mehrere Elemente zu verschaffen, müssen sie einzeln angesehen und Zwischenergebnisse gebildet werden. Jedes „sich Merken“ oder „Ablegen“ muss in eigens angelegten Speicherstellen stattfinden. Unterschiedliche Arten des Zugriffs auf das n-te Element.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 26 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren

Algorithmus zur Feststellung der kleinsten Zahl in einer Liste

Eingabe: Eine Liste von Zahlen (dargestellt durch einen verdeckt liegenden Stapel mit Zahlenkarten)

Ausgabe: Die kleinste in der Liste vorkommende Zahl

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 27 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren Struktogramm für die Feststellung der kleinsten Zahl in einem Stapel Lege eine Leerkarte zum Merken der kleinsten bisher gefundenen Zahl (lokale Variable) Schreibe die Zahl auf der ersten Karte des Stapels auf die Leerkarte (Sie ist ja in jedem Fall erstmal die kleinste, da wir nur die eine Karte kennen) Für jede weitere Karte aus dem Stapel Zahl der Karte < der bisher kleinsten Zahl?

Ja Schreibe die Zahl als bisher kleinste gefundene Karte auf die Leerkarte

Nein Fahre fort

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 28 Vorkurs Informatik SoSe 15 – Algorithmen 1



Institut für Programmierung und Reaktive Systeme

Sortieren – Algorithmus? Ist das beschriebene Verfahren ein Algorithmus? Das Verfahren ist in einer endlichen Beschreibung durch ein Struktogramm beschrieben. Die Objekte der Berechnung sind die Zahlen des Stapels. Die elementaren Operationen sind das Vergleichen von zwei Zahlen und das Ablegen des Wertes in einer lokalen Variable. Diese sind mechanisch ausführbar. Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 29 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Algorithmus? Ist das beschriebene Verfahren ein Algorithmus? Das Verfahren ist in einer endlichen Beschreibung durch ein Struktogramm beschrieben. Die Objekte der Berechnung sind die Zahlen des Stapels. Die elementaren Operationen sind das Vergleichen von zwei Zahlen und das Ablegen des Wertes in einer lokalen Variable. Diese sind mechanisch ausführbar. Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt. Das Verfahren ist ein Algorithmus.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 29 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Suche der kleinsten Zahl – Liste Zahlen nicht mehr als Stapel, sondern als Liste Zahlen liegen aufgedeckt auf dem Tisch Zahlen haben eine Position in der Liste, beginnend bei 1 Wir können vorne oder hinten etwas an die Liste anhängen Wir können Zahlen auch aus der Liste raus nehmen

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 30 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren Struktogramm für die Feststellung der kleinsten Zahl und deren Position in einer Liste Setze Position der momentan kleinsten Zahl auf 1 Setze die momentan kleinsten Zahl auf das erste Element der Liste Für jedes Element aus der Liste Listenelement < der momentan kleinsten Zahl?

Ja Setze die momentan kleinste Zahl auf das Listenelement Setze die Position der momentan kleinsten Zahl auf die Position der momentan betrachteten Zahl

Nein Fahre fort

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 31 Vorkurs Informatik SoSe 15 – Algorithmen 1



Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Sortieren mit der Suche des Minimums einer Liste Grobe Idee: Wir legen eine neue Liste an Das Minimum und dessen Position wird in der zu sortierenden Liste gesucht Das Minimum wird an die neue Liste angehängt Das Element an der Stelle des Minimums wird gelöscht Wir sind fertig, wenn die zu sortierende Liste leer ist

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 32 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Eine zusätzliche neue Liste ist nicht nötig Idee: Man benutzt eine Hilfsvariable, die die Position angibt, ab der die Liste bereits sortiert ist. Diese Position teilt die Liste in einen linken, sortierten Teil (Positionen kleiner der Hilfsvariable) und einen rechten, unsortierten Teil (Positionen größer gleich der Liste) Zu Beginn zeigt die Hilfsvariable auf das erste Element, die komplette Liste ist also unsortiert (Positionen größer gleich der Hilfsvariable). Solange der Zeiger nicht auf dem letzten Element steht, tue folgendes:Solange der Zeiger nicht auf dem letzten Element steht, tue folgendes: – Suche im unsortierten Teil des Feldes das kleinste Element – Vertausche dieses Element mit dem Element dessen Position der Hilfsvariable entspricht – Versetze die Hilfsvariable um eine Position nach rechts (erhöhe sie um eins)

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 33 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Ausgangsituation:

5

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 34 Vorkurs Informatik SoSe 15 – Algorithmen 1

1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Zum Ende der 1. Iteration:

5

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 35 Vorkurs Informatik SoSe 15 – Algorithmen 1

1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Zu Beginn der 2. Iteration:

1

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 36 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Während der 2. Iteration:

1

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 37 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Zu Beginn der 3. Iteration:

1

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 38 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Während der 3. Iteration:

1

2

9

3

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 39 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Zu Beginn der 4. Iteration:

1

2

3

9

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 40 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Während der 4. Iteration:

1

2

3

9

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 41 Vorkurs Informatik SoSe 15 – Algorithmen 1

5

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Am Ende der 4. Iteration:

1

2

3

5

9

Das Abbruchkriterium (Hilfsvariable auf dem letzten Element der Liste) ist erfüllt und die Liste damit sortiert.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 42 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements

5 1

2

9

3

1

Leerkarte (1), Position des ersten unsortierten Wertes Leerkarte (2), Zwischenspeicher für Austauschoperation Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 45 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3)

5 1

2

9

3

1

Leerkarte (1), Position des ersten unsortierten Wertes Leerkarte (2), Zwischenspeicher für Austauschoperation

5

Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 47 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2)

5

2

9

3

1

1

Leerkarte (1), Position des ersten unsortierten Wertes

5

Leerkarte (2), Zwischenspeicher für Austauschoperation

5

Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 49 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3))

1

2

9

3

1

1

Leerkarte (1), Position des ersten unsortierten Wertes

5

Leerkarte (2), Zwischenspeicher für Austauschoperation

5

Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 51 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation

1

2

9

3

5

1

Leerkarte (1), Position des ersten unsortierten Wertes

5

Leerkarte (2), Zwischenspeicher für Austauschoperation

5

Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 53 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort – Struktogramm Lege eine Leerkarte (1) zum Merken der Position ab der noch sortiert werden muss Schreibe die 1 auf Leerkarte (1) (das gesamte Feld ist unsortiert) Lege eine Leerkarte (2) als Zwischenspeicher für die Austauschoperation Lege eine Leerkarte (3) als Zwischenspeicher für die Position des kleinsten Elements Solange der Leerkarte (1) nicht der Position des letzten Elements der Liste entspricht Suche im unsortierten Teil des Feldes (rechts des Zeigers) das kleinste Element und speichere die Position auf Leerkarte (3) Sichere den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) im Zwischenspeicher für die Austauschoperation (Leerkarte 2) Überschreibe den Wert der ersten noch nicht sortierten Karte (Position auf Leerkarte (1)) mit dem gefundenen kleinsten Wert (Position auf Leerkarte (3)) Überschreibe die ursprüngliche Position des kleinsten Wertes (Position auf Leerkarte (3)) mit dem Wert im Zwischenspeicher für die Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

Sortieren – Selection-Sort – Austauschoperation Erhöhe den Wert auf Leerkarte (1) um eins

1

2

9

3

5

2

Leerkarte (1), Position des ersten unsortierten Wertes

5

Leerkarte (2), Zwischenspeicher für Austauschoperation

5

Leerkarte (3), Zwischenspeicher für die Position des kleinsten Elements

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 55 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Ist das beschriebene Verfahren ein Algorithmus? Das Verfahren ist in einer endlichen Beschreibung durch ein Struktogramm gegeben. Die Objekte der Berechnung sind die Zahlen der Liste. Die Operationen sind: Finden der kleinsten Zahl einer Menge: Dies sind mechanisch ausführbar und nicht elementar, aber durch ein Struktogramm näher beschrieben und in elementare Schritte unterteilt. Schreiben und Lesen von Karten. Dieses ist mechanisch ausführbar und elementar.

Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 56 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Selection-Sort Ist das beschriebene Verfahren ein Algorithmus? Das Verfahren ist in einer endlichen Beschreibung durch ein Struktogramm gegeben. Die Objekte der Berechnung sind die Zahlen der Liste. Die Operationen sind: Finden der kleinsten Zahl einer Menge: Dies sind mechanisch ausführbar und nicht elementar, aber durch ein Struktogramm näher beschrieben und in elementare Schritte unterteilt. Schreiben und Lesen von Karten. Dieses ist mechanisch ausführbar und elementar.

Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt. Das Verfahren ist ein Algorithmus. 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 56 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort In einer Wassersäule sind verschieden große Luftblasen. Die unterste Luftblase steigt nun langsam auf. Während sie an kleineren problemlos vorbeikommt, wird sie durch größere gestoppt. Durch den Zusammenprall setzt sich die größere Luftblase in Bewegung, bis auch diese gestoppt wird oder am oberen Säulenende ankommt. Nun setzt sich abermals die unterste Luftblase in Bewegung. Wenn die Wassersäule eine endliche Anzahl Luftblasen enthält, dann kann irgendwann keine Luftblase mehr aufsteigen, da sich über jeder Luftblase eine größere Luftblase befindet. Die Luftblasen sind nun von unten (klein) nach oben (groß) sortiert. Wir werden diese Idee auf eine Liste von Zahlen übertragen. Der Wert der Zahl repräsentiert die Größe der Luftblase. Der Anfang der Liste ist das untere Ende der Wassersäule, das Ende der Liste ist das obere Ende der Wassersäule. 31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 57 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

1. Iteration:

5

3

9

2

1

Die Liste wird von vorne beginnend durchlaufen und die ersten beiden Elemente werden miteinander verglichen. Ist das erste Element größer als das zweite Element, dann folgt ein Vertauschen, denn die größeren Luftblasen können an den kleineren vorbei.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 58 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

1. Iteration:

3

5

9

2

1

Die kleineren Luftblasen stoßen die größeren Luftblasen an und stoppen selbst dabei. Es findet hier also kein Vertauschen der Zahlen „5“ und „9“ statt. Nun wird die „9“ weiter aufsteigen.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 59 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

1. Iteration:

3

5

9

2

1

Der nächste Vergleich führt wieder zu einem Vertauschen, da die Luftblase mit der Größe 9 an der kleineren Luftblase mit der Größe 2 vorbeikommt und weiter aufsteigen kann.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 60 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

1. Iteration:

3

5

2

1

9

Der letzte Vergleich führt wieder zu einem Vertauschen. Die Luftblase mit der Größe 9 ist als größte Luftblase an die Oberfläche der Wassersäule gestiegen. Wir fahren mit der nächsten Iteration fort.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 61 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

2. Iteration:

3

5

2

1

9

Die Luftblase mit der Größe 3 stößt die größere Luftblase an und bleibt selbst dabei stehen. Die größere Luftblase steigt weiter auf, es findet kein Vertauschen statt.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 62 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

2. Iteration:

3

2

1

5

9

Am Ende der zweiten Iteration bleibt die Luftblase der Größe 5 an der Luftblase mit der Größe 9 hängen.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 63 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

3. Iteration:

2

1

3

5

9

Nach der dritten Iteration sind die größten drei Elemente aufsteigend sortiert.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 64 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort

4. Iteration:

1

2

3

5

9

Die vierte Iteration sortiert die letzten beiden Elemente. Danach ist die Liste aufsteigend sortiert.

31.03.2015 Dr. Werner Struckmann / Stephan Mielke / Marvin Priedigkeit Seite 65 Vorkurs Informatik SoSe 15 – Algorithmen 1

Institut für Programmierung und Reaktive Systeme

Sortieren – Bubble Sort – Struktogramm Hinweis: a sei die Anzahl der zu sortierenden Zahlen Reserviere eine Hilfsvariable i für die äußere Schleife Setze i auf 1 Reserviere eine Hilfsvariable j für die innere Schleife Solange i

Suggest Documents