Frage: Wie ist der unten beschriebene Algorithmus "richtig" zu interpretieren?
Ich wollte überprüfen, ob mein Verständnis des folgenden Algorithmus richtig ist, da ich dieses Szenario, bei dem die innere for-Schleife meiner Meinung nach vom Wert von beeinflusst wird, nicht "betroffen" habe ständig halbiert. Wenn es hilft, laufen Indizes von 1 bis , und die Eingabe ist ein Integer-Array und eine Größe .
function F(A[.],n)
s <- 0
m <- n
while m > 0
for i <- 1 to m do
s <- s + A[i]
m <- m/2
Mein Verständnis ist, dass wir uns zuerst die innerste Schleife ansehen, die die for-Schleife ist. Daher ist es drin Komplexität, wie es iteriert bis zu . Außerhalb dieser Schleife befindet sich die While-Schleife, die bei beginnt aber es halbiert sich ständig, was bedeutet, dass es drin ist Komplexität. Daher ist die Gesamtkomplexität .
Was mich jedoch „stolpert“, ist, weil halbiert wird, würde dies die innere for-Schleife beeinflussen, was dann bedeuten würde, dass sie das Array "halb" der Zeit durchläuft, also be Komplexität. Wie zuvor ist die äußere While-Schleife , daher Gesamtkomplexität ist .
Wie soll ich diesen Algorithmus "analysieren", da ich das Gefühl habe, dass die beiden Antworten "brauchbar" sind, aber die untere am "sinnvollsten" ist.
HINWEIS
Ihre zusammenfassende Komplexität ist (vorausgesetzt )
Können Sie die geometrische Reihe summieren und das Ergebnis umwandeln? ?
AKTUALISIEREN
Um Ihre Frage in den Kommentaren zu beantworten, besteht jede Iteration der inneren for-Schleife aus 3 Operationen: A[i]
Wertsuche s += A[i]
und i += 1
(Inkrement des Schleifenindex). Ich gehe davon aus +=
, dass es atomar ist, dh als eine Operation zählt, wenn Sie in Wirklichkeit Zuweisung und Addition separat implementieren, sind es jeweils 2 Operationen, also insgesamt 5 Operationen.
Schließlich ist eine Iteration der äußeren Schleife m /= 2
mit dem check erforderlich m > 0
, von dem ich ebenfalls annehme, dass er atomar ist. Wenn nicht, würden Sie hier 3 Operationen benötigen, und die gesamte Schleife wäre
stattdessen.
Benutzer660015
gt6989b