Die Bestimmung der Zeit-und Raum-Komplexität
Ich bin mit einigen Schwierigkeiten Bestimmung der Raum-und Zeit-Komplexität. Zum Beispiel, wenn ich einen Baum mit einer Verzweigung Faktor b und haben bei den meisten eine Tiefe d, wie kann ich die Berechnung der Zeit-und Raum-Komplexität? Ich weiß, Sie sind in O(b^d) und O(bd) , aber mein problem ist, wie man auf diese Werte.
Dank!
- Asymptotische Komplexitäten sind nicht Werte. Sie sind Formeln. Wenn Sie möchten, dass die genauen Werte sollten Sie sprechen von Zeit, Raum und Kosten. Dann die nächste Frage, zumindest für die Zeit Kosten, werden "Zeit zu tun, was?" Besuchen Sie jedes element in dem Baum? Finden Sie den Pfad von der Wurzel zu einem Blatt, auf dem die Knoten die kleinste Summe? Setzen Sie den Baum in eine Art Normalform? Nur Vorgänge, die Zeit Kosten und der Komplexität. Datenstrukturen nur da sitzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zeit
Alle Knoten im Baum erzeugt werden, wenn an einem gewissen Punkt, und die Annahme ist, dass es kostet Konstante Zeit
c
zu generieren, die ein Knoten (konstanter Zeiten können variieren, Sie können wählen Sie einfachc
die höchste Konstante Zeit, die zur Erstellung eines Knoten). Die Reihenfolge wird bestimmt durch den Algorithmus, und sorgt dafür, dass Knoten nicht immer wieder erweitert.Wie Sie in der Abbildung zu sehen kostet es
c*b^0
Kosten zu berechnen, die erste Ebene - genauc
. Die nächste Stufe im Baum enthält einb^1
Knoten und es kostetc*b^1 = c*b
zum generieren der zweiten Ebene. Für die Dritte Ebene wird esb
Knoten wieder für jeden Knoten in der zweiten Ebene, das heißtb*b^1 = b^2$
Knoten und einem Preis vonc*b^2
.Auf der tiefsten Ebene des Baumes in der Tiefe
d
es wirdb^d
Knoten, die Arbeit auf dieser Ebene daherc*b^d
. Der Gesamtbetrag der Arbeit zu diesem Punkt istc*b^0 + c*b^1 + ... + c*b^d
. Für die Komplexität, die wir nur einen Blick auf die Aufsteiger Begriff und drop die Konstante, so erhalten wir:O(c + c*b + ... + c*b^d) = O(c*b^d) = O(b^d)
.Im wesentlichen: Die Zeit ist eine Funktion
f(d) = SUM(i=1..d){c*b^i}
, undO(f(d)) = O(b^d)
.Raum
Die Abbildung zeigt den Algorithmus in den verschiedenen Phasen für
b=3
.*
zeigt das aktuell expandierten Knoten,?
zeigt unbekannte Knoten und+
gibt Knoten, die Partitur wurde voll berechnet.Zur Berechnung der Punktzahl eines Knoten, erweitern Sie den Knoten, wählen Sie ein Kind und rekursiv erweitern, bis ein Blatt-Knoten in der Tiefe
d
. Sobald ein Kind-Knoten wird voll berechnet, bewegen Sie auf den nächsten untergeordneten Knoten. Sobald alleb
Kind-Knoten berechnet werden, die Eltern Punktzahl errechnet sich auf der Grundlage der Kinder-und an diesem Punkt wird der Kind-Knoten aus dem Speicher entfernt. Dies ist in der obigen Abbildung dargestellt, in denen der Algorithmus ist in 4 verschiedenen Stadien.Haben Sie jederzeit einen Pfad erweitert, und Sie müssen
c*b
Speicher zum speichern alle untergeordneten Knoten auf jeder Ebene. Hier wieder die Annahme ist, dass Sie brauchen eine Konstante Menge an Speicherplatz pro Knoten. Der Schlüssel ist, dass jeder Teilbaum kann zusammengefasst durch seine Wurzel. Da die maximale Länge eines Pfades istd
Sie maximal benötigenc*b*d
Platz. Wie oben wir fallen können Konstante Bedingungen, und wir bekommenO(c*b*d) = O(b*d)
.Raum Komplexität beträgt ", wie viel Speicher benötige ich zum reservieren für diesen Algorithmus".
Zeitkomplexität beträgt "wie lange wird es dauern, bis ausführen (in einem abstrakten Sinne").
Einen Baum mit dem branching-Faktor b und der Tiefe d haben einen Knoten an seinem zeroith Ebene, b Knoten auf Ihrer ersten Ebene, b*b = b^2-Knoten auf seiner zweiten Ebene b^2 * b = b^3 in der Dritten Ebene usw.. In diesen vier Ebenen (Tiefe 3) es ist 1 + b + b^2 + b^3. In Bezug auf die Komplexität, die wir nur halten, um den höchsten Begriff, um-und drop-beliebigen Konstanten multiplizieren in der Regel. So dass Sie am Ende mit einer Komplexität von O(b^d) Raum für Komplexität.
Nun in der Zeit, Komplexität, was Ihre Zählung ist nicht die Anzahl der Knoten, sondern die Anzahl der Schleifen oder rekursive Aufrufe von Algorithmus dauern wird (worst case).
Ich werde gehen auf ein Glied und vermute, du redest IDDFS. Die Erklärung, wo die O(b^d) und O(bd) kommen, ist schön erklärt in diese wiki-Artikel.