1.1k likes | 1.4k Views
Algorithmen und ihre Eigenschaften. Klaus Becker 2012. Algorithmen und ihre Eigenschaften. Teil 1. Algorithmen - früher und heute Fallstudie - Ägyptische Multiplikation. Fallstudie - Ägyptische Multiplikation.
E N D
Algorithmen und ihre Eigenschaften Klaus Becker 2012
Teil 1 Algorithmen - früher und heute Fallstudie - Ägyptische Multiplikation
Fallstudie - Ägyptische Multiplikation Algorithmen werden seit den Anfängen der Mathematik beim Rechnen benutzt. Im "Papyrus Rhind" wird beschrieben, wie in Ägypten Zahlen multipliziert wurden. Im Jahre 1858 kaufte der englische Archäologe A.H. Rhind in Luxor ein aus zwei Stücken bestehendes Papyrus. Erst einige Jahrzehnte später stellte sich heraus, dass das dritte, fehlende Mittelstück sich in einem New Yorker Museum befand. Zusammen hat das Dokument eine Länge von 5,25 m und eine Breite von 33 cm. Es wurde rund 1700 Jahre vor Christi Geburt geschrieben und enthält viele Mathematikaufgaben. Heute heißt dieses Schriftstück Papyrus Rhind. siehe: http://buergernetz.muenster.de/mauritz//matheserver/teller/aegypten/zahl2.html
Fallstudie - Ägyptische Multiplikation Aufgaben: (a) Versuche, anhand der Beispiele zu erschließen, wie Zahlen im alten Ägypten dargestellt wurden. (b) Welche Gemeinsamkeiten und welche Unterschiede gibt es zu unserer Zahldarstellung heute? (c) Hieroglyphenzahlen lassen sich gut schriftlich addieren und subtrahieren. Beschreibe, wie man dabei vorgehen kann. (d) Warum kann man unsere schriftliche Multiplikation nicht mit Hieroglyphenzahlen nachbilden? (e) Recht gut funktioniert das Verdoppeln und Halbieren von Hieroglyphenzahlen. Probiere das selbst aus.
Fallstudie - Ägyptische Multiplikation Aufgaben: Finde heraus, wie die ägyptische Multiplikation funktioniert. Berechne mit dem Verfahren die folgenden Produkte: 15 * 14 = 9 * 120 = 16 * 7 = Überprüfe aber auch, ob die erzielten Ergebnisse stimmen.
Fallstudie - Ägyptische Multiplikation • Man schreibt die beiden zu multiplizierenden Zahlen nebeneinander. • Auf der linken Seite werden die Zahlen jeweils halbiert (Reste abgerundet) und die Ergebnisse untereinander geschrieben, bis man zur 1 gelangt. • Auf der rechten Seite werden die Zahlen verdoppelt und untereinander geschrieben. • Die rechts stehenden (verdoppelten) Zahlen werden gestrichen, wenn die links stehende Zahl gerade ist. • Die Summe der nicht gestrichenen rechts stehenden Zahlen ergibt das gesuchte Produkt. umgangssprachliche Beschreibung
13 12 12 6 24 3 48 60 1 96 156 Fallstudie - Ägyptische Multiplikation Trace / Ablaufprotokoll Bedingung Anweisung z1 z2 p 13 12 p = 0 0z1 > 0 (w)z1 ungerade (w) p = p + z2 12 z1 = z1 // 2 6 z2 = z2 * 2 24z1 > 0 (w)z1 ungerade (f) z1 = z1 // 2 3 z2 = z2 * 2 48 z1 > 0 (w)z1 ungerade (w) p = p + z2 60 z1 = z1 // 2 1 z2 = z2 * 2 96z1 > 0 (w)z1 ungerade (w) p = p + z2 156 z1 = z1 // 2 0 z2 = z2 * 2 192z1 > 0 (f) Algorithmus in Struktogrammform
Fallstudie - Ägyptische Multiplikation Aufgaben: Entwickle ein Python-Programm zum Algorithmus. Teste das Programm mit verschiedenen Eingaben.
Fallstudie - Ägyptische Multiplikation Bedingung Anweisung z1 z2 p 13 12 p = 0 0z1 > 0 (w)z1 ungerade (w) p = p + z2 12 z1 = z1 // 2 6 z2 = z2 * 2 24z1 > 0 (w)z1 ungerade (f) z1 = z1 // 2 3 z2 = z2 * 2 48 z1 > 0 (w)z1 ungerade (w) p = p + z2 60 z1 = z1 // 2 1 z2 = z2 * 2 96z1 > 0 (w)z1 ungerade (w) p = p + z2 156 z1 = z1 // 2 0 z2 = z2 * 2 192z1 > 0 (f) 13 = 6*2+1 = (3*2+0)*2+1 = ((1*2+1)*2+0)*2+1 = (((0*2+1)*2+1)*2+0)*2+1 = 0*2*2*2*2 + 1*2*2*2 + 1*2*2 + 0*2 + 1 13 * 12 = (1*2^3 + 1*2^2 + 0*2^1 + 1*2^0) * 12 = 8*12 + 4*12 + 0 + 1*12 = 96 + 48 + 12 = 156 13 12 6 24 3 48 Aufgabe: Erkläre, warum der Algorithmus das Multiplikationsverfahren korrekt beschreibt. 1 96 156
Fallstudie - Ägyptische Multiplikation Obwohl das Multiplikationsverfahren der Ägypter heute kaum noch benutzt wird, hat der Algorithmus und die dahinter steckende Idee nichts an ihrer Bedeutung verloren. Die Idee wird heute beim "schnellen Potenzieren" benutzt. Aufgabe: In der freien Enzyklopädie Wikipedia findet man unter dem Stichwort "schnelles Potenzieren" die folgende Verfahrensbeschreibung: "Der Exponent wird schrittweise halbiert (das Ergebnis wird abgerundet) und die Basis schrittweise quadriert. Man streicht die Zeilen mit geradem Exponenten. Das Produkt der nichtgestrichenen rechten Zahlen ist die gesuchte Potenz." Teste erst einmal dieses Verfahren zum schnellen Potenzieren. Entwickle anschließend ein Struktogramm zur Beschreibung des Verfahrens. Du kannst dich am Algorithmus zur ägyptischen Multiplikation orientieren.
Fallstudie - Ägyptische Multiplikation Das Rechnen mit Zahlen ist eine bedeutende Kulturleistung der Menschheit, die gewaltige Auswirkungen hat. Viele Bereiche unseres Lebens wären kaum noch oder gar nicht denkbar, wenn sie nicht von Zahlen und Berechnungen mit diesen Zahlen begleitet wären. Schon sehr früh hat man versucht, das Rechnen mit Zahlen zu automatisieren. So sind z.B. unsere Verfahren zum schriftlichen Rechnen Verfahren, die man schematisch durchführen kann, ohne sie im geringsten Maße verstanden zu haben. Diese Form der Automatisierung ermöglicht es, sehr viele Berechnungen ohne Nachdenken schnell auszuführen. Algorithmen wurden also schon entwickelt und benutzt, lange bevor es Computer gab. Zu diesen algorithmischen Verfahren gehört auch das von den Ägyptern benutzte Verfahren zur Multiplikation von Zahlen. Ohne algorithmische Rechenverfahren wäre es den Ägyptern wohl kaum möglich gewesen, eine funktionierende Gesellschaft aufzubauen, die sogar in der Lage war, riesige Pyramiden zu bauen.
Teil 2 Algorithmen - früher und heute Fallstudie - PageRank
Fallstudie - PageRank Wenn man im Internet nach Information sucht, dann benutzt man sehr häufig eine Suchmaschine. Hier gibt man den Suchbegriff ein - es können natürlich auch mehrere sein, die Suchmaschine liefert dann die Adressen von Webseiten zu diesem Suchbegriff. Die hier benutzte Suchmaschine Ixquick hat (ungefähr) 2877 Suchergebnisse gefunden. Die ersten 10 dieser Suchergebnisse werden in Kurzform angezeigt. Beachte, dass es weit mehr als 2877 Webseiten gibt, auf denen der Begriff "Algorithmus" vorkommt. So liefert die Suchmaschine Google derzeit (ungefähr) 2.640.000 Suchergebnisse zu diesem Suchbegriff. Die Suchmaschine Ixquick liefert also nur eine Auswahl von Webseiten zum eingegebenen Suchbegriff. Hier ergibt sich das Problem, nach welchen Kriterien Ixquick die relevanten Webseiten auswählt. Ein weiteres Problem ergibt sich bei der Präsentation der Suchergebnisse. Wie sollen die Kurzbeschreibungen zu den 2877 gefundenen Webseiten angeordnet werden? Für den Benutzer wäre es hilfreich, wenn wichtige Seiten zuerst aufgelistet würden.
Fallstudie - PageRank Die gesamte "Welt der verlinkten Webseiten" besteht aus sehr vielen Webseiten. Zur Lösung des Ranking-Problems muss man (zum Glück) nicht diese Gesamtheit betrachten. Es reicht, wenn man das Ranking-Problem für eine "kleine Welt" vernetzter Webseiten löst - im großen funktioniert es dann genauso. Aufgabe: Schaue dir die Webseitenwelt in der Darstellung genauer an. Welche der dort gezeigten Webseiten würdest du (ohne Berücksichtigung der Seiteninhalte) eine größere / geringere Relevanz einräumen? Woran orientierst du dich bei der Einschätzung der Relevanz?
Fallstudie - PageRank Modellierung des Surfverhaltens: (A1) Zu Beginn verteilen sich alle Besucher gleichmäßig auf die Webseiten. (A2) Alle Besucher folgen jeweils im gleichen Takt einem Link auf eine weitere Webseite. Wenn auf einer Webseite mehrere Links vorkommen, dann verteilen sich die Besucher gleichmäßig auf die verschiedenen Links. (A3) Besucher, die in eine Sackgasse geraten (d.h. Webseiten besuchen, die keine Links auf weitere Seiten enthalten), besuchen im nächsten Schritt irgend eine der gegebenen Webseiten. Sie teilen sich dabei gleichmäßig auf alle zur Verfügung stehenden Webseiten auf. Aufgabe: Wie viele Nutzer besuchen unter den veränderten Annahmen nach einem Takt die verschiedenen Webseiten?
Fallstudie - PageRank Modellierung des Surfverhaltens: (A1) Zu Beginn verteilen sich alle Besucher gleichmäßig auf die Webseiten. (A2) Alle Besucher folgen jeweils im gleichen Takt einem Link auf eine weitere Webseite. Wenn auf einer Webseite mehrere Links vorkommen, dann verteilen sich die Besucher gleichmäßig auf die verschiedenen Links. (A3) Besucher, die in eine Sackgasse geraten (d.h. Webseiten besuchen, die keine Links auf weitere Seiten enthalten), besuchen im nächsten Schritt irgend eine der gegebenen Webseiten. Sie teilen sich dabei gleichmäßig auf alle zur Verfügung stehenden Webseiten auf. (A4) Ein bestimmter Prozentsatz der Nutzer (z.B. 20%) springt in jedem Takt zu einer beliebigen anderen Webseite. Sie teilen sich dabei gleichmäßig auf alle zur Verfügung stehenden Webseiten auf. Aufgabe: Erkläre, wie die in der Abbildung gezeigten Zahlen gemäß Annahmen zustande kommen
Fallstudie - PageRank Aufgaben: (a) Führe die Berechnungen für mehrere Takte durch. Benutze (gerundete) Dezimalzahlen, wenn die Divisionen nicht aufgehen - auch, wenn das der Wirklichkeit nicht mehr entspricht. (b) Beschreibe die Berechnungen mit einem Algorithmus.
Fallstudie - PageRank # Simulation des Surfverhaltens # Surf- und Sprunganteile p = 0.8 q = 1-p # Initialisierung a = 300 b = 300 c = 300 d = 300 e = 300 f = 300 # Ausgabe ... Aufgabe: Implementiere und teste den PageRank-Verfahren. ... # wiederholte Berechnung der Besucherzahlen for i in range(10): # Bestimmung der neuen Besucherzahlen nach einen Takt a1 = (p*c)/3 + q*(a+b+c+d+e+f)/6 + (p*f)/6 b1 = (p*a)/2 + p*e + q*(a+b+c+d+e+f)/6 + (p*f)/6 c1 = (p*a)/2 + (p*b)/2+ p*d + q*(a+b+c+d+e+f)/6 + (p*f)/6 d1 = (p*c)/3 + (p*b)/2 + q*(a+b+c+d+e+f)/6 + (p*f)/6 e1 = (p*0) + q*(a+b+c+d+e+f)/6 + (p*f)/6 f1 = (p*c)/3 + q*(a+b+c+d+e+f)/6 + (p*f)/6 a = a1 b = b1 c = c1 d = d1 e = e1 f = f1 # Ausgabe ...
Fallstudie - PageRank # Simulation des Surfverhaltens # Surf- und Sprunganteile p = 0.8 q = 1-p # Initialisierung n = 1000 a = n/6 b = n/6 c = n/6 d = n/6 e = n/6 f = n/6 # Ausgabe ... Aufgabe: Die Suchmaschine Google benutzt - in einer Grundversion - das folgende Simulationsprogramm. ... # wiederholte Berechnung der Besucherzahlen for i in range(10): # Bestimmung der neuen Besucherzahlen nach einen Takt a1 = (p*c)/3 + (q*n)/6 b1 = (p*a)/2 + p*e + (q*n)/6 c1 = (p*a)/2 + (p*b)/2+ p*d + (q*n)/6 d1 = (p*c)/3 + (p*b)/2 + (q*n)/6 e1 = (p*0) + (q*n)/6 f1 = (p*c)/3 + (q*n)/6 a = a1 b = b1 c = c1 d = d1 e = e1 f = f1 # Ausgabe ... Vergleiche die hier benutzte Modellierung des Surfverhaltens mit der oben entwickelten Modellierung.
Fallstudie - PageRank Viele Menschen nutzen das Internet (genauer: WWW), wenn sie Information über ein bestimmtes Thema suchen. Meist geben sie ein oder mehrere Stichwörter in eine Suchmaschine ein - und schon kann es mit der Informationsaufnahme losgehen. Suchmaschinen finden oft eine riesige Anzahl von Webseiten, die die eingegebenen Suchbegriffe enthalten. Suchmaschinen nutzen dann eingebaute Strategien, um diese Webseiten dem Nutzer zu präsentieren. Mit Hilfe vorgegebener Algorithmen - zu denen auch das hier entwickelte Verfahren gehört - werden die Webseiten mit Rankingzahlen bewertet und dann entsprechend dieser Rankingwerte nach ihrer Relevanz sortiert angezeigt. Das ist sicher sinnvoll, hat aber auch Konsequenzen. Viele Nutzer schauen sich die ersten Suchergebnisse genauer an, die weiteren - so glaubt man - werden wohl nicht viel Neues bringen. Das hat zur Folge, dass viele Nutzer nur das finden, was von eingebauten Ranking-Algorithmen für besonders relevant befunden wurde. Ranking-Algorithmen steuern auf diese Weise die Informationsaufnahme der Nutzer.
Fallstudie - PageRank "Die perfekte Suchmaschine versteht genau das, was man meint, und liefert genau das, wonach man sucht.« Das war die Vision von Larry Page, als er Google im Jahre 1998 mitgründete. Seither arbeiten die Kalifornier daran, diesem Ziel näher zu kommen. Vor drei Jahren ist ihnen ein großer Schritt gelungen. Tippten bis dahin zwei Nutzer die gleichen Wörter in Googles Suchmaske, bekamen diese dieselbe Antwort. Heute bekommt jeder Suchende eine individuell auf ihn zugeschnittene Reaktion des Computers. Doch so beginnt sich die Welt des Suchenden auf die beschauliche Sammlung seiner Vorlieben zu verengen. Aus dem Tor ins World Wide Web wird ein Tor, das letztlich zu ihm selbst zurückführt. In seinem Buch Filter Bubble kritisiert der Netzpublizist Eli Pariser, dass man sich im Internet in vorgefilterten Blasen bewege: »Mehr und mehr wird dein Computermonitor zum Spiegel, der deine eigenen Interessen reflektiert, während algorithmische Aufseher beobachten, was du anklickst!«" Quelle: http://www.zeit.de/2012/32/Zensur-Google-Internetsuche
Teil 3 Algorithmen - früher und heute Fallstudie - Turnierplanung
Fallstudie - Turnierplanung Zum alljährlichen Schulschachturnier haben sich angemeldet: Alina, Betül, Chris, Dominik, Elisabeth und Florian. Gespielt wird wie jedes Jahr - jeder gegen jeden. Jedes Spiel dauert maximal 15 Minuten. Runde 1: A:F, B:D, C:E Runde 2: A:E, B:F, C:D Runde 3: A:D, B:E, C:F ... Aufgaben: (a) Ein Turnierplan muss her. Kannst du den gezeigten Turnierplan fortsetzen? Welche Schwierigkeit tritt hier auf? (b) Schaffst du es, einen Turnierplan zu entwickeln, der mit 5 Spielrunden auskommt? Tipp: Bei der Entwicklung eines Turnierplans verliert man leicht den Überblick, wer bereits gegen wen gespielt hat. Hier hilft es, wenn man sich die Spielpaarungen veranschaulicht, z.B. so: Die Spielpaarungen der 1. Runde werden mit roten Verbindungslinien markiert, die der 2. Runde mit gelben, die der 3. Runde mit grünen usw..
Fallstudie - Turnierplanung Kurz vor dem Turnier fragen Georg und Hannah, ob sie nicht auch noch mitspielen können. Der gesamte Turnierplan muss jetzt schnell umgestrickt werden. Schaffst du das? Runde 1: H:A, G:B, F:C, E:D Runde 2: H:B, A:C, G:D, F:E Runde 3: H:C, ... ... Aufgaben: (a) Ergänze den dargestellten Turnierplan. (b) Erkennst du hier bereits ein "Planungsmuster"?
Fallstudie - Turnierplanung Ordne A, B, ..., G zu einem 7-Eck an. Setze H in die Mitte des 7-Ecks. # Runde 1 Verbinde H mit A. Verbinde die Ecken des 7-Ecks, die von A aus in 1 Schritt erreichbar sind. Verbinde die Ecken des 7-Ecks, die von A aus in 2 Schritten erreichbar sind. Verbinde die Ecken des 7-Ecks, die von A aus in 3 Schritten erreichbar sind. # Runde 2 Verbinde H mit B. Verbinde die Ecken des 7-Ecks, die von B aus in 1 Schritt erreichbar sind. Verbinde die Ecken des 7-Ecks, die von B aus in 2 Schritten erreichbar sind. Verbinde die Ecken des 7-Ecks, die von B aus in 3 Schritten erreichbar sind. # Runde 3 Verbinde H mit C. Verbinde die Ecken des 7-Ecks, die von C aus in 1 Schritt erreichbar sind. Verbinde die Ecken des 7-Ecks, die von C aus in 2 Schritten erreichbar sind. Verbinde die Ecken des 7-Ecks, die von C aus in 3 Schritten erreichbar sind. usw. Aufgabe: Überprüfe zunächst die vorgegebene Beschreibung. Wie muss sie fortgesetzt werden, um Runde 4 zu erhalten?
Fallstudie - Turnierplanung # Erzeugung eines Turnierplans mit n Teilnehmern Ordne die Teilnehmer 0, 1, ..., (n-2) zu einem (n-1)-Eck an. Setze den Teilnehmer n-1 in die Mitte des (n-1)-Ecks. # Runde 1 Verbinde n-1 mit 0. Verbinde die Ecken des (n-1)-Ecks, die von 0 aus in 1 Schritt erreichbar sind. Verbinde die Ecken des (n-1)-Ecks, die von 0 aus in 2 Schritten erreichbar sind. ... Verbinde die Ecken des (n-1)-Ecks, die von 0 aus in n/2-1 Schritten erreichbar sind. # Runde 2 Verbinde n-1 mit 1. Verbinde die Ecken des (n-1)-Ecks, die von 1 aus in 1 Schritt erreichbar sind. Verbinde die Ecken des (n-1)-Ecks, die von 1 aus in 2 Schritten erreichbar sind. ... Verbinde die Ecken des (n-1)-Ecks, die von 1 aus in n/2-1 Schritten erreichbar sind. # Runde 3 Verbinde n-1 mit 2. Verbinde die Ecken des (n-1)-Ecks, die von 2 aus in 1 Schritt erreichbar sind. Verbinde die Ecken des (n-1)-Ecks, die von 2 aus in 2 Schritten erreichbar sind. ... Verbinde die Ecken des (n-1)-Ecks, die von 2 aus in n/2-1 Schritten erreichbar sind. # ... ...
Fallstudie - Turnierplanung Runde 1: 7 0-1+7 0-2+7 0-3+7 | | | | 0 0+1 0+2 0+3 Runde 2: 7 1-1 1-2+7 1-3+7 | | | | 1 1+1 1+2 1+3 Runde 3: 7 2-1 2-2 2-3+7 | | | | 2 2+1 2+2 2+3 Runde 4: Runde 5: Runde 6: 7 5-1 5-2 5-3 | | | | 5 5+1 5+2-7 5+3-7 Runde 7: Aufgabe: Analysiere das Verfahren. Welche Muster kannst du erkennen? Ergänze die noch fehlenden Runden.
Fallstudie - Turnierplanung Runde 1: 7 0-1+7 0-2+7 0-3+7 | | | | 0 0+1 0+2 0+3 Runde 2: 7 1-1 1-2+7 1-3+7 | | | | 1 1+1 1+2 1+3 Runde 3: 7 2-1 2-2 2-3+7 | | | | 2 2+1 2+2 2+3 Runde 4: Runde 5: Runde 6: 7 5-1 5-2 5-3 | | | | 5 5+1 5+2-7 5+3-7 Runde 7: # Erzeugung eines Turnierplans mit 8 Teilnehmern Für i von 0 bis 6: # Runde i+1 Ausgabe des Spielpaars: 7:i Für j von 1 bis 3: Setze a auf i-j. Setze b auf i+j. Wenn a < 0: Erhöhe a um 7. Wenn b > 6: Verringere b um 7. Ausgabe des Spielpaars: a:b Aufgabe: Erläutere die folgende Verfahrensbeschreibung anhand der oben gezeigten "Berechnungen" für die einzelnen Spielrunden. Wie müsste man die Verfahrensbeschreibung abändern, damit sie für n Teilnehmer funktioniert?
Fallstudie - Turnierplanung Runde 1: 7 0-1+7 0-2+7 0-3+7 | | | | 0 0+1 0+2 0+3 Runde 2: 7 1-1 1-2+7 1-3+7 | | | | 1 1+1 1+2 1+3 Runde 3: 7 2-1 2-2 2-3+7 | | | | 2 2+1 2+2 2+3 Runde 4: Runde 5: Runde 6: 7 5-1 5-2 5-3 | | | | 5 5+1 5+2-7 5+3-7 Runde 7: # Erzeugung eines Turnierplans mit 8 Teilnehmern Für i von 0 bis 6: # Runde i+1 Ausgabe des Spielpaars: 7:i Für j von 1 bis 3: Setze a auf i-j. Setze b auf i+j. Wenn a < 0: Erhöhe a um 7. Wenn b > 6: Verringere b um 7. Ausgabe des Spielpaars: a:b Aufgabe: Implementiere das verallgemeinerte Verfahren in Python.
Fallstudie - Turnierplanung Turnierplanung spielt in etlichen Bereichen unseres Lebens eine Rolle, z.B. bei der Planung von Sportveranstaltungen. So müssen die Spiele der Fußball-Bundesliga genau geplant werden, damit ein so komplexes System bestehend aus Mannschaften, Zuschauern, Parkleitsystemen, Polizeieinsätzen etc. funktioniert. Bei der Planung der Fußball-Bundesliga-Begegnungen muss - zumindest vom Prinzip her - dasselbe Problem gelöst werden wie beim Schulschachturnier: In 17 Spielrunden muss jede der 18 Mannschaften gegen jede andere Mannschaft antreten. Beachte, dass die Planung des Bundesligaturnier deutlich komplexer ist als die Planung des Schulschachturniers: Es wird eine Hin- und eine Rückrunde so gespielt, dass jede Mannschaft einmal Heim- und einmal Gastmannschaft ist. Nach Möglichkeiten sollten sich Heim- und Gastspiele abwechseln. An manchen Spieltagen steht das Stadion durch eine andere Großveranstaltung nicht zur Verfügung, usw..
Fallstudie - Turnierplanung Früher wurde eine solch komplexe Turnierplanung "von Hand" gemacht - wobei die Köpfe der Personen das Planungsteams die entscheidende Rolle gespielt haben. Turnierplanung war eine anspruchsvolle geistige Tätigkeit, die viel Zeit in Anspruch genommen hat. Heute kann eine komplexe Turnierplanung mit Hilfe geeigneter Algorithmen automatisiert durchgeführt werden. Man gibt die Rahmenbedingungen in geeigneter Form vor, ein Rechner ermittelt dann in kurzer Zeit mögliche Turnierabläufe. Das Beispiel Turnierplanung zeigt, dass geistige Tätigkeiten heute zunehmend automatisiert werden. Algorithmen spielen dabei eine entscheidende Rolle und bestimmen so zunehmend große Teile unseres Lebens. Inwieweit das gut oder schlecht ist, musst du selbst beurteilen.
Teil 4 Algorithmusbegriff
Fallstudie - Robotersteuerung Ein Roboter soll Ziegel transportieren. Die Ziegel sind (wie in der Abbildung zu sehen) alle auf einem Feld aufeinder gestapelt. Der Roboter soll den gesamten Ziegeltum zwei Felder weiter in Richtung Süden transportieren. Wie könnte der Roboter das machen? Warum ist es schwierig, ein Verfahren zur Robotersteuerung exakt zu beschreiben?
Fachkonzept - Algorithmus Ein Algorithmus ist eine Verarbeitungsvorschrift, die so präzise formuliert ist, dass sie auch von einer Maschine abgearbeitet werden kann.
Problemlöseverfahren - Version 1 Was soll ich tun? Gehe zum Ziegelturm. Trage den Ziegelturm zwei Felder weiter in Richtung Süden. Gehe zurück zur Ausgangsposition. Aufgabe: Welche Schwierigkeit wird hier beschrieben?
Problemlöseverfahren - Version 2 • Anweisungen: • um 90° nach rechts drehen (kurz: R) • um 90° nach links drehen (kurz: L) • einen Schritt vorwärts gehen (kurz: S) • einen Ziegel aufheben (kurz: A) • einen Ziegel hinlegen (kurz: H) R, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, L, S, R Etwas stimmt hier nicht! Klappt wunderbar! Aufgabe: Welche Schwierigkeit wird hier beschrieben?
Problemlöseverfahren - Version 3 • Anweisungen: • um 90° nach rechts drehen (kurz: R) • um 90° nach links drehen (kurz: L) • einen Schritt vorwärts gehen (kurz: S) • einen Ziegel aufheben (kurz: A) • einen Ziegel hinlegen (kurz: H) Wie geht es hier weiter? R S L L S S R L A H S L S S R R Aufgabe: Welche Schwierigkeit wird hier beschrieben?
Problemlöseverfahren - Version 4 • Bedingungen: • steht vor einem Ziegel (kurz: vZ) • ... R, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn ...: ... sonst: ... sonst: L, S, R sonst: L, S, R sonst: L, S, R So eine lange Vorschrift! Aufgabe: Welche Schwierigkeit wird hier beschrieben?
Anforderungen an Algorithmen Ein Algorithmus ist eine Verarbeitungsvorschrift, die so präzise formuliert ist, dass sie auch von einer Maschine abgearbeitet werden kann. Kriterien: • Ausführbarkeit, d. h. der Prozessor muss die Einzelschritte abarbeiten können • Eindeutigkeit, d. h. die Abfolge der Schritte ist eindeutig festgelegt • Endlichkeit, d. h. seine Beschreibung besteht aus einem Text endlicher Länge • Allgemeinheit, d. h. es wird eine ganze Klasse von Problemen gelöst drehe dich um 90° nach rechts gehe einen Schritt vorwärts drehe dich um 90° nach links solange du vor einem Ziegel stehst, tue Folgendes: hebe einen Ziegel auf drehe dich um 90° nach links gehe einen Schritt vorwärts gehe einen Schritt vorwärts drehe dich um 90° nach rechts lege den Ziegel hin drehe dich um 90° nach rechts gehe einen Schritt vorwärts gehe einen Schritt vorwärts drehe dich um 90° nach links drehe dich um 90° nach links gehe einen Schritt vorwärts drehe dich um 90° nach rechts
Anforderung - Ausführbarkeit Ausführbarkeit bedeutet, dass der "Prozessor" jeden Einzelschritt des Algorithmus ausführen kann. Beachte, dass die Ausführbarkeit eines Algorithmus immer von den Möglichkeiten des "Prozessors" abhängt. Was soll ich tun? Gehe zum Ziegelturm. Trage den Ziegelturm zwei Felder weiter in Richtung Süden. Gehe zurück zur Ausgangsposition. Prozessor: Maschine, Person oder auch gedachte Einheit, die den Algorithmus ausführen soll
Anforderung - Eindeutigkeit Eindeutigkeit bedeutet, dass die Abfolge der einzelnen Schritte genau festgelegt ist. Bei der Abarbeitung der Anweisungen eines Algorithmus muss also immer genau feststehen, wie es weitergeht. Hieraus ergibt sich, dass ein Algorithmus bei denselben Ausgangsdaten immer zum selben Ergebnis kommt. Beachte, dass wir im Rahmen der theoretischen Informatik auch eine Form der Mehrdeutigkeit bei Algorithmen zulassen. Wie geht es hier weiter? R S L L S S R L A H S L S S R R
Anforderung - Endlichkeit Endlichkeit bedeutet, dass die Beschreibung aus einem Text endlicher Länge besteht. Die Endlichkeit der Darstellung ist eigentlich eine Selbstverständlichkeit, da eine unendlich lange Beschreibung in der Praxis nicht vorkommen kann. R, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn vZ dann: A, L, S, S, R, H, R, S, S, L wenn ...: ... sonst: ... sonst: L, S, R sonst: L, S, R sonst: L, S, R So eine lange Vorschrift!
Anforderung - Allgemeinheit Allgemeinheit bedeutet, dass nicht nur ein singuläres Problem, sondern eine ganze Klasse von Problemen gelöst werden soll. Die Forderung nach der Allgemeinheit der Problemstellung lässt man natürlich fallen, wenn man nur an der Lösung eines Einzelfalls interessiert ist. Etwas stimmt hier nicht! R, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, A, L, S, S, R, H, R, S, S, L, L, S, R
Experimente mit Karol Aufgabe: (a) Im Fenster links unten kannst du dir die Anweisungen, Bedingungen und Kontrollstrukturen anzeigen lassen, die man zur Steuerung von Karol verwenden kann. Benutze diese Informationen, um ein Steuerungsverfahren exakt zu formulieren. Der Anfang eines möglichen Steuerungsverfahrens ist im Fenster links oben zu sehen. (b) Teste dein Steuerungsverfahren mit verschiedenen Ziegeltürmen. Dann siehst du direkt, ob das Verfahren korrekt ist. (c) Wenn das Steuerungsverfahren fertig formuliert ist, dann benutze den Menupunkt [Struktogramm], um das Verfahren grafisch in Form eines Struktogramms darzustellen. Wie "liest" man ein solches Struktogramm?
Experimente mit Karol Aufgabe: Der Roboter soll alle Ziegel, die auf dem Weg zur nächsten Wand liegen, einsammeln und anschließend zurück zur Ausgangsposition laufen. Wir setzen hier voraus, dass Ziegel immer nur einzeln (also nicht aufeinanderliegend) vorkommen. Entwickle einen geeigneten Algorithmus.
Bausteine von Algorithmen Problem: Der Roboter soll alle Ziegel, die auf dem Weg zur nächsten Wand liegen, einsammeln und anschließend zurück zur Ausgangsposition laufen. Wir setzen hier voraus, dass Ziegel immer nur einzeln (also nicht aufeinanderliegend) vorkommen. solange NichtIstWand tue wenn IstZiegel dann Aufheben Schritt sonst Schritt *wenn *solange RechtsDrehen RechtsDrehen solange NichtIstWand tue Schritt *solange RechtsDrehen RechtsDrehen
Bausteine von Algorithmen Elementaranweisungen sind Anweisungen, die als Basisaktionen des Prozessors angesehen werden können. Kontrollanweisungen sind Anweisungen, deren Aufgabe es ist, die Ablauflogik festzulegen. Hierzu gehören Anweisungen zur Beschreibung von Wiederholungen, Fallunterscheidungen und zur Sequenzbildung. solange NichtIstWand tue wenn IstZiegel dann Aufheben Schritt sonst Schritt *wenn *solange RechtsDrehen RechtsDrehen solange NichtIstWand tue Schritt *solange RechtsDrehen RechtsDrehen
Darstellung von Algorithmen Umgangssprachlich formulierte Algorithmen versuchen, die Idee eines Algorithmus zu beschreiben, ohne strenge Formalien in der Darstellung zu beachten. Solange die Wand noch nicht erreicht ist, tue Folgendes: Wenn ein Ziegel im Weg liegt, dann hebe ihn auf und gehen einen Schritt weiter. Ansonsten gehe direkt einen Schritt weiter. Drehe dich um 180° Grad. Solange die Wand noch nicht erreicht ist, gehe einen Schritt weiter. Drehe dich um 180° Grad.
Darstellung von Algorithmen Algorithmen, die in einer Programmiersprache verfasst sind, können direkt getestet werden (sofern ein Ausführsystem für die Programmiersprache bereitsteht). solange NichtIstWand tue wenn IstZiegel dann Aufheben Schritt sonst Schritt *wenn *solange RechtsDrehen RechtsDrehen solange NichtIstWand tue Schritt *solange RechtsDrehen RechtsDrehen