Grundlegende Begriffe

Algorithmen

Der Begriff des Algorithmus spielt eine zentrale Rolle in der gesamten Informatik und EDV-Entwicklung, egal wie theoretisch oder praktisch die Aspekte sind, unter denen er betrachtet wird. Ein Algorithmus ist eine Rechenvorschrift - in sehr allgemeinem Sinne. Jeder von uns kennt elementare Algorithmen, z.B.

Jedem dieser Algorithmen, so verschieden sie geartet sein mögen, liegen einige grundlegende Eigenschaften zugrunde.

  1. Der Algorithmus muß eine endliche Aufschreibung haben; unzulässig ist z.B.
    a = 1 + 2 + 3 + ..... (die Punkte täuschen eine endliche Aufschreibung vor).
  2. Der Algorithmus muß nach einer bestimmten Zeit in seiner Abarbeitung fertig sein: er muß terminieren.
  3. Die Aufschreibung des Algorithmus muß operativ sein, d.h. schrittweise eine Arbeitsvorschrift erläutern. Eine Forderung wie "Wenn eine unendliche Ziffernfolge die Aufschreibung einer transzendenten Zahl ist, liefere das Ergebnis TRUE, sonst FALSE" ist nicht operativ.

Ein beträchtlicher Teil der Forschung in der Informatik befaßt sich mit dem Entwurf und der Analyse von Algorithmen. Die Brauchbarkeit eines Algorithmus für die Praxis steht und fällt mit dem Rechenaufwand, der für seine Bearbeitung notwendig ist. Ziel bei der Erstellung eines Algorithmus sollte daher nicht zuletzt sein, den Rechenaufwand zum Bearbeiten einer Aufgabe so gering wie möglich zu halten. Angesichts der weiter steigenden Leistung der Computer erscheint diese Forderung immer weniger Gewicht zu erhalten; sie ist aber - so kurios es klingen mag - dadurch nur wichtiger und bedeutender geworden!

Der Begriff Algorithmus leitet sich vom Namen eines arabischen Mathematikers her: Muhammed ibn Musa Alchwarizmi (ca. 800 n. Chr.) verfaßte zwei Lehrbücher der Algebra, in denen er die Verfahren für das Rechnen mit den arabischen Ziffern (und Zahlen) beschreibt. In einer lateinischen Übersetzung wird der Autor mit den Worten "Algoritmi dicit" - in etwa "Algorithmi sagt ..." zitiert.

Ein Algorithmus beschreibt, welche Operationen oder Anweisungen (elementarer Art) mit welchen Objekten auszuführen sind, um eine Aufgabe zu lösen, z.B. Multiplizieren ganzer Zahlen. Die Multiplikation wird zurückgeführt auf das einfachere Multiplizieren eines Faktors mit jeweils einer Ziffer des anderen Faktors. Danach werden die Teilergebnisse stellenrichtig addiert.

Bereits das einfache Beispiel der Multiplikation zeigt, daß Anweisungen wie "Multipliziere einen Faktor mit einer Ziffer des anderen Faktors" oder "Addiere die Teilergebnisse stellenrichtig" weiter erklärt und verfeinert werden müssen. Grundlegend wären hier die Anwendung des kleinen Einmaleins, das stellenrichtige Addieren in der Dezimalschreibweise, wobei die Überträge zu berücksichtigen sind, usw. Sie erkennen, daß die exakte Aufschreibung eines Algorithmus stets von den verfügbaren einfachen Operationen abhängt. Aus einer bestimmten Sehweise sind diese Operationen "einfach" und werden - stets bezogen auf ihren Zusammenhang - auch als primitive Operationen bezeichnet. Auf der Maschinenebene des Computers muß das Addieren langer Zahlen mit mehreren einfachen Operationen bewältigt werden und ist damit nicht mehr primitiv. Ein Programmsystem zum Lösen von Gleichungssystemen kann durchaus solche "primitiven" Operationen wie "Matrixmultiplikation" oder "Vektoraddition" zur Verfügung stellen.

Oft werden die Begriffe Algorithmus und Programm miteinander verwechselt. Dabei bestehen wesentliche Unterschiede. Ein Algorithmus ist die Beschreibung eines Verfahrens und mithin so stark abstrahiert, daß seine Ausführung nicht an einen Menschen oder eine speziell dafür konstruierte Maschine (z.B. Computer) gebunden ist. Ein Programm hingegen ist eine Folge von Anweisungen, um eine bestimmte Aufgabe oder Aufgabenklasse zu lösen. Ein Teil der Anweisungsfolgen besteht aus der Umsetzung von (abstrakten) Algorithmen in eine konkrete Programmiersprache. Andere Teile des Programms dienen der Ein- und Ausgabe von Daten und stellen damit aus der Sicht des Programmierenden keine Algorithmen dar.

 Funktionalität

Mit dem Begriff der Funktionalität wird die Eigenschaft eines Programms oder eines Programmteils bezeichnet, das zu tun, was zu tun ist. Banal? - Nein! Gerade hier sind die meisten Fallstricke und Probleme beim Programmieren verborgen. Funktionalität eines Programms heißt zweierlei:

  1. Das Programm liefert aus den gegebenen Eingabedaten das geforderte Ergebnis. Das Programm tut, was es tun soll.
  2. Das Programm liefert aus Daten außerhalb des Definitionsbereiches kein Ergebnis im Sinne der Aufgabenstellung, sondern z.B. einen Fehlerhinweis. Das Programm tut nicht, was es nicht tun soll.

Die Funktionalität ist dann erfüllt, wenn das Programm genau das tut, was es soll, nicht mehr - und nicht weniger.

Ein Rückblick auf den Begriff des Algorithmus ist hier nötig. Da viele Aufgabenstellungen durch Algorithmen lösbar sind, die in ein Programm umgesetzt werden, kommt dem sorgfältigen Entwurf des geeigneten Algorithmus große Bedeutung zu. Die Korrektheit eines Algorithmus garantiert automatisch - korrekte Umsetzung in die Programmiersprache vorausgesetzt - die Korrektheit der betreffenden Programmpassage.

 Syntax und Semantik

Mit Syntax wird die Grammatik einer Sprache, auch einer Programmiersprache bezeichnet. Die Syntax gibt den Zeichenvorrat - das Alphabet - einer Sprache vor, ihre Worte und die Regeln, nach denen Zeichen und Worte zu Sätzen der Sprache anzuordnen sind. Semantik heißt "Bedeutung". Gemeint sind damit die Bedeutung von Sprachelementen und, im Sinne des Algorithmus, auch die Bedeutung einer Folge von Sätzen der Sprache. Syntax und Semantik sind eng, aber nicht untrennbar miteinander verbunden. Betrachten Sie die nachstehenden Beispiele:

1. Zwei Japaner können sich prachtvoll unterhalten; wir hören ihnen zu, aber verstehen kein Wort. Warum? Wir sind (als Mitteleuropäer in aller Regel) der japanischen Sprache nicht mächtig, d.h. wir kennen weder die Worte der Sprache noch ihre Anordnungsvorschriften, also die Syntax. Zusätzlich wissen wir die Bedeutung der Worte nicht, sind demnach über die Semantik nicht im Bilde.

2. Wer der englischen Sprache nicht mächtig ist, wird dennoch die Buchstaben, in denen ein englischsprachiger Text verfaßt ist, lesen können. Die Worte, die daraus gebildet werden, kann er aber nicht lautrichtig wiedergeben. Von der Syntax der englischen Sprache ist damit nur ein Teil bekannt. Die Semantik, also die Bedeutung, die diese Worte tragen, bleibt verborgen.

3. Ein menschlicher Übersetzer, der englische Literatur ins Deutsche überträgt, ist beider Sprachen mächtig, d.h. er versteht Syntax und Semantik dessen, was er hört und liest. Schwierig ist die Übertragung eines Textes mit einem gewissen Sinngehalt aus der einen Sprache in die andere. Kann jeder Text der englischen Sprache unter Beibehaltung des Sinns (= Semantik) exakt ins Deutsche übertragen werden? Einfache Texte erlauben hier einen größeren Erhalt der Bedeutung, während literarisch anspruchsvolle Vorlagen nicht so einfach übersetzbar sind. Vollends schwierig wird das Übersetzen von Wortspielen oder Anspielungen, die nur im Kulturkreis jeweils einer der Sprachen sinnvoll sind. Wie übersetzen Sie "It's raining cats and dogs"? Eine gute baierische Lösung war der Vorlesungsbeitrag: "'s reng't Schuasterbuam".

4. Selbst innerhalb einer Sprache müssen Syntax und Semantik nicht Jedem zugänglich sein. Ein Beispiel von F. L. Bauer: "... Geberz zu mor un tlas ist offensichtlich nicht in korrektem Deutsch abgefaßt und deshalb sinnlos. Schwimm bitte in die Küche und hacke das Bett ist zwar ohne Verstoß gegen die Morphologie und Grammatik des Deutschen abgefaßt, aber nichtsdestoweniger sinnlos, wenigstens unter normalen zivilisatorischen Umständen. Schlafe eine farblose Idee tapferer Bleistifter hingetupft dürfte total unsinnig sein..."

Wir sehen: Erst mit Syntax und Semantik ist eine Problemlösung formulierbar, vorausgesetzt, der Leser des Textes (z.B. eines Programms) versteht die Sprache und die Bedeutung der einzelnen Worte, in denen der Text abgefaßt ist.

weiter im Text


Stand: 10.07.2002 /
 HPs Home      Compiler/Home