Heim Backend-Entwicklung C#.Net-Tutorial Wie hoch ist die zeitliche Komplexität eines rekursiven Algorithmus?

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

Oct 24, 2019 am 10:53 AM
Zeitkomplexität 递归

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Apr 23, 2024 am 09:30 AM

Die Rekursionstiefe von C++-Funktionen ist begrenzt und das Überschreiten dieser Grenze führt zu einem Stapelüberlauffehler. Der Grenzwert variiert je nach System und Compiler, liegt aber meist zwischen 1.000 und 10.000. Zu den Lösungen gehören: 1. Tail-Rekursionsoptimierung; 2. Tail-Call;

Unterstützen C++-Lambda-Ausdrücke die Rekursion? Unterstützen C++-Lambda-Ausdrücke die Rekursion? Apr 17, 2024 pm 09:06 PM

Ja, C++-Lambda-Ausdrücke können die Rekursion mithilfe von std::function unterstützen: Verwenden Sie std::function, um einen Verweis auf einen Lambda-Ausdruck zu erfassen. Mit einer erfassten Referenz kann sich ein Lambda-Ausdruck rekursiv selbst aufrufen.

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Apr 22, 2024 pm 03:18 PM

Der rekursive Algorithmus löst strukturierte Probleme durch den Selbstaufruf von Funktionen. Der Vorteil besteht darin, dass er einfach und leicht zu verstehen ist. Der Nachteil besteht jedoch darin, dass er weniger effizient ist und einen Stapelüberlauf verursachen kann Der Vorteil der Stapeldatenstruktur besteht darin, dass sie effizienter ist und einen Stapelüberlauf vermeidet. Der Nachteil besteht darin, dass der Code möglicherweise komplexer ist. Die Wahl zwischen rekursiv und nicht rekursiv hängt vom Problem und den spezifischen Einschränkungen der Implementierung ab.

Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Sep 17, 2023 pm 07:49 PM

Gegeben seien zwei Strings str_1 und str_2. Das Ziel besteht darin, mithilfe eines rekursiven Verfahrens die Anzahl der Vorkommen der Teilzeichenfolge str2 in der Zeichenfolge str1 zu zählen. Eine rekursive Funktion ist eine Funktion, die sich innerhalb ihrer Definition selbst aufruft. Wenn str1 „Iknowthatyouknowthatiknow“ und str2 „know“ ist, beträgt die Anzahl der Vorkommen -3. Lassen Sie uns das anhand von Beispielen verstehen. Geben Sie beispielsweise str1="TPisTPareTPamTP", str2="TP" ein; geben Sie Countofoccurrencesofasubstringrecursi aus

Rekursives Programm zum Ermitteln minimaler und maximaler Elemente eines Arrays in C++ Rekursives Programm zum Ermitteln minimaler und maximaler Elemente eines Arrays in C++ Aug 31, 2023 pm 07:37 PM

Als Eingabe nehmen wir das Integer-Array Arr[]. Ziel ist es, mithilfe einer rekursiven Methode die größten und kleinsten Elemente in einem Array zu finden. Da wir Rekursion verwenden, durchlaufen wir das gesamte Array, bis wir Länge = 1 erreichen, und geben dann A[0] zurück, was den Basisfall bildet. Andernfalls wird das aktuelle Element mit dem aktuellen Minimal- oder Maximalwert verglichen und sein Wert für nachfolgende Elemente rekursiv aktualisiert. Schauen wir uns verschiedene Eingabe- und Ausgabeszenarien dafür an −Input −Arr={12,67,99,76,32};Output −Maximum value in the array: 99 Explanation &mi

Wie analysiert man die zeitliche Komplexität rekursiver C++-Funktionen? Wie analysiert man die zeitliche Komplexität rekursiver C++-Funktionen? Apr 17, 2024 pm 03:09 PM

Die Zeitkomplexitätsanalyse rekursiver Funktionen umfasst Folgendes: Identifizieren von Basisfällen und rekursiven Aufrufen. Berechnen Sie die zeitliche Komplexität des Basisfalls und jedes rekursiven Aufrufs. Summieren Sie die zeitliche Komplexität aller rekursiven Aufrufe. Berücksichtigen Sie den Zusammenhang zwischen der Anzahl der Funktionsaufrufe und der Größe des Problems. Beispielsweise beträgt die zeitliche Komplexität der Fakultätsfunktion O(n), da jeder rekursive Aufruf die Rekursionstiefe um 1 erhöht, was eine Gesamttiefe von O(n) ergibt.

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Apr 30, 2024 am 10:30 AM

Eine rekursive Funktion ist eine Technik, die sich selbst wiederholt aufruft, um ein Problem bei der Zeichenfolgenverarbeitung zu lösen. Es erfordert eine Beendigungsbedingung, um eine unendliche Rekursion zu verhindern. Rekursion wird häufig bei Operationen wie der String-Umkehr und der Palindromprüfung verwendet.

Wie gehe ich mit Zeitkomplexitätsproblemen in PHP-Funktionen um? Wie gehe ich mit Zeitkomplexitätsproblemen in PHP-Funktionen um? Apr 26, 2024 pm 02:12 PM

Zeitkomplexität ist ein Maß dafür, wie lange die Ausführung einer Funktion dauert. Zu den häufigsten Problemen mit der Zeitkomplexität von PHP-Funktionen gehören verschachtelte Schleifen, große Array-Durchläufe und rekursive Aufrufe. Zu den Techniken zur Optimierung der Zeitkomplexität gehören: Verwendung von Caching zur Reduzierung der Anzahl von Schleifen, Vereinfachung von Algorithmen durch Parallelverarbeitung

See all articles