Algorithmen und Algorithmisierung von Aufgaben 2-1
Algorithmisierung: Formulierung (Entwicklung, Wahl) der Algorithmen + symbolische Darstellung von Algorithmen Formalismen für die symbolische Darstellung von Algorithmen: 1. Flussdiagramme 2. Struktogramme 3. Metasprachen 4. Höhere Programmiersprachen 2-2
Computerverarbeitung als Black-Box: Eingabedaten Ausgabedaten Verarbeitungsverfahren (Algorithmus) Wann die Verarbeitungsverfahren die Eigenschaften der Algorithmen haben? 2-3
A L G O R I T H M E N Zum intuitiven Algorithmusbegriff sind folgende Fragestellungen zu beantworten: Gibt es zu einem Problem einen Algorithmus, der es läßt? Stellt eine Verfahrensbeschreibung einen Algorithmus dar? Gibt es zu einem Problem einen Algorithmus, der es in einer bestimmten Zeit läßt? 2-4
Merkmale von Algorithmen Wir betrachten Verfahrensvorschriften zur Lösung eines Problems als Algorithmen, wenn sie die folgenden (Markov sche) Merkmale besitzen: sie bestehen aus endlich vielen Verarbeitungsvorschriften ; die für den Verfahrenablauf notwendigen Informationen liegen vollständig zu Beginn der Verarbeitung vor ; sie spezifizieren eindeutig eine Folge elementarer, eindeutig definierter Operationen ; für jeden Satz von Eingabedaten kommt das Verfahren nach endlich vielen Schritten zu einem Ergebnis; die Anzahl der Schritte muß dabei nicht von vornherein abschätzbar sein. 2-5
Bei jedem Algorithmus unterscheiden wir zwischen dem Algorithmus als dem maschinenunabhängigen Verfahrensvorschrift und der Implementierung dieser Vorschrift, z. B. als Programm in einer Programmiersprache. Komplexität von Algorithmen Drei unterschiedliche Hauptkriterien sind zu berücksichtigen: die Komplexität der Methode (die algoritmische Komplexität), der Speicherplatzbedarf des Verfahrens (die Speicherkomplexität), die Laufzeit des Verfahrens (die Zeitkomplexität). 2-6
Komplexitätsmaße die Anzahl zeitkritischer Elementaroperationen (Vertauschungen, Multiplikationen,...), die Anzahl der Durchläufe innerer Schleifen, die Anzahl von Vergleichsoperationen, die Anzahl der belegten Speicherplätze, Records, Sektoren Anmerkung: Jedes der oben angeführten Komplexitätsmaße wird ausgewertet: im ungünstigsten Fall (für die schlimmste Kombination von Eingabedaten), im mittleren Fall (für die übliche Kombination von Eingabedaten). 2-7
Die häufigsten Arten der Komplexität: konstant (eins) logarithmische lineare linearithmische quadratische kubische (dritter Ordnung) exponentielle Anmerkungen: Die Komplexität aller praktisch brauchbaren Verfahren ist höchstens polynomial, d. h. von einer Ordnung Methoden mit exponentieller Komplexität, sind in der Regel zu aufwendig für einen praktischen Einsatz. 2-8
Entwicklung von Algorithmen Dekomposition der Aufgabe Zerlegung von komplexen Aktionen (Verarbeitungsphasen, Teilaufgaben) auf die einfachere... auf elementare Abstraktion Vereinfachung des komplexen Problems durch Ignorieren von unwichtigen Details Formalismen für die Algorithmenentwicklung. 2-9
1. Flussdiagramme Symbole von speziell definierten Blöcken, verbundene mit Pfeilen. Symbol Bedeutung Anweisung Verarbeitungsschritt (Berechnung, Zuweisung,...) Bedingung Verzweigung (Test) Ein- / Ausgabeoperation (Einlesen, Druck,...) START 5 Anfang / Ende Verbindungsmarke 2-10
Beispiel: Zuweisung z = max ( x, y ) 2-11
2. Struktogramme Symbolische Darstellung: logischer Ausdruck ja nein Anweisung 1 Anweisung 2 Beispiel: Zuweisung z = max ( x, y ) x > y ja nein z x z y 2-12
Komplett: Eingabe von x und y x > y ja nein z x z y Ausgabe von z 2-13
2-14
Beispiel: Lösung der quadratischen Gleichung 2-15
Struktogramm: 2-16
3. Metasprachen Darstellung von Algorithmen in speziell entwickelten Sprachen, z.b.: Beispiel: Summe von N Ganzzahlen: EINGABE (N); S = 0; FOR I = 1 TO N S = S + I; AUSGABE (S); END; 2-17
4. Höhere Programmiersprachen Darstellung von Algorithmen in problemorientierten Programmiersprachen der höchsten Abstraktionsebene, z.b. in der Programmiersprache PASCAL: Read (N); S := 0; for I:=1 to N do S := S + I; Write (S);... 2-18