 
 
 
 
 
   
Drei Semester sind schon wieder ins Land gegangen seit meinem ersten Aufruf zu
mehr Sorgfalt beim Verwenden mathematischer Symbole.  Es war natürlich nur
ein Tropfen auf den heißen Stein.  Noch immer kann die Einstellung "`Das
wollen wir jetzt mal nicht so genau nehmen."', zu deutsch:  "`Korrekte
Schreibweisen würde doch sofort jeder verstehen!"', einen großen Fanclub um
sich vereinen.  Es ist also an der Zeit, neues Futter nachzuschieben.  Wie wäre
es zur Abwechslung mit der beliebten  -Notation?
-Notation?
Wir wollen die Laufzeiten verschiedener Algorithmen bei verschiedenen Eingaben untersuchen,
und weil wir über diesen Zusammenhang jetzt öfter sprechen werden,
geben wir ihm einen Namen:
 
Um die Laufzeiten bestimmter Algorithmen zu vergleichen, hat man die
Symbole  ,
,  ,
,  eingeführt. 
In der Mathematik
verwendet man die ähnlichen Landau-Symbole
 eingeführt. 
In der Mathematik
verwendet man die ähnlichen Landau-Symbole  und
 und  oder auch
 oder auch  ,
,
 . Nehmen wir ein Beispiel:
. Nehmen wir ein Beispiel:
 zur Lösung eines Problems der Größe
 zur Lösung eines Problems der Größe  benötige die Zeit
benötige die Zeit 
 .
.
 zur Lösung eines möglicherweise anderen Problems der Größe
 zur Lösung eines möglicherweise anderen Problems der Größe  benötige die Zeit
benötige die Zeit 
 .
.
"`durchbraucht zur Lösung seines Problems im Großen und Ganzen weniger als oder genau so viel Zeit wie
"'
 
 bezeichnet also eine Menge von Funktionen
und zwar die Menge aller Funktionen, die "`im Wesentlichen kleiner als oder gleich"'
 bezeichnet also eine Menge von Funktionen
und zwar die Menge aller Funktionen, die "`im Wesentlichen kleiner als oder gleich"'  sind.
Nun soll dieses "`im Wesentlichen kleiner"' so beschaffen sein,
dass man sich nicht bei Kleinigkeiten aufhalten muss, andererseits muss es
schon exakt definiert sein, damit man später auch etwas beweisen kann.
 sind.
Nun soll dieses "`im Wesentlichen kleiner"' so beschaffen sein,
dass man sich nicht bei Kleinigkeiten aufhalten muss, andererseits muss es
schon exakt definiert sein, damit man später auch etwas beweisen kann.
Fangen wir von vorne an.  Es ist zum Beispiel sinnvoll  als "`kleiner als
oder gleich"'
 als "`kleiner als
oder gleich"'  zu bezeichnen, wenn der Algorithmus
 zu bezeichnen, wenn der Algorithmus  bei jeder Problemgröße
mindestens genaus so schnell wie Algorithmus
 bei jeder Problemgröße
mindestens genaus so schnell wie Algorithmus  ist, kurz:
 ist, kurz:
 
Eigentlich können wir aber ganz gut damit leben, wenn  erst bei großen
Problemen schneller als
 erst bei großen
Problemen schneller als  ist, denn erst bei großen Problemen und mithin
langen Laufzeiten wird es kritisch. Begnügen wir uns damit, dass es ein
 ist, denn erst bei großen Problemen und mithin
langen Laufzeiten wird es kritisch. Begnügen wir uns damit, dass es ein
 gibt, ab dem
 gibt, ab dem  immer kleiner als
 immer kleiner als  ist:
 ist:
 
Zum Schluss wollen wir noch ein weiteres Auge zudrücken (mehr als zwei
haben die meisten von uns ohnehin nicht (Hühneraugen, Fettaugen,
Würfelaugen zählen nicht mit!)) und es zudem tolerieren, wenn Algorithmus
 um einen konstanten Faktor langsamer ist als
 um einen konstanten Faktor langsamer ist als  , weil wir uns zum
