Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

angryTom
Freigeben: 2020-09-05 15:38:08
Original
48596 Leute haben es durchsucht

Die zeitliche Komplexität des rekursiven Algorithmus beträgt: [T(n)=o(f(n))], was bedeutet, dass mit zunehmender Problemgröße n die Ausführungszeitwachstumsrate des Algorithmus und f zunimmt (n) Die Wachstumsrate ist proportional zur Wachstumsrate, die als asymptotische Zeitkomplexität des Algorithmus bezeichnet wird.

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

Zeitkomplexität des rekursiven Algorithmus

Zeitkomplexität:

Im Allgemeinen ist die Anzahl der Wiederholungen grundlegender Operationen im Algorithmus eine Funktion f(n) der Problemgröße n. Analysieren Sie dann die Änderung von f(n) mit n und bestimmen Sie die Größenordnung von T(n). „o“ wird hier verwendet, um die Größenordnung darzustellen und die zeitliche Komplexität des Algorithmus anzugeben.

T(n)=o(f(n));

Das bedeutet, dass mit zunehmender Problemgröße n die Wachstumsrate der Ausführungszeit des Algorithmus proportional zur Wachstumsrate von ist f(n) , was als asymptotische Zeitkomplexität des Algorithmus bezeichnet wird. Und wir diskutieren im Allgemeinen die Zeitkomplexität im schlimmsten Fall.

Empfohlene Kurse: C-Sprach-Tutorial

Raumkomplexität:

Die Raumkomplexität des Algorithmus ist kein tatsächlich belegter Raum , sondern um die Anzahl der Hilfsraumeinheiten im gesamten Algorithmusraum zu berechnen, was nichts mit der Größe des Problems zu tun hat. Die Raumkomplexität S(n) eines Algorithmus ist definiert als die Größenordnung des vom Algorithmus verbrauchten Raums.

S(n)=o(f(n))

Wenn der für die Algorithmusausführung erforderliche Hilfsraum eine Konstante relativ zu den Eingabedaten n ist, wird er als Raumkomplexität bezeichnet Algorithmus Der Hilfsraum ist o(1);

Die Raumkomplexität des rekursiven Algorithmus: die Rekursionstiefe n*der für jede Rekursion erforderliche Hilfsraum ist eine Konstante Die Komplexität des rekursiven Raums ist o (n).

Die Berechnungsgleichung der Zeitkomplexität des rekursiven Algorithmus ist eine rekursive Gleichung:

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

Ein Beispiel kann vor der Einführung berücksichtigt werden der rekursive Baum:

T(n) = 2T(n/2) + n2
Nach dem Login kopieren

2 Mal iterieren, um zu erhalten:

T(n) = n2 + 2(2T(n/4) + (n/2) 2)
Nach dem Login kopieren

Sie können ihn auch weiter iterieren und vollständig erweitern, um zu erhalten:

T(n) = n2 + 2((n/2) 2 +
2((n/22)2 + 2((n/23) 2 +
2((n/24) 2 +…+2((n/2i) 2 +
2T(n/2i + 1)))…))))……(1)
Nach dem Login kopieren

Und wenn n/2i+ 1 == 1 , die Iteration endet.

Erweitern Sie die Klammern von Gleichung (1), wir erhalten:

T(n) = n2 + 2(n/2)2 +
22(n/22) 2 + … + 2i(n/2i)2 +
2i+1T(n/2i+1)
Nach dem Login kopieren

Dies ist zufällig eine Baumstruktur, aus der die rekursive Baummethode abgeleitet werden kann.

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

(a)(b)(c)(d) in der Abbildung sind die Schritte 1, 2, 3 bzw. n in der rekursiven Baumgenerierung. In jedem Knoten wird das aktuelle freie Element n2 beibehalten und die beiden rekursiven Elemente T(n/2)
+ T(n/2) werden jeweils seinen beiden untergeordneten Knoten zugewiesen, und so weiter.

Die Summe aller Knoten im Diagramm ist:

[1 + 1/2 + (1/2)2 + (1/2)3 + … + (1/2)i] n2 = 2n2
Nach dem Login kopieren

Es ist ersichtlich, dass seine zeitliche Komplexität O(n2)

Die Regel ist des rekursiven Baums kann erhalten werden als:

(1) Der Knoten jeder Schicht ist der Wert von f(n) in T(n) = kT(n / m) + f(n) am aktuell n/m;

(2) Die Anzahl der Zweige jedes Knotens beträgt k;

(3) Die rechte Seite jeder Ebene markiert die Summe aller Knoten in der aktuellen Ebene.

Ein weiteres Beispiel:

T(n) = T(n/3) + T(2n/3) + n

Es ist rekursiv Der Baum ist wie folgt:

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

Es ist ersichtlich, dass der Wert jeder Schicht n ist und der längste Pfad von der Wurzel zum Blattknoten ist:

Denn am Ende stoppt die Rekursion bei (2/3)kn == 1. Dann

dann

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

, das heißt , T(n) = O(nlogn) 

Zusammenfassend verwenden Sie diese Methode, um die Komplexität des rekursiven Algorithmus zu lösen:

f(n) = af(n/b) + d(n)
Nach dem Login kopieren

1 d(n) ist eine Konstante:

 Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

2 Wenn d(n) = cn:

Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

3. Der Rekursionsbaum kann verwendet werden, wenn d(n) in anderen Fällen eine Analyse durchführt.

Wenn im zweiten Fall die Divide-and-Conquer-Methode zur Verbesserung des ursprünglichen Algorithmus verwendet wird, liegt der Schwerpunkt auf der Verwendung neuer Berechnungsmethoden, um den Wert von a zu reduzieren. ​

Das obige ist der detaillierte Inhalt vonWie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage