Theoretische Informatik
Aufwand von Algorithmen: Wachstum und O-Notation
Warum ein doppelt so schneller Rechner bei manchen Verfahren fast nichts bringt und die Wahl des Algorithmus alles.
Benötigte Grundlagen
Dieses Vorwissen brauchst du für das Kapitel. Schau kurz nach, wenn dir etwas davon nicht mehr präsent ist, sonst leg direkt los.
Einführung
Zwei Programme lösen dieselbe Aufgabe. Bei 100 Datensätzen sind beide sofort fertig. Bei einer Million braucht das eine eine Sekunde und das andere elf Tage.
Der Unterschied liegt nicht an der Sprache, nicht am Rechner und nicht an der Sorgfalt beim Programmieren. Er liegt daran, wie der Aufwand mit der Datenmenge wächst.
Genau das ist die Frage dieses Kapitels, und sie ist eine andere als im vorigen. Dort ging es darum, ob eine Lösung überhaupt existiert. Hier ist die Existenz gesichert, und es geht darum, ob sie brauchbar ist.
Das kannst du nach diesem Kapitel
den Aufwand eines durch Zählen der wesentlichen Schritte bestimmen.
die O-Notation lesen und begründen, warum sie Konstanten weglässt.
typische Wachstumsklassen vergleichen und ihre praktischen Folgen abschätzen.
bester, mittlerer und schlechtester Fall unterscheiden.
die Klassen P und NP und die Bedeutung der offenen Frage einordnen (Vertiefung).
Kurz aufgefrischt
Vorausgesetzt werden und Verschachtelung aus Algorithmen entwerfen sowie die Algorithmusmerkmale aus Was ist ein Algorithmus?.
Neu ist die Frage nach dem Preis eines Verfahrens, und der wird nicht in Sekunden gemessen.
Warum nicht in Sekunden?
Naheliegend wäre, ein Programm laufen zu lassen und zu stoppen. Für einen Vergleich taugt das wenig:
- Ein anderer Rechner liefert andere Zeiten.
- Eine andere Sprache oder ein anderer Übersetzer ebenso.
- Vor allem: Die Messung gilt nur für die eine getestete Datenmenge.
Interessant ist aber gerade die Frage, was bei zehnmal so vielen passiert. Deshalb misst man nicht die Zeit, sondern zählt die wesentlichen Schritte in Abhängigkeit von der Eingabegröße .
Schritte zählen
Beispiel 1: lineare Suche. Gesucht wird ein Wert in einer Liste mit Einträgen:
für i von 1 bis n:
wenn liste[i] = gesucht:
gib i zurück
gib "nicht gefunden" zurück
Der wesentliche Schritt ist der Vergleich. Im schlechtesten Fall stehen Vergleiche an. Aufwand: linear.
Beispiel 2: alle Paare vergleichen.
für i von 1 bis n:
für j von 1 bis n:
vergleiche liste[i] mit liste[j]
Die innere läuft für jeden Durchlauf der äußeren komplett durch. Das ergibt Vergleiche. Aufwand: quadratisch.
Beispiel 3: binäre Suche in einer sortierten Liste: Jeder Schritt halbiert den Suchbereich. Nach Schritten sind noch Einträge übrig, und man ist fertig, wenn einer übrig ist:
Aufwand: logarithmisch. Bei einer Million Einträgen sind das rund 20 Schritte statt einer Million.
Die O-Notation
Beim Zählen stört, dass Kleinigkeiten das Bild verstellen. Ein Verfahren mit Schritten ist im Kern quadratisch; die und die fallen bei großem nicht ins Gewicht.
Deshalb schreibt man nur das Wachstumsverhalten auf:
Zwei Regeln genügen fast immer:
Konstante Faktoren weglassen. und stehen beide in . Nur den am stärksten wachsenden Term behalten. steht in .
🔴 Der Grund für die erste Regel ist wichtig und wird oft missverstanden. Man lässt Konstanten nicht weg, weil sie egal wären, sondern weil sie von Rechner, Sprache und Übersetzer abhängen und damit keine Eigenschaft des Verfahrens sind. Das Wachstumsverhalten dagegen bleibt auf jedem Rechner dasselbe.
Sieh dir an, was das praktisch heißt. Ein doppelt so schneller Rechner halbiert die Zeit, also den konstanten Faktor. Er ändert nichts daran, dass bei doppelter Datenmenge ein quadratisches Verfahren viermal so lange braucht. Genau deshalb ist die Wachstumsklasse die entscheidende Größe und nicht der Vorfaktor.
Drei Wachstumsklassen im selben Bild
Drei Kurven, und der Unterschied ist kein gradueller. Bei steht bei etwa 4, bei 20 und bei 400, die logarithmische Kurve ist über den ganzen Bereich fast flach. Und nun der Punkt, um den es in der O-Notation geht: Ein doppelt so schneller Rechner verschiebt jede Kurve nur um einen konstanten Faktor, er ändert ihre Form nicht. Bei doppelter Datenmenge braucht ein quadratisches Verfahren viermal so lange, und daran ändert kein technischer Fortschritt etwas. Genau deshalb lässt man konstante Faktoren weg: nicht weil sie egal wären, sondern weil sie von Rechner und Übersetzer abhängen und damit keine Eigenschaft des Verfahrens sind.
Die wichtigsten Klassen
| Klasse | Name | |||
|---|---|---|---|---|
| konstant | 1 | 1 | 1 | |
| logarithmisch | 3 | 10 | 20 | |
| linear | 10 | 1 000 | 1 000 000 | |
| linear-logarithmisch | 33 | 10 000 | ||
| quadratisch | 100 | 1 000 000 | ||
| exponentiell | 1 024 | unvorstellbar |
Die letzte Zeile verdient einen Moment. hat über 300 Stellen; zum Vergleich schätzt man die Zahl der Atome im beobachtbaren Universum auf etwa . Ein exponentielles Verfahren ist bei nicht „langsam", sondern grundsätzlich nicht durchführbar, und daran ändert kein technischer Fortschritt etwas.
Eine nützliche Faustregel: Jede geschachtelte über dieselben erhöht den Exponenten um eins. Zwei Schleifen ineinander ergeben , drei ergeben .
Exponentiell ist eine andere Größenordnung
Sieh genau hin: Die beiden Kurven treffen sich zweimal, bei () und bei (, der markierte Punkt). Dazwischen liegt das Quadrat sogar vorn, bei ist . Exponentielles Wachstum heißt also nicht „von Anfang an größer“, sondern am Ende uneinholbar: Ab zieht davon und kommt nie wieder zurück. Und die Kurve hört hier nur auf, weil das Bild aufhört. Rechne die Tabelle aus dem Abschnitt weiter: Bei hat über 300 Stellen, während man die Zahl der Atome im beobachtbaren Universum auf etwa schätzt. Ein exponentielles Verfahren ist bei nicht „langsam“, sondern grundsätzlich nicht durchführbar, und das ist keine Frage der Technik, sondern der Größenordnung.
Bester, mittlerer, schlechtester Fall
Bei der linearen Suche hängt der Aufwand davon ab, wo der gesuchte Wert steht:
- Bester Fall: gleich der erste Eintrag, also .
- Schlechtester Fall: letzter Eintrag oder nicht vorhanden, also .
- Mittlerer Fall: im Schnitt die halbe Liste, also Schritte, und das ist ebenfalls , weil der Faktor konstant ist.
Üblicherweise gibt man den schlechtesten Fall an, und zwar aus einem klaren Grund: Er ist die einzige Angabe, die eine Garantie liefert. Ein Verfahren, das meistens schnell ist und gelegentlich sehr langsam, kann in einem Steuerungssystem oder bei einer Nutzeroberfläche untragbar sein.
Lineare Suche in drei Fällen
Dieselbe lineare Suche, dreimal betrachtet. Die mittlere Spalte hält eine Überraschung bereit: Der mittlere Fall braucht Schritte und liegt trotzdem in , der Faktor ist konstant und fällt nach der ersten O-Regel weg. Bester und mittlerer Fall unterscheiden sich also gar nicht in der Klasse vom schlechtesten. Die letzte Zeile sagt, warum man trotzdem den schlechtesten angibt: Er ist die einzige der drei Angaben, die eine Garantie liefert. Ein Verfahren, das meistens schnell ist und gelegentlich sehr langsam, kann in einer Steuerung oder an einer Nutzeroberfläche untragbar sein, und „meistens“ hilft dort niemandem.
Vertiefung: die Klassen P und NP
Dieser Abschnitt gehört zum erhöhten Anforderungsniveau.
Man fasst Probleme nach ihrem Aufwand zusammen:
enthält die Probleme, die sich in polynomieller Zeit lösen lassen, also mit für ein festes . Das gilt als praktisch handhabbar.
enthält die Probleme, bei denen sich eine vorgeschlagene Lösung in polynomieller Zeit prüfen lässt.
Der Unterschied ist der zwischen finden und nachrechnen. Ein Sudoku zu lösen ist mühsam; eine ausgefüllte Lösung zu prüfen dauert Sekunden. Ein Passwort zu erraten ist aussichtslos; ein vorgeschlagenes zu prüfen ist trivial.
Klar ist: . Wer eine Lösung schnell finden kann, kann sie auch schnell prüfen, indem er sie selbst berechnet und vergleicht.
Offen ist die Umkehrung, und das ist die berühmteste offene Frage der Informatik:
Ist ? Also: Ist jedes Problem, dessen Lösung sich schnell prüfen lässt, auch schnell lösbar?
Die meisten Fachleute vermuten , bewiesen ist nichts. Für einen Beweis in die eine oder andere Richtung sind eine Million Dollar ausgesetzt.
Warum das mehr als eine Denksportaufgabe ist: Ein großer Teil der heutigen Verschlüsselung beruht darauf, dass Prüfen leicht und Finden schwer ist. Wäre mit einem praktisch brauchbaren Verfahren, verlöre ein Gutteil der digitalen Sicherheit ihre Grundlage. Umgekehrt ließen sich viele Optimierungsaufgaben in Logistik und Planung plötzlich exakt lösen.
🔴 Beachte den Unterschied zum vorigen Kapitel. Unentscheidbar heißt: Es gibt keine Lösung, nie. -schwer heißt: Es gibt eine Lösung, aber alle bekannten Verfahren sind für große Eingaben zu teuer. Das eine ist eine Grenze des Möglichen, das andere eine Grenze des Machbaren.
Finden und Nachrechnen
liegt in , und das ist leicht einzusehen: Wer eine Lösung schnell finden kann, kann sie auch schnell prüfen, er berechnet sie einfach selbst und vergleicht. Der Unterschied zwischen beiden ist der zwischen Finden und Nachrechnen: Ein Sudoku zu lösen ist mühsam, eine ausgefüllte Lösung zu prüfen dauert Sekunden. 🔴 Und jetzt der ehrliche Teil, auf den es ankommt: Im äußeren Ring steht ein Fragezeichen, kein Beispiel. Ob es überhaupt ein Problem gibt, das in liegt und nicht in , ist ungelöst. Es ist die berühmteste offene Frage der Informatik. Wer dort ein Beispiel hinschreibt, behauptet mehr, als die Wissenschaft weiß.
Aufwand aus dem Quelltext ablesen
Bestimme den Aufwand in O-Notation:
summe = 0
für i von 1 bis n:
summe = summe + liste[i]
für i von 1 bis n:
für j von 1 bis n:
wenn liste[i] = liste[j] und i ≠ j:
gib "Dublette" aus
- 1
Erster Teil: eine von 1 bis , im Rumpf eine Addition. Das sind Schritte, also .
- 2
Zweiter Teil: Die innere Schleife läuft für jeden Durchlauf der äußeren vollständig durch. Also Vergleiche, also .
- 3
Zusammensetzen: Die Teile laufen nacheinander, deshalb addieren sich die Aufwände: .
- 4
Vereinfachen: Nur der stärkste Term bleibt. Bei stehen 1000 gegen 1 000 000; der lineare Teil fällt nicht ins Gewicht.
- 5
Gesamtaufwand: .
- 6
Merke die Regel dahinter: Bei Hintereinander addiert man und behält den stärkeren Term. Bei Schachtelung multipliziert man. Genau deshalb sind verschachtelte Schleifen der teure Fall.
. Der lineare Teil verschwindet neben dem quadratischen.
Was ein schnellerer Rechner bringt
Ein quadratisches Verfahren braucht für genau 4 Sekunden. Wie lange braucht es für ? Und was ändert ein doppelt so schneller Rechner?
- 1
Faktor der Datenmenge: .
- 2
Wirkung bei quadratischem Wachstum: Der Aufwand geht mit , also mit .
- 3
Minuten.
- 4
Doppelt so schneller Rechner: Er halbiert den konstanten Faktor, also 200 s statt 400 s.
- 5
Zum Vergleich mit einem linearen Verfahren: Dort hätte die zehnfache Datenmenge nur die zehnfache Zeit gekostet, also 40 s. Und bei wären es beim quadratischen Verfahren bereits s, also über elf Stunden, beim linearen 400 s.
- 6
Schlussfolgerung: Der schnellere Rechner bringt einen Faktor 2, der bessere einen Faktor 100 und bei größeren noch weit mehr. Hardware verschiebt die Kurve nach unten, der Algorithmus ändert ihre Form.
400 s statt 4 s. Der doppelt so schnelle Rechner spart Faktor 2, der Wechsel auf ein lineares Verfahren Faktor 100.
Typischer Fehler
„ mit kleinem Vorfaktor ist besser als mit großem, also ist die O-Notation irreführend."
Der erste Teil des Satzes ist richtig, der Schluss daraus falsch.
Tatsächlich kann ein Verfahren mit Schritten für kleine schneller sein als eines mit . Die Grenze liegt hier bei , also . Darunter gewinnt das quadratische Verfahren.
Nur: Ab dieser Grenze gewinnt das lineare und der Abstand wächst unbegrenzt. Bei steht gegen , also Faktor 100 zugunsten des linearen.
Die O-Notation behauptet gar nicht, für jedes das schnellere Verfahren zu benennen. Sie beantwortet eine andere Frage, nämlich: Wie verhält sich der Aufwand, wenn die wachsen? Genau das ist die Frage, die man beim Entwurf beantworten muss, denn Datenmengen wachsen.
Praktisch nutzt man beides. Gute Sortierbibliotheken schalten bei kleinen Teillisten auf ein einfaches quadratisches Verfahren um, weil dessen kleiner Vorfaktor dort gewinnt, und benutzen darüber ein Verfahren mit . Das ist kein Widerspruch zur Theorie, sondern ihre saubere Anwendung.
Übung 1
leichtOrdne nach wachsendem Aufwand: , , , , , .
b) Welchen Aufwand hat eine einzelne von 1 bis mit konstantem Rumpf? c) Welchen Aufwand hat die binäre Suche, und warum?
Tipp anzeigen
Zu c): Was passiert in jedem Schritt mit dem Suchbereich?
Lösung anzeigen
a) .
b) . Der Rumpf braucht konstant viel Zeit und wird -mal ausgeführt.
c) . In jedem Schritt halbiert sich der Suchbereich. Nach Schritten sind noch Einträge übrig, und man ist fertig bei , also . Bei einer Million Einträgen sind das rund 20 Schritte.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Die Ordnung an einem großen Wert prüfen, nicht raten
Die Reihenfolge lautet . Wer unsicher ist, setzt ein großes ein, etwa : , dann rund , dann , dann , dann , dann eine Zahl mit über 300 Stellen.
- 2
b) Eine Schleife mit konstantem Rumpf
. Der Rumpf braucht konstant viel Zeit und wird -mal ausgeführt. Aufwand ist also Durchlaufzahl mal Aufwand je Durchlauf, hier .
Zwischenergebnis
- 3
c) Die binäre Suche: Halbieren führt zum Logarithmus
. In jedem Schritt halbiert sich der Suchbereich. Nach Schritten sind noch Einträge übrig, und man ist fertig bei , also . Bei einer Million Einträgen sind das rund 20 Schritte.
Zwischenergebnis
, bei rund 20 Schritte.
Übung 2
mittelEin Programm braucht Schritte.
a) Gib den Aufwand in O-Notation an. b) Berechne die Schrittzahl für und und vergleiche die Anteile der drei Terme. c) Erkläre, warum man die Konstanten trotzdem weglässt. d) Wie ändert sich die Laufzeit, wenn die Datenmenge verdreifacht wird?
Tipp anzeigen
Zu b): Rechne die drei Summanden einzeln aus.
Lösung anzeigen
a) .
b) Für : , , . Summe . Der quadratische Term macht hier nur etwa 9 % aus, der konstante über die Hälfte.
Für : , , . Summe rund . Jetzt macht der quadratische Term über 96 % aus.
c) Weil die Frage lautet, wie sich der Aufwand bei wachsenden verhält. Für große bestimmt allein der stärkste Term das Ergebnis, wie die Rechnung in b) zeigt. Der Faktor 5 hängt außerdem von Rechner, Sprache und Übersetzer ab und ist deshalb keine Eigenschaft des Verfahrens; das Wachstumsverhalten ist auf jedem Rechner dasselbe.
d) Bei quadratischem Wachstum geht die Verdreifachung mit ein, die Laufzeit wird also etwa neunmal so groß. „Etwa", weil die schwächeren Terme das Ergebnis für kleine noch merklich verschieben; für große stimmt der Faktor sehr genau.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
Teil a): Den stärksten Term suchen
Man vergleicht die Summanden nach ihrem Wachstum: wächst stärker als , und stärker als eine Konstante. Der stärkste bleibt, sein Vorfaktor entfällt.
5n^2 + 200n + 3000 \in O(n^2)
Zwischenergebnis
.
Auch der große Faktor 200 ändert nichts. Entscheidend ist allein die Potenz, nicht die Zahl davor.
- 2
Teil b): Die Anteile ausrechnen statt behaupten
Man setzt beide Werte ein und rechnet die Summanden einzeln aus. Erst dann sieht man, ab wann der quadratische Term dominiert.
n = 1000:\quad 5 \cdot 10^6 ;+; 2 \cdot 10^5 ;+; 3 \cdot 10^3
Zwischenergebnis
Bei dominiert die Konstante, bei der quadratische Term mit über 96 %.
- 3
Teil c): Zwei Gründe, nicht einer
Der erste Grund folgt aus b): Für große bestimmt der stärkste Term praktisch allein das Ergebnis. Der zweite ist grundsätzlicher.
Zwischenergebnis
Konstanten sind keine Eigenschaft des Verfahrens.
- 4
Teil d): Den Faktor über die Klasse bestimmen
Bei geht ein Faktor in der Datenmenge als in die Laufzeit ein. Man muss also nicht neu einsetzen, sondern nur quadrieren.
3^2 = 9
Zwischenergebnis
Etwa neunfache Laufzeit.
Bei wäre es Faktor 3, bei Faktor 27 und bei ließe sich gar kein fester Faktor angeben, weil dort die Differenz von zählt und nicht das Verhältnis.
Übung 3
schwera) Ein exponentielles Verfahren schafft in einer Stunde. Wie weit kommt es mit einem doppelt so schnellen Rechner in derselben Zeit? Begründe. b) Vergleiche das mit einem quadratischen Verfahren. c) (Vertiefung) Erkläre den Unterschied zwischen und an einem eigenen Beispiel. d) (Vertiefung) Warum wäre ein praktisch brauchbarer Beweis von für die Verschlüsselung bedrohlich?
Tipp anzeigen
Zu a): Was bedeutet „doppelt so schnell" bei für den Wert von ?
Lösung anzeigen
a) Nur bis . Der doppelt so schnelle Rechner schafft doppelt so viele Schritte, und bei entspricht eine Verdopplung der Schrittzahl genau einem zusätzlichen , denn . Selbst ein tausendfach schnellerer Rechner brächte nur etwa , wegen .
b) Bei erlaubt die doppelte Geschwindigkeit die -fache Datenmenge, also rund 41 % mehr. Aus würden etwa 56. Der Unterschied zu a) ist der Kern der Sache: Bei polynomiellem Aufwand wächst die bewältigbare Datenmenge mit der Rechenleistung multiplikativ, bei exponentiellem nur additiv. Deshalb hilft schnellere Hardware bei exponentiellen Verfahren praktisch nicht, und deshalb muss man dort den wechseln oder sich mit einer Näherungslösung begnügen.
c) Beispiel Stundenplan: Einen Plan zu finden, der alle Bedingungen erfüllt (kein Lehrer doppelt, kein Raum doppelt, Fachräume passend), ist sehr aufwendig; die Zahl der Kombinationen wächst explosionsartig. Einen vorgelegten Plan zu prüfen, dauert dagegen wenig: Man geht alle Stunden durch und schaut, ob eine Bedingung verletzt ist, was etwa linear in der Zahl der Einträge ist. Das Problem liegt also in , und ob es auch in liegt, ist unbekannt. Ein Sudoku oder das Finden einer kürzesten Rundreise sind Beispiele derselben Art.
d) Weil ein großer Teil der Verschlüsselung genau auf dem Gefälle zwischen Finden und Prüfen beruht. Bei RSA etwa ist das Multiplizieren zweier großer Primzahlen leicht und das Zerlegen des Produkts nach heutigem Stand praktisch unmöglich; wer den geheimen Schlüssel hat, prüft und entschlüsselt sofort. Gäbe es ein praktisch brauchbares polynomielles Verfahren für alle Probleme aus , fiele dieses Gefälle weg, und die betroffenen Verfahren wären gebrochen.
Zwei Einschränkungen gehören dazu: Erstens könnte ein Beweis von auch nichtkonstruktiv sein oder ein Verfahren mit einem so gewaltigen Vorfaktor liefern, dass es praktisch unbrauchbar bleibt. Zweitens gilt selbst dann nicht automatisch jedes Verschlüsselungsverfahren als gebrochen; Verfahren, die auf Einmalschlüsseln beruhen, sind von der Frage gar nicht berührt.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Doppelte Geschwindigkeit bringt bei 2 hoch n genau ein n mehr
Nur bis . Der doppelt so schnelle Rechner schafft doppelt so viele Schritte, und bei entspricht eine Verdopplung der Schrittzahl genau einem zusätzlichen , denn . Selbst ein tausendfach schnellerer Rechner brächte nur etwa , wegen .
; , also
Zwischenergebnis
bei doppelter, bei tausendfacher Geschwindigkeit.
- 2
b) Der Vergleich mit dem quadratischen Verfahren zeigt den Kern
Bei erlaubt die doppelte Geschwindigkeit die -fache Datenmenge, also rund 41 % mehr: Aus würden etwa 56. Der Unterschied zu a) ist der Kern der Sache: Bei polynomiellem Aufwand wächst die bewältigbare Datenmenge mit der Rechenleistung multiplikativ, bei exponentiellem nur additiv.
Zwischenergebnis
Rund statt .
- 3
c) (Vertiefung) P und NP am eigenen Beispiel
Beispiel Stundenplan: Einen Plan zu finden, der alle Bedingungen erfüllt (kein Lehrer doppelt, kein Raum doppelt, Fachräume passend), ist sehr aufwendig, die Zahl der Kombinationen wächst explosionsartig. Einen vorgelegten Plan zu prüfen, dauert dagegen wenig: Man geht alle Stunden durch und schaut, ob eine Bedingung verletzt ist, also etwa linear in der Zahl der Einträge.
- 4
d) (Vertiefung) Warum P = NP die Verschlüsselung bedrohte
Weil ein großer Teil der Verschlüsselung genau auf dem Gefälle zwischen Finden und Prüfen beruht. Bei RSA ist das Multiplizieren zweier großer Primzahlen leicht und das Zerlegen des Produkts nach heutigem Stand praktisch unmöglich; wer den geheimen Schlüssel hat, prüft und entschlüsselt sofort. Fiele dieses Gefälle weg, wären die betroffenen Verfahren gebrochen.
Zusammenfassung
Den Aufwand eines misst man nicht in Sekunden, sondern durch die Zahl der wesentlichen Schritte in Abhängigkeit von der Eingabegröße, denn nur so ist die Aussage von Rechner und Sprache unabhängig. Die O-Notation lässt konstante Faktoren und schwächer wachsende Terme weg, weil genau diese von der Maschine abhängen und nicht vom Verfahren; übrig bleibt das Wachstumsverhalten, das auf jedem Rechner dasselbe ist. Die Klassen reichen von konstant über logarithmisch, linear und linear-logarithmisch bis quadratisch und exponentiell, wobei geschachtelte den Exponenten erhöhen und Halbierungsschritte den Logarithmus erzeugen. Angegeben wird üblicherweise der schlechteste Fall, weil nur er eine Garantie liefert. Praktisch bedeutet das, dass schnellere Hardware immer nur den Vorfaktor ändert, während der Wechsel der Wachstumsklasse die Form der Kurve ändert und bei großen unvergleichlich mehr bringt. Die Klassen und trennen schnelles Lösen von schnellem Prüfen; ob beide zusammenfallen, ist offen, und die Antwort hätte unmittelbare Folgen für die Sicherheit heutiger Verschlüsselung.