Beispiel nicht darauf festlegen wollen, wie lange die Grundoperationen in
den Algorithmen
, weil wir uns zum
Beispiel nicht darauf festlegen wollen, wie lange die Grundoperationen in
den Algorithmen  und
 und  dauern.
 dauern.   könnte zum Beispiel mit
Multiplikationen zum Ziel kommen und
 könnte zum Beispiel mit
Multiplikationen zum Ziel kommen und  mit Hilfe von
Vergleichsoperationen.  Um wie viel schneller Vergleiche als Multiplikationen
sind, wollen wir also offen lassen und in einer nebulösen Konstanten
 mit Hilfe von
Vergleichsoperationen.  Um wie viel schneller Vergleiche als Multiplikationen
sind, wollen wir also offen lassen und in einer nebulösen Konstanten  zusammenfassen.  Damit wären wir angelangt bei:
zusammenfassen.  Damit wären wir angelangt bei:

Das werden wir nun als Definition für unser  verwenden:
 verwenden:

 in die Definition von
 in die Definition von  aufgenommen hat, braucht man dann überhaupt noch dieses
aufgenommen hat, braucht man dann überhaupt noch dieses  , also die
Einschränkung auf hinreichend große Probleme?
, also die
Einschränkung auf hinreichend große Probleme?So in etwa läuft meistens die Einführung dieses Symbols in der Informatik-Vorlesung ab, dann aber passiert nicht selten etwas ganz scheußliches: Der Dozent meint, dass er ab jetzt der korrekten Schreibweise
 
 
|  |  | |
|  | ||
|  |  | |
|  | ||
|  |  | |
|  | ||
| Es gilt offensichtlich (mit der "`vereinfachten"' Notation) 
 | ||
|  |  | |
|  | ||
|  |  | |
|  | ||
| Wenn "`="' eine Äquivalenzrelation bezeichnet, gilt die Symmetrie, konkret 
 | ||
|  | ||
|  | ||
|  |  | |
|  | ||
| und die Transitivität 
 | ||
|  | ||
|  | ||
|  |  | |
|  | ||
|  | ||
 
In diesem Beispiel war der Fehler offensichtlich, denn wenn man korrekt
|  |  | |
|  | ||
|  |  | |
|  | ||
|  | 
 zu folgern. Aber man kann die falsche
Schreibweise sicher auch geschickter unterbringen, zum Beispiel in einem
falschen Beweis eines richtigen Sachverhaltes.
 zu folgern. Aber man kann die falsche
Schreibweise sicher auch geschickter unterbringen, zum Beispiel in einem
falschen Beweis eines richtigen Sachverhaltes.
Nehmen wir der Vollständigkeit halber noch die Definitionen der anderen beiden Funktionsmengen hinzu:
 ist die Menge aller Funktionen
 ist die Menge aller Funktionen  , die im Wesentlichen größer als
oder gleich
, die im Wesentlichen größer als
oder gleich  sind:
 sind:

 ist die Menge aller Funktionen
 ist die Menge aller Funktionen  , die im Wesentlichen genau
so groß sind wie
, die im Wesentlichen genau
so groß sind wie  :
1
:
1

Eine Äquivalenzrelation zwischen Funktionen und Funktionenmengen zu basteln ist sicher nicht so glorreich, aber vielleicht bekommt man eine Äquivalenzrelation zwischen zwei Funktionen zu Stande. Die Relation
 
 -Notation und könnte statt
-Notation und könnte statt 
 irgendeine andere
Funktionenmenge nehmen. Deshalb folgende kleine
 irgendeine andere
Funktionenmenge nehmen. Deshalb folgende kleine
 ,
,  ,
,  eine Äquivalenzrelation
der Art "`zwei Funktionen haben die gleiche Größenordnung"' formulieren?
 eine Äquivalenzrelation
der Art "`zwei Funktionen haben die gleiche Größenordnung"' formulieren?Bleiben wir im Folgenden besser bei der korrekten Schreibweise mit dem Enthaltensein-Zeichen. Sie liefert im übrigen auch den Vorteil, viele sonst geläufige Notationen im Zusammenhang mit Mengen direkt weiterverwenden zu können.
 
 , auch im Wesentlichen
kleiner sind als
, auch im Wesentlichen
kleiner sind als  und dass die Funktionenklasse
 und dass die Funktionenklasse 
 noch
mehr Funktionen enthält (wegen der echten Teilmengenbeziehung).
 noch
mehr Funktionen enthält (wegen der echten Teilmengenbeziehung).
 

 formulieren. Ja ja, das ist durchaus nicht trivial. Ihr könnt Euch ja mal daran versuchen.
formulieren. Ja ja, das ist durchaus nicht trivial. Ihr könnt Euch ja mal daran versuchen.
 und
 und  stets
 stets
 
Lasst uns doch mal schauen, was man noch für Unfug mit dieser
 -Notation anstellen kann.  Mit
-Notation anstellen kann.  Mit 
 kann man alle
Laufzeitfunktionen bezeichnen, welche zu Algorithmen gehören, deren
Bearbeitungszeit überhaupt nicht von der Größe des Problems abhängt.  Diese
kann man guten Gewissens als Grundoperationen bezeichnen.  Beispielsweise
benötigt ein Rechner für die Addition zweier Zahlen immer die gleiche Zeit
(sofern die Addition überhaupt korrekt, also ohne Überlauf ausführbar ist).
Benötigt die Addition in der Wirklichkeit
 kann man alle
Laufzeitfunktionen bezeichnen, welche zu Algorithmen gehören, deren
Bearbeitungszeit überhaupt nicht von der Größe des Problems abhängt.  Diese
kann man guten Gewissens als Grundoperationen bezeichnen.  Beispielsweise
benötigt ein Rechner für die Addition zweier Zahlen immer die gleiche Zeit
(sofern die Addition überhaupt korrekt, also ohne Überlauf ausführbar ist).
Benötigt die Addition in der Wirklichkeit  Sekunden, dann setzt man in der
Definition von
 Sekunden, dann setzt man in der
Definition von  eben
 eben  , und es ist sofort klar, dass die zur
Addition gehörige Laufzeitfunktion
, und es ist sofort klar, dass die zur
Addition gehörige Laufzeitfunktion  in
 in 
 enthalten ist.
 enthalten ist.
Auf die gleiche Weise überprüft man leicht, dass folgende Beziehungen
gelten:
|  |  |  | |
|  | |||
|  |  |  | |
|  | |||
|  |  |  | |
|  | |||
|  |  | ||
|  | |||
|  |  |  | 
 ),
klingt aber immer noch ziemlich gewagt. Aber ich denke, dass wir uns
langsam damit abfinden sollten, man kann es eben einfach beweisen. :-)
Das wollt Ihr gerne sehen, gell? Ich werde es Euch zeigen!
),
klingt aber immer noch ziemlich gewagt. Aber ich denke, dass wir uns
langsam damit abfinden sollten, man kann es eben einfach beweisen. :-)
Das wollt Ihr gerne sehen, gell? Ich werde es Euch zeigen!
Um nicht in
Konflikt mit den Variablennamen in der Definition von  zu kommen,
benennen wir
 zu kommen,
benennen wir  in
 in  um und skizzieren nun den Beweis für
 um und skizzieren nun den Beweis für 
 . Die Behauptung ist also:
. Die Behauptung ist also:


 und
 und  einsetzt, und damit ist die Behauptung auch
schon bewiesen.
 einsetzt, und damit ist die Behauptung auch
schon bewiesen.
Manche Dozenten mögen diese simple Tatsache (in Worten:  
 ) nicht einsehen, aber sie stimmt einfach, wir haben doch den
Beweis! Ja aber ...das kann doch nicht stimmen! Das
widerspricht doch dem gesunden Menschenverstand!
) nicht einsehen, aber sie stimmt einfach, wir haben doch den
Beweis! Ja aber ...das kann doch nicht stimmen! Das
widerspricht doch dem gesunden Menschenverstand!
Ich räume zumindest ein, dass es unserer Intuition widerspricht. Aber an welcher Stelle hat uns die Intuition auf das Glatteis geführt? Kommt Ihr selber darauf? Argh, wie ich Euch kenne, habt Ihr heute sicher keine Lust zum Nachdenken und lest einfach weiter.
Sei's drum.  Das Problem ist bereits die
Uneindeutigkeit der Notation 
 .  In durchdachten
Programmiersprachen wie Modula ist man gewohnt, den Typ einer Variablen
genau festzulegen und sich nachher auch daran halten zu müssen, bei C/C++
muss man ihn nur noch festlegen, sich aber nicht daran halten (characters,
booleans, integers, sets (welche als integers implementiert werden müssen)
dürfen alle bunt durcheinandergewürfelt werden), na und bei Skriptsprachen
gibt es gleich gar keine Deklarationen mehr.  Die Strafe folgt auf dem
Fuße:
.  In durchdachten
Programmiersprachen wie Modula ist man gewohnt, den Typ einer Variablen
genau festzulegen und sich nachher auch daran halten zu müssen, bei C/C++
muss man ihn nur noch festlegen, sich aber nicht daran halten (characters,
booleans, integers, sets (welche als integers implementiert werden müssen)
dürfen alle bunt durcheinandergewürfelt werden), na und bei Skriptsprachen
gibt es gleich gar keine Deklarationen mehr.  Die Strafe folgt auf dem
Fuße:
Ihr habt in  wahrscheinlich einen Ausdruck gesehen, der von
 wahrscheinlich einen Ausdruck gesehen, der von  abhängt,
eine lineare Funktion also.  Warum aber?
 abhängt,
eine lineare Funktion also.  Warum aber?   hängt doch auch von jeder
anderen denkbaren Variable ab, wie zum Beispiel
 hängt doch auch von jeder
anderen denkbaren Variable ab, wie zum Beispiel  .
.   ist bezüglich
 ist bezüglich  konstant, also ist
konstant, also ist  eine konstante "`Funktion"', und deswegen hat auch mein
Beweis geklappt. Wenn wir genau hinschauen, stellen wir aber fest, dass
 eine konstante "`Funktion"', und deswegen hat auch mein
Beweis geklappt. Wenn wir genau hinschauen, stellen wir aber fest, dass  überhaupt
keine Funktion ist!  Ursprünglich hatte ich
 überhaupt
keine Funktion ist!  Ursprünglich hatte ich  zur natürlichen
Zahl erklärt, und natürliche Zahlen sind ganz gewiss keine Funktionen.
Zwar steht es einer Funktion
 zur natürlichen
Zahl erklärt, und natürliche Zahlen sind ganz gewiss keine Funktionen.
Zwar steht es einer Funktion  frei, immer dieselbe natürliche Zahl
 frei, immer dieselbe natürliche Zahl
 zurückzuliefern (also
 zurückzuliefern (also 
 ), aber die Funktion
), aber die Funktion  an
sich ist eben nicht identisch mit der Zahl
 an
sich ist eben nicht identisch mit der Zahl  .  Die Funktion
.  Die Funktion  beschreibt
nur die Tatsache, dass ein paar bestimmte Argumente in ein paar bestimmte
Ergebnisse überführt werden.
 beschreibt
nur die Tatsache, dass ein paar bestimmte Argumente in ein paar bestimmte
Ergebnisse überführt werden.
Beispielsweise kann eine Funktion so beschaffen sein, dass sie das
übergebene Argument quadriert.  Die Funktion, die dazu das übergebene
Argument mit sich selbst multipliziert, könnte man  nennen.  Eine andere
Funktion
 nennen.  Eine andere
Funktion  , die für alle Argumente
, die für alle Argumente  die ungeraden Zahlen von
 die ungeraden Zahlen von  bis
 bis
 addiert, erledigt das Gleiche.  Es gilt also
 addiert, erledigt das Gleiche.  Es gilt also 
 
 .  Wie wir sehen, ist die Implementation der 
Funktionen egal, wichtig sind die Ergebnisse.  Die Funktionen sind in
gewisser Weise Black-Boxes, also Maschinen, in die man nicht hineinschauen
kann, deren Funktionsweise man nur durch Hineinstecken von Eingaben und
Beobachtung der Ausgaben erforschen kann.  Und wir sehen auch, dass die
Namen der Argumente irrelevant sind, ob das übergebene Argument und mithin
die interne Variablenbezeichnung in der Funktionsimplementation
.  Wie wir sehen, ist die Implementation der 
Funktionen egal, wichtig sind die Ergebnisse.  Die Funktionen sind in
gewisser Weise Black-Boxes, also Maschinen, in die man nicht hineinschauen
kann, deren Funktionsweise man nur durch Hineinstecken von Eingaben und
Beobachtung der Ausgaben erforschen kann.  Und wir sehen auch, dass die
Namen der Argumente irrelevant sind, ob das übergebene Argument und mithin
die interne Variablenbezeichnung in der Funktionsimplementation  ,
,  oder
oder  heißt, spielt keine Rolle.  Man kann also nicht sagen, dass
 heißt, spielt keine Rolle.  Man kann also nicht sagen, dass  von
von  abhängt, sicher ist lediglich, dass die Funktion
 abhängt, sicher ist lediglich, dass die Funktion  von einer Variablen
abhängt und dass die Terme
 von einer Variablen
abhängt und dass die Terme  von
 von  und
 und  von
von  "`abhängen"'.
 "`abhängen"'.
In der Analysis gibt es das gleiche Theater, weil zum Beispiel die
Bezeichnung  für die partielle Ableitung einer Funktion voraussetzt,
dass eine bestimmte "`Dimension"' mit
 für die partielle Ableitung einer Funktion voraussetzt,
dass eine bestimmte "`Dimension"' mit  bezeichnet ist.  Dummerweise
verwendet man dann
 bezeichnet ist.  Dummerweise
verwendet man dann  aber auch gleich weiter als Variable, die die Stelle
bezeichnet, an der man die Ableitung wissen möchte, etwa
 aber auch gleich weiter als Variable, die die Stelle
bezeichnet, an der man die Ableitung wissen möchte, etwa  .
Das führt spätestens
dann zum Chaos, wenn man noch mit einem weiteren Wert auf der
.
Das führt spätestens
dann zum Chaos, wenn man noch mit einem weiteren Wert auf der  -Achse,
vielleicht
-Achse,
vielleicht  oder
 oder  arbeiten möchte.
Ebenso ist bei Funktionen in mehreren Veränderlichen oft nicht genau zu
erkennen, über welches Funktionsargument sich eigentlich ein Skalarprodukt
oder eine Norm erstreckt. Oder es gibt Schwierigkeiten, weil bei der
unbestimmten Integration der gleiche Bezeichner als Integrationsvariable
und als Argument der entstehenden Stammfunktion eingesetzt wird:
 arbeiten möchte.
Ebenso ist bei Funktionen in mehreren Veränderlichen oft nicht genau zu
erkennen, über welches Funktionsargument sich eigentlich ein Skalarprodukt
oder eine Norm erstreckt. Oder es gibt Schwierigkeiten, weil bei der
unbestimmten Integration der gleiche Bezeichner als Integrationsvariable
und als Argument der entstehenden Stammfunktion eingesetzt wird:
 
 
Wieder zurück zum  -Symbol.  Wie können wir denn nun das
Beispiel mit der quadratischen Funktion retten?
Man könnte vielleicht den Kunstgriff ansetzen, und
-Symbol.  Wie können wir denn nun das
Beispiel mit der quadratischen Funktion retten?
Man könnte vielleicht den Kunstgriff ansetzen, und  als Identitätsfunktion deklarieren, also
als Identitätsfunktion deklarieren, also 
 
 so definieren
 so definieren 
 
 , allerdings
darf man dann
, allerdings
darf man dann  nicht die Problemgröße nennen, stattdessen wäre
 nicht die Problemgröße nennen, stattdessen wäre  die
Problemgröße, zumindest in den beiden vorangegangenen Ausdrücken.
 die
Problemgröße, zumindest in den beiden vorangegangenen Ausdrücken.
Man kann aber auf eine der vielfältigen Schreibweisen zurückgreifen, welche Terme in Funktionen konvertieren. Die Operation, mehrere Werte zu einer Funktion zusammenzufügen, ist gewissermaßen die Umkehrung zum Einsetzen eines Funktionsargumentes und Ablesen des Funktionswertes.
 -Operators.
2Zum Beispiel bezeichnet
-Operators.
2Zum Beispiel bezeichnet 
 
 
 elegant in ein korrektes
elegant in ein korrektes 
 
 
 
 
 
 
 
Jo, wer nicht mutig genug ist, eine der obigen Methoden zu verwenden,
der muss eben zu Fuß zwei Funktionen einführen, um wieder zum Beispiel zurückzukommen  und
 und  , die eine linear, die andere quadratisch, also
, die eine linear, die andere quadratisch, also
 
 
 wieder unsere vertraute Problemgröße und
wieder unsere vertraute Problemgröße und 
 
...doch nein, da braut sich schon wieder eine neue Gewitterwolke
zusammen!  Der Kampf zwischen  und
 und 
 ist noch nicht
entschieden!  Gebt mir noch einen Versuch, und ich beweise Euch endgültig,
dass
 ist noch nicht
entschieden!  Gebt mir noch einen Versuch, und ich beweise Euch endgültig,
dass 
 nichts als die Wahrheit ist (
 nichts als die Wahrheit ist ( und
 und  wie eben
vorgeschlagen)!
 wie eben
vorgeschlagen)!
Dazu brauchen wir die vollständige Intuition (na Ihr wisst schon, wie es
richtig heißt) und folgendes
 
Nur als Hinweis:  Mit Beendigung des Lemmas haben wir auch den
Sichtbarkeitsbereich für die lokalen Bezeichner des Lemmas wie  ,
,  und
 und
 verlassen und
 verlassen und  und
 und  sind wieder unsere beiden Funktionen, die
lineare und die quadratische.
 sind wieder unsere beiden Funktionen, die
lineare und die quadratische.
Ich werde mir jetzt eine Folge von Funktionen definieren.  Die erste
Funktion wird die Identitätsfunktion sein.  Diese ist ihrerseits identisch
zu  und damit auch in
 und damit auch in 
 enthalten.  Alle weiteren Funktionen
streben gegen die quadratische, bleiben aber trotzdem in
 enthalten.  Alle weiteren Funktionen
streben gegen die quadratische, bleiben aber trotzdem in 
 !
Jede Funktion
!
Jede Funktion  der Folge besteht bis zur Stelle
 der Folge besteht bis zur Stelle  aus der
quadratischen Funktion und geht danach mit dem gleichen Anstieg in eine
lineare Funktion über:
 aus der
quadratischen Funktion und geht danach mit dem gleichen Anstieg in eine
lineare Funktion über:
 
 
![\includegraphics[width=\columnwidth]{landau_spline}](img138.png) 
Nun zum
 
Induktionsschritt Induktionsvoraussetzung
 
 
 durch
 durch  beschränken lässt, sprich dass
 beschränken lässt, sprich dass
 gilt.
 gilt.
Bis einschließlich zur Stelle  sind
 sind  und
 und  identisch, bis
dort kann man also den Faktor
 identisch, bis
dort kann man also den Faktor  ansetzen.  Nach der Stelle
 ansetzen.  Nach der Stelle  gehen die
beiden Funktionen in
 gehen die
beiden Funktionen in 
 bzw.
 bzw.  
 über.
 über.
|  |  |  | |
|  | |||
|  |  |  | |
|  | |||
|  |  |  | 
Das heißt, dass wir ab der Stelle  den Faktor
 den Faktor 
 benötigen, welcher im "Ubrigen größer als
benötigen, welcher im "Ubrigen größer als  ist.  Deswegen ist der
Gesamtfaktor
 ist.  Deswegen ist der
Gesamtfaktor 
 .  Damit ist gezeigt, dass
.  Damit ist gezeigt, dass
|  |  | |
|  | ||
| gilt, und mit der Induktionsvoraussetzung 
 | ||
|  |  | |
|  | ||
| erhalten wir über unser Lemma die Induktionsbehauptung 
 | ||
|  |  | |
|  | ||
|  | ||
 
Da seid Ihr baff, was? Ich habe jetzt jedenfalls die Nase voll, und wenn jemand von Euch des Rätsels Lösung herausfindet, kann er diese an mich schicken!
Kleiner Tip: Versucht bei dem Beweis einmal ohne Induktion auszukommen.
 
 
 
 
