Unterschied zwischen Zeitkomplexität und Rechenkomplexität

14

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.

Median Hilal
quelle
2
Keine Antwort auf Ihre Frage, aber angesichts Ihres Interesses an solchen Dingen könnte Sie auch cs.stackexchange.com/q/13669/755
DW
1
"Komplexität eines Algorithmus" im Zusammenhang mit asymptotischer Laufzeit ist eine (häufig verwendete) Fehlbezeichnung. Sie möchten "asymptotische Laufzeit" sagen.
Raphael

Antworten:

9

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 )PSortingPO(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).SortingTC0AC0

Luke Mathieson
quelle
@shekharsuman Mit Problem meine ich den formalen Begriff eines Rechenproblems (zB k-Vertex Cover), nicht die allgemeine Bedeutung. Computerkomplexität ist die Klassifizierung von Rechenproblemen. In einem formalen Sinne bezieht sich die Komplexität auf das, was wir über das Problem sagen können. Die Ergebnisse zu Algorithmen geben Aufschluss über die Komplexität von Problemen, sind jedoch keine Komplexitätsergebnisse an sich (informell sprechen wir jedoch über die Komplexität eines Algorithmus).
Luke Mathieson
1
@shekharsuman Der erste Absatz der Wikipedia- Seite ist eine ziemlich gute Zusammenfassung.
Luke Mathieson
@ Luke Danke, das macht die Dinge klar. Wenn ich jedoch die Redewendung "die am häufigsten verwendete Art von Komplexität zur formalen Bewertung von Algorithmen" verwenden kann (auch wenn ich weiß, dass dies nicht präzise ist). Was wäre es Zeit vs. rechnerisch? Was ich denke, ist, dass im Allgemeinen das Wichtigste die Zeit ist, da Ressourcen in gewissem Sinne erweiterbar sind!
Median Hilal
1
@MedianHilal-Zeit ist in der Tat das am häufigsten betrachtete Maß für die Komplexität eines Problems. Der Raum ist nicht allzu weit dahinter (zumindest von Komplexitätstheoretikern und Menschen, die mit sehr großen Datenmengen zu tun haben, weniger von Tag zu Tag).
Luke Mathieson
-2

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.

samtiger Toast
quelle
Die Frage ist nach der Rechenkomplexität, nicht nach der zyklomatischen Komplexität!
Am_I_Helpful
Sie können die OP lesen wollen - er ist über die Komplexität eines Algorithmus zu fragen - Zyklomatische Komplexität gibt eine statische Maß eines Algorithmen Rechenkomplexität - versucht positives Feedback beim nächsten Mal der Hinzufügen
velvetytoast
2
Die zyklomatische Komplexität misst nicht die Rechenkomplexität. Die Komplexität der Berechnungen bezieht sich auf die Laufzeit und nicht auf die Komplexität der Quellcodestruktur.
DW
@DW Genauer gesagt bezieht sich Rechenkomplexität auf Ressourcen, die zur Lösung eines Problems erforderlich sind (z. B. Speicherplatz, Wechsel, Orakelaufrufe usw. sowie Zeit).
David Richerby
@DavidRicherby Ich bin kein Experte auf diesem Gebiet, also bitte korrigieren, wenn falsch. In manchen Situationen spielen statische Komplexitätsmaße wie die Programmgröße eine Rolle. Habe ich recht, dass es eher mit der Komplexität von Kolmogorov zu tun hat? Wäre das auch für die zyklomatische Komplexität der Fall? Eine Art von Komplexität für das Schreiben von Programmen oder Problemen und die andere für das Lösen oder Ausführen von Programmen ... möglicherweise eine kurze Annäherung an die Situation. Ich bin mir nicht sicher, ob ich eine vernünftige Frage dazu schreiben würde.
Babou