Handelt es sich bei der Messung der Komplexität eines Algorithmus um Zeitkomplexität oder um Rechenkomplexität? Was ist der Unterschied zwischen ihnen?
Ich habe die maximale (schlechteste) Anzahl der Grundoperationen (mit den meisten Kosten) im Algorithmus berechnet.
complexity-theory
terminology
algorithm-analysis
time-complexity
Median Hilal
quelle
quelle
Antworten:
Computerkomplexität ist nur ein allgemeinerer Begriff, da Zeit nicht die einzige Ressource ist, die wir in Betracht ziehen möchten. Die nächste naheliegendste ist der Raum , dass ein Algorithmus verwendet, und daher können wir darüber reden , Raum Komplexität, auch als einen Teil der Rechenkomplexität. In der Tat können wir dies für jede Maßnahme tun, die Sie verwenden. Natürlich sind einige Maßnahmen nützlicher als andere.
Wenn Sie also die Anzahl der Schritte zählen, die ein Algorithmus im schlimmsten Fall ausführt, ergibt sich eine zeitliche Komplexität, die für das gelöste Problem erforderlich ist.
Denken Sie auch daran, dass sich Komplexität auf das Problem bezieht, nicht auf den Algorithmus. Ein Problem hat also Komplexitätsgrenzen, ein Algorithmus Ressourcengrenzen (Laufzeit, Speicherplatznutzung ...). Es ist nur eine Frage der Definitionsformalität, die Komplexitätstheorie befasst sich mit Problemen. Ja, Algorithmen ein wichtiges Instrument für die Analyse von Problemen sind und die Komplexität und Algorithmik sind eng miteinander verbunden, aber formal würden wir nicht Merge-Sort sagen (ein Algorithmus) ist in , es ist das Problem , S o r t i n g , die in ist P . Merge-Sort verwendet bestimmte Ressourcen ( O ( n log n )P Sorting P O(nlogn) Schritte zum Beispiel). Die Ressourcenbindung und die Korrektheit des Algorithmus implizieren die Komplexität (Obergrenze) des Problems, aber sie sind verschiedene Dinge. Ist auch T C 0 -komplett unter A C 0 -Reduktionen, so kann diese Komplexitätsgrenze eigentlich nur für ein Problem angegeben werden (hat aber algorithmische Implikationen).Sorting TC0 AC0
quelle
Die zyklomatische Komplexität wird häufig als Maß für die Komplexität von Berechnungen verwendet. Ein nützliches Beispiel finden Sie unter /programming/9097987/calculation-of-cyclomatic-complexity
Es kann viele verschiedene (möglicherweise verschachtelte) Pfade durch einen Algorithmus geben, die ihm eine hohe zyklomatische Komplexität verleihen, aber keine Schleifen, die ihm eine geringe zeitliche Komplexität verleihen. Ein Programm mit einer einzelnen Schleife hätte eine geringe zyklomatische Komplexität, möglicherweise jedoch eine hohe zeitliche Komplexität.
Die zyklomatische Komplexität wird häufig als Maß für die für den Code erforderliche Wartung verwendet. Eine ausführlichere Beschreibung finden Sie unter http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Dies unterscheidet sich von der Zeitkomplexität, die eine Laufzeitmessung des Codes ist, und kann verwendet werden, um die Wahrnehmung des Benutzers von der Wirksamkeit des Systems zu bewerten.
quelle