Wie lautet die Laufzeit des Algorithmus?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Angenommen n hat die Form 2^k

Dann wird im ersten schleifundurchgang n mal addiert

im 2. n/2 mal

Im dritten n/4

Und so weiter

Also ist die Gesamtzahl der aufsummierungen gleich:

Die Summe von i=0 bis k von n*1/2^i

Das n kannst du ausklammern und du erhälst nun die geometrische Reihe.

Zusammengefasst bekommst du dann den term:

n*(1-1/2^(k+1))/(1-1/2)

Bzw 2n*(1-1/2^(k+1)) < 2n

Also müsste es O(n) sein

Ja es wird durch die äußere Schleife logarithmisch. O(log(n)*log(n)) sollte die Laufzeit sein.

MrAmazing2  07.08.2020, 17:36

Die innere wird nicht log(n) mal durchlaufen, sondern viel öfter. Hab den selben Fehler gemacht.

1
N0Nam333  07.08.2020, 19:20

Das ist richtig, die Gesamtlaufzeit entspricht O(n). Siehe auch hier.

1

Hi,

ich würde behaupten du hast da eine Endlosschleife. Ein beliebiger Wert n immer wieder halbiert (Teilung durch 2) nähert sich Null an, wird aber nie null. Somit bleibt i immer grösser null und die schleife bricht nicht ab

i immer zu halbieren ist logarithmisch, ja.

In deiner Laufzeit müsste aber n und x drin vorkommen, N aber nicht.