Zeitkomplexität des folgenden Algorithmus?

8

Ich lerne gerade Big-O Notation und stolperte über diesen kleinen Algorithmus in einem anderen Thread:

%Vor%

Laut dem Autor des Posts ist die Komplexität Θ (n), aber ich kann nicht herausfinden, wie. Ich denke, die Komplexität der while-Schleife ist Θ (log (n)). Die Komplexität der for-Schleife aus dem, was ich dachte, wäre auch Θ (log (n)), weil die Anzahl der Iterationen jedes Mal halbiert würde.

Also, wäre die Komplexität des Ganzen nicht Θ (log (n) * log (n)), oder mache ich etwas falsch?

Bearbeiten: Das Segment ist in der besten Antwort auf diese Frage: Ссылка =

    
Gerk 07.05.2015, 19:27
quelle

2 Antworten

3

Stellen Sie sich der Einfachheit halber n = 2^k vor. Wie oft wird x inkrementiert? Es folgt leicht dies ist Geometrische Serie

  

2 ^ k + 2 ^ (k - 1) + 2 ^ (k - 2) + ... + 1 = 2 ^ (k + 1) - 1 = 2 * n - 1

Also dieser Teil ist Θ(n) . Auch i get wird halbiert k = log n mal und es hat keine asymptotische Wirkung auf Θ(n) .

    
JuniorCompressor 07.05.2015, 19:34
quelle
2

Der Wert von i für jede Iteration der while -Schleife, die auch angibt, wie viele Iterationen die for -Schleife hat, sind n, n / 2, n / 4, ... und der Gesamtwert Komplexität ist die Summe dieser. Das bedeutet ungefähr 2n, was dir dein Theta (n) bringt.

    
Scott Hunter 07.05.2015 19:34
quelle

Tags und Links