31.01.2014 Aufrufe

Skriptes - Uni Bremen - Universität Bremen

Skriptes - Uni Bremen - Universität Bremen

Skriptes - Uni Bremen - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

V. Appendix<br />

A. Laufzeitanalyse von Algorithmen und O-Notation<br />

Laufzeitanalyse<br />

Ein gegebenes Berechnungsproblem lässt sich meist durch viele verschiedene Algorithmen<br />

lösen. Um die „Qualität“ dieser vielen möglichen Algorithmen zu bestimmen, analysiert<br />

man deren Ressourcenverbrauch. In diesem Zusammenhang ist die wichtigste<br />

Ressource der Zeitverbrauch, also die Anzahl Rechenschritte, die der Algorithmus ausführt.<br />

Andere Ressourcen, die eine Rolle spielen können, sind beispielsweise der Speicherverbrauch<br />

oder der Kommunikationsbedarf, wenn der Algorithmus auf mehreren<br />

Prozessoren oder Rechnern verteilt ausgeführt wird. Ein Algorithmus mit geringem Ressourcenbedarf<br />

ist dann einem Algorithmus mit höherem Ressourcenbedarf vorzuziehen.<br />

Die Laufzeit eines AlgorithmusAauf einer Eingabexist die Anzahl elementarer Rechenschritte,<br />

die A gestartet auf x ausführt, bevor er anhält. Was ein elementarer Rechenschritt<br />

ist, wird in der VL „Theoretische Informatik II“ genauer untersucht. Bis dahin<br />

betrachten wir die üblichen Operationen eines Prozessors als elementare Rechenschritte,<br />

also z.B. Addition und Multiplikation. Die zentrale Eigenschaft eines elementaren<br />

Rechenschrittes ist, dass er in konstanter Zeit ausgeführt werden kann—das soll heißen,<br />

dass die benötigte Zeit unabhängig von den konkreten Argumenten ist, auf die der<br />

Rechenschritt angewendet wird.<br />

Man beschreibt die Laufzeit eines Algorithmus immer in Abhängigkeit von der Größe<br />

seiner Eingabe. Dem liegt die Intuition zugrunde, dass das Verarbeiten einer grösseren<br />

Eingabe im allgemeinen länger dauert als das einer kleinen. So kann man z.B. offensichtlich<br />

schneller entscheiden, ob ein gegebener NEA ein Eingabewort der Länge 1 akzeptiert<br />

als eines der Länge 128. Der Zeitverbrauch eines Algorithmus kann also beschrieben werden<br />

durch eine Funktion<br />

f : Æ → Æ<br />

die jeder Eingabelänge n ∈ Æ eine Laufzeit f(n) zuordnet. Man beachte, dass diese<br />

Darstellung von der konkreten Eingabe abstrahiert, d.h., die Laufzeit des Algorithmus auf<br />

verschiedenen Eingaben derselben Länge wird nicht unterschieden. Diese kann durchaus<br />

sehr unterschiedlich sein: für einen gebenen NEA A, in dem der Startzustand keine<br />

a-Übergang erlaubt, ist es trivial, zu entscheiden, dass das Wort<br />

abbbababababbbbbbbbababbabbabbbbbbbaaabbbbaaaaaab<br />

159

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!