Warum hat dieser einfache Algorithmus lineare Laufzeit?

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo zusammen!

Warum hat der folgender Algorithmus worst-case Komplexität O(n), also lineare Laufzeit? Ich komme einfach nicht drauf. Dabei liefern rand(0,n) eine Zufallszahl zwischen 0 und n. Wie kann man das nur begründen?

Code:
stack <-- create()
for i <-- 1 to n do
    push(stack,a_i)
    j <-- rand(0,n)
    while not empty(stack) and j>0 do
        pop(stack)
        j <-- j-1
    endwhile
endfor


Ich würde es sehr begrüßen, wenn jemand einen Tipp für mich hat bzw. mir helfen könnte!! Vielen Dank.

squirrel
 

Redfrettchen

Bekanntes Mitglied
Hi,
imho hat das Programm eine worst-case-Komplexität von O(n²).
Das Programm besteht hauptsächlich aus einer for-Schleife, die immer n-mal durch läuft. Im Inneren der Schleife gibt es noch eine while-Schleife, die in Abhängigkeit von i (dem Index der for-Schleife) maximal durchlaufen wird. Denn ist i=1, dann wird die while-Schleife maximal 1 mal durchlaufen.
Wir haben als im schlechtesten Fall 1+2+3+4+5+...+n=n*(n+1)/2 Durchläufe der while-Schleife während der gesamten Programmausführung, also eine Zeitkomplexität von O(n²).
Bei der Speicherkomplexität ist es zwar genau andersherum: Je öfter die innere while-Schleife durchläuft, desto weniger müssen wir speichern, aber der Speicher-worst-case hat nur eine Komplexität von O(n), weil maximal n Elemente gespeichert werden müssen.
Deshalb bleibt es bei einer Gesamtkomplexität von O(n²) im worst-case.

EDIT: Naja ok, ich seh grad, dass das doch nicht so einfach war, denn wenn immer was entfernt wird, dann kann ja im nächsten Schritt nicht i+1 innere Schleifendurchläufe sein.
 

Redfrettchen

Bekanntes Mitglied
Ok, also nächster Vorschlag:
Es ist doch O(n).
Bei der Speicherkomplexiät erhält man das ja schon. Nun muss nur noch gezeigt werden, dass das bei der Zeitkomplexität nicht mehr ist.
Also wir gehen n mal durch die for-Schleife. Insgesamt werden n Elemente in den Stack eingefügt. Also können auch nur maximal n Elemente gelöscht werden. Im worst-case ist der Stack am Ende leer. Also wurden n Elemente entfernt, man weiß aber nicht genau, wieviele in einem bestimmten Schritt. Aber die Summe aller inneren Schleifendurchläufe über den Durchläufen der äußeren Schleife ist auf jeden Fall n (im worst-case). Also ist die Zeitkomplexität O(n) und die Gesamtkomplexität ebenso.
 

babuschka

Top Contributor
Hallo Redfrettchen,

vielen Dank für deine kompetente Antworten!! Ich dachte zuerst nämlich auch, dass die Laufzeit n^2 sein muss, wegen den verschachtelten Schleifenaufrufen. Deine Argumentation (letzte Antwort) trifft den Nagel auf den Kopf! 1000 Dank! :toll:

Viele Grüße!
squirrel
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
K Warum zeigt dieser reguläre Ausdruck true an? Java Basics - Anfänger-Themen 1
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
S Warum dieser Fehler? Java Basics - Anfänger-Themen 1
B Datum in dieser Range SQL? Java Basics - Anfänger-Themen 3
R Dieser Code sagt mir nichts... Java Basics - Anfänger-Themen 4
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
J Brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 3
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
V Operatoren Warum kommt nicht das gewünschte Ergebnis dieser Operation? Java Basics - Anfänger-Themen 3
G Lastet dieser Code den Arbeitsspeicher eines Handys aus? Java Basics - Anfänger-Themen 7
B Was passiert in dieser Methode? Java Basics - Anfänger-Themen 3
Nicole1989 Was Bewirkt dieser Java Code? Java Basics - Anfänger-Themen 4
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
J Wo liegt nur an dieser einfachen Bedingung mein Fehler? Java Basics - Anfänger-Themen 8
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
C Warum funktioniert dieser Code nicht? Java Basics - Anfänger-Themen 2
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
F OOP Warum funktioniert dieser Regex? Java Basics - Anfänger-Themen 15
S Was bedeutet dieser ausdruck? Java Basics - Anfänger-Themen 9
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
StrikeTom Was ist an dieser einfachen funktion falsch? Java Basics - Anfänger-Themen 5
M Wieso funktioniert dieser simple Code nicht? Java Basics - Anfänger-Themen 9
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
P Was macht dieser Source code? Java Basics - Anfänger-Themen 5
S OOP Wie muss meine Klasse zu dieser main aussehen? Java Basics - Anfänger-Themen 5
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
H Wie so ein Exception in dieser HashMap? Java Basics - Anfänger-Themen 7
K Was wird in dieser Frage gemeint ? Java Basics - Anfänger-Themen 15
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
G Versteh nicht was an dieser If-Anweisung falsch ist Java Basics - Anfänger-Themen 2
S Ursache dieser Fehlermeldung (access dinied) Java Basics - Anfänger-Themen 3
A Was macht dieser Prgrammteil? Java Basics - Anfänger-Themen 2
B Wieso funktioniert dieser Vergleich nicht? Java Basics - Anfänger-Themen 3
A Welche dieser Schleifen im TableCellRendererist effizienter? Java Basics - Anfänger-Themen 18
A Was ist an dieser Datum-Methode falsch? Java Basics - Anfänger-Themen 5
G Was macht dieser Code? Java Basics - Anfänger-Themen 3
J Was sagt mir dieser Ausdruck? Java Basics - Anfänger-Themen 9
S Brauche hilfe zu dieser AUfgabe Java Basics - Anfänger-Themen 4
M Was ist an dieser case-Anweisung falsch? Java Basics - Anfänger-Themen 2
R Was bewirkt dieser Code? Java Basics - Anfänger-Themen 6
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
B Einfache OCR zur Zahlenerkennung? Java Basics - Anfänger-Themen 6
M Einfache Datenfilterung Java Basics - Anfänger-Themen 15
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
E einfache Frage zu private Java Basics - Anfänger-Themen 26
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben