Ich versuche herauszufinden, welche Theta-Komplexität dieser Algorithmus ist. (a ist eine Liste von ganzen Zahlen)Zeitkomplexität eines Algorithmus - n oder n * n?
def sttr(a):
for i in xrange(0,len(a)):
while s!=[] and a[i]>=a[s[-1]]:
s.pop()
s.append(i)
return s
Auf der einen Seite kann ich sagen, dass append
n
ausgeführt wird (Länge eines Array) Zeiten, so pop
zu und das letzte, was ich beachten soll, ist die while
Zustand, der wahrscheinlich 2n
mal höchstens ausgeführt werden konnte.
Daraus kann ich sagen, dass dieser Algorithmus höchstens 4*n
ist, so ist es THETA (n).
Aber ist es nicht amortisiert Analyse?
Auf der anderen Seite kann ich sagen:
Es gibt 2 verschachtelten Zyklen. Der for
Zyklus wird genau n
mal ausgeführt. Der while
Zyklus könnte maximal n
mal ausgeführt werden, da ich das Element in jeder Iteration entfernen muss. Also ist die Komplexität THETA (n * n).
Ich möchte THETA berechnen, weiß aber nicht, welche dieser beiden Optionen richtig ist. Könnten Sie mir einen Rat geben?
Theta ist (n) und ist nicht auf der amortisierten Analyse; Ich habe keinen formellen Beweis für jetzt, aber ich werde später einen nachholen. Coole Frage, übrigens. –