/ / Ist T (n)> = T (n-1) immer wahr? - Algorithmus, Big-O, Zeit-Komplexität

Ist T (n)> = T (n-1) immer wahr? - Algorithmus, Big-O, Zeit-Komplexität

Ich sah einen Beweis für die Komplexität eines Sortieralgorithmus, der ungefähr so ​​lautet:

Total time complexity for the algorithm = T(n-1) + T(n-2)

Thus, Total time complexity for the algorithm <= 2 * T( n-2 )

und fuhr fort, eine Beziehung zu beweisen.

Ques: Kann ich das immer sicher annehmen? T(n) >= T(n-1) ? Wenn ich bereits versuche, die Komplexität eines Algorithmus zu beweisen, wie kann ich diesen Anspruch vorwegnehmen?

Antworten:

6 für die Antwort № 1

Nein, Sie können eine solche Behauptung nicht machen.

Betrachten Sie eine Funktion:

f(0) = 1000000! (factorial of 1000000)
f(n) = 1, for n>0

Hier ist die zeitliche Komplexität der Funktion mit größerem Argument kleiner als die untere.

Von den Details hängt vor allem alles ab - im Beispiel haben Sie bereits eine Aussage

Total time complexity for the algorithm = T(n-1) + T(n-2)

was entspricht

T(n) = T(n-1) + T(n-2)

Das ist eine starke Behauptung über die Komplexität, aber es scheint nicht richtig anzunehmen

Thus, Total time complexity for the algorithm <= 2 * T( n-2 )

wie wir davon abhalten können

T(n) = T(n-1) + T(n-2)

Das

T(n) = T(n-1) + T(n-2) = (T(n-2) + T(n-3)) + T(n-2) >= 2 * T( n-2 )

vielleicht war die Behauptung das?

Thus, Total time complexity for the algorithm >= 2 * T( n-2 )

2 für die Antwort № 2

Nein, man kann diese Annahme nicht immer machen, es kommt auf die Funktion T an.

Beispielsweise:

T(0) = T(1) = 1 //no important
T(2n) = T(2n-2) //all even numbers are calculated recursivel
T(2n+1) = 1 //all odd numbers

In der obigen, für jede ungerade n: T (n) <T (n-1)

Ein praktisches Beispiel, bei dem es sich tatsächlich um eine Komplexitätsfunktion handeln könnte, ist if n muss gerade sein, und wenn nicht - wird ein Fehler zurückgegeben.


0 für die Antwort № 3

Nein, hängt vom Algorithmus ab.

Ich könnte einen Algorithmus wie folgt definieren: Für jede Eingabe von Größe n < 1000 versuchen etwas zu tun. ob n > 1000 gib eine schlüssige Entscheidung zurück.

Also für jeden n < 1000 Es könnte eine lange und ermüdende Berechnung sein, aber für n > 1000 es ist O(1)


0 für die Antwort № 4

T(n) >= 2*T(n-2) ist impliziert, für n>3, durch die Rekursionsbeziehung T(n) = T(n-1)+T(n-2).

T(n-1) ist T(n-2)+T(n-3).

Ob T stellt die Kosten eines Algorithmus dar, kann nicht negativ sein.

T(n-3) >= 0 impliziert T(n-1) >= T(n-2), und T(n) >= 2*T(n-2).

Dies ist nur eine Konsequenz der spezifischen Rekursionsbeziehung, nicht etwas, was Sie im Allgemeinen annehmen können, obwohl dies für viele Rekursionsbeziehungen gilt, die bei der Algorithmusanalyse auftreten.