„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Zeitkomplexität und Raumkomplexität

Zeitkomplexität und Raumkomplexität

Veröffentlicht am 08.11.2024
Durchsuche:759

Time complexity & Space complexity

Im Allgemeinen sind Zeitkomplexität und Raumkomplexität Möglichkeiten, die Effizienz eines Algorithmus basierend darauf zu messen, wie seine Ressourcennutzung mit dem skaliert Größe seiner Eingabe. Lassen Sie uns die Grundlagen und einige gängige Beispiele durchgehen.

Zeitkomplexität

Zeitkomplexität beschreibt die Zeit, die ein Algorithmus benötigt, um basierend auf der Größe der Eingabe (oft als n bezeichnet) fertig zu werden.

  1. Konstante Zeit – O(1):

    • Die Ausführungszeit des Algorithmus ändert sich nicht mit der Eingabegröße.
    • Beispiel: Zugriff auf ein Element in einem Array über den Index, wie in arr[5].
  2. Logarithmische Zeit – O(log n):

    • Die Ausführungszeit des Algorithmus wächst logarithmisch mit zunehmender Eingabegröße, was bedeutet, dass das Problem mit jedem Schritt halbiert wird.
    • Beispiel: Binäre Suche in einem sortierten Array.
  3. Lineare Zeit – O(n):

    • Die Ausführungszeit des Algorithmus wächst linear mit der Eingabegröße.
    • Beispiel: Ein Array mit n Elementen einmal durchlaufen.
  4. Linearithmische Zeit – O(n log n):

    • Häufig bei effizienten Sortieralgorithmen, bei denen jedes Element logarithmisch behandelt wird, normalerweise aufgrund rekursiver Division und linearer Zusammenführung oder Verarbeitung.
    • Beispiel: Sortierung zusammenführen, Schnellsortierung.
  5. Quadratische Zeit – O(n²):

    • Die Ausführungszeit wächst proportional zum Quadrat der Eingabegröße.
    • Beispiel: Verschachtelte Schleifen, z. B. der Vergleich jedes Elements in einem Array mit jedem anderen Element.
  6. Kubische Zeit – O(n³):

    • Die Ausführungszeit wächst mit der Potenz der Eingabegröße. Selten, kann aber in Algorithmen mit drei verschachtelten Schleifen auftreten.
    • Beispiel: Lösen bestimmter Matrixoperationen mithilfe von Brute-Force-Algorithmen.
  7. Exponentielle Zeit – O(2^n):

    • Die Ausführungszeit verdoppelt sich mit jedem zusätzlichen Element in der Eingabe, typischerweise bei rekursiven Algorithmen, die Teilprobleme in allen möglichen Kombinationen lösen.
    • Beispiel: Die naive Lösung für die Fibonacci-Folge, bei der jeder Aufruf zu zwei weiteren Aufrufen führt.
  8. Fakultätszeit – O(n!):

    • Die Ausführungszeit wächst faktoriell mit der Eingabegröße. Oft aus Algorithmen, die die Generierung aller möglichen Permutationen oder Kombinationen beinhalten.
    • Beispiel: Das Problem des Handlungsreisenden mit roher Gewalt lösen.

Weltraumkomplexität

Die Speicherplatzkomplexität misst die Menge an Speicher, die ein Algorithmus im Verhältnis zur Eingabegröße verwendet.

  1. Konstanter Raum – O(1):

    • Der Algorithmus verwendet unabhängig von der Eingabegröße eine feste Speichermenge.
    • Beispiel: Speichern einiger Variablen, wie Ganzzahlen oder Zähler.
  2. Logarithmischer Raum – O(log n):

    • Die Speichernutzung wächst logarithmisch, was häufig bei rekursiven Algorithmen zu beobachten ist, die das Problem bei jedem Schritt halbieren.
    • Beispiel: Rekursive binäre Suche (Speicherplatzkomplexität aufgrund des Aufrufstapels).
  3. Linearer Raum – O(n):

    • Die Speichernutzung wächst linear mit der Eingabegröße, was häufig bei der Erstellung eines zusätzlichen Arrays oder einer Datenstruktur zum Speichern von Eingaben der Fall ist.
    • Beispiel: Erstellen einer Kopie eines Arrays der Größe n.
  4. Quadratischer Raum – O(n²):

    • Der Speicherverbrauch wächst mit dem Quadrat der Eingabegröße, beispielsweise beim Speichern einer 2D-Matrix der Größe n x n.
    • Beispiel: Speichern einer Adjazenzmatrix für einen Graphen mit n Knoten.
  5. Exponentieller Raum – O(2^n):

    • Der Speicherverbrauch wächst exponentiell mit der Eingabegröße, oft in rekursiven Lösungen, die Daten für jede mögliche Teilmenge der Eingabe speichern.
    • Beispiel: Memoisierung in rekursiven Algorithmen mit vielen überlappenden Teilproblemen.

Praxisbeispiele

  • Lineare Zeit (O(n)) und linearer Raum (O(n)):

    • Eine Funktion, die ein Array durchläuft und jedes Element in einem neuen Array speichert.
  • Quadratische Zeit (O(n²)) und konstanter Raum (O(1)):

    • Eine Funktion, die über zwei verschachtelte Schleifen über ein Array verfügt, aber über einige Variablen hinaus keinen zusätzlichen Speicher benötigt.

Komplexität analysieren

Beim Analysieren von Code auf zeitliche und räumliche Komplexität:

  1. Identifizieren Sie die Schleifen: Verschachtelte Schleifen erhöhen normalerweise die Komplexität (z. B. ergibt eine Schleife ( O(n) ); zwei verschachtelte Schleifen ergeben ( O(n^2) )).
  2. Suchen Sie nach Rekursion: Rekursive Aufrufe können je nach Verzweigungsfaktor und Tiefe der Rekursion zu einer exponentiellen zeitlichen und räumlichen Komplexität führen.
  3. Berücksichtigen Sie Datenstrukturen: Die Verwendung zusätzlicher Datenstrukturen wie Arrays, Listen oder Hash-Maps kann sich auf die Raumkomplexität auswirken.

Allgemeine Tipps

  • Bei der Zeitkomplexität geht es um das Zählen von Operationen als Funktion der Eingabegröße.
  • Bei der Raumkomplexität geht es darum, die Menge an zusätzlichem Speicher zu zählen, die benötigt wird.

Durch die Bewertung dieser Faktoren können Sie abschätzen, wie effizient ein Algorithmus arbeitet und wie viel Speicher er basierend auf der Eingabegröße verbraucht.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/sharif_shariutullah/time-complexity-space-complexity-2f3j?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3