Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Dynamischer Stack. Amortisierte Analyse » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 3 Beiträge
Marvin812

Oh,Gott danke. Dass ich so was nicht gesehen habe.
Das Problem war eigentlich diese aufsummierung für die Laufzeit der aktuellen Größe.
Geometrisch Reihe => Fertig. Vielen dank smile
eulerscheZahl

Die Zweierpotenz brauchst du eigentlich gar nicht (Konstanten - hier der Faktor 2 - spielen in der O Notation keine Rolle).

Für n = 2^k hast du richtig erkannt, dass k mal vergrößert werden muss. Und zwar mit der aktuellen Größe. Dann wirst du mathematisch unsauber.

[latex]\sum_{i=0}^{k} 2^i = 2^{k+1}-1 = 2n-1[/latex]
In der Formel ist die konstante Zeit, wenn nicht vergrößert werden muss, enthalten.
Marvin812 Dynamischer Stack. Amortisierte Analyse

Meine Frage:
Hallo,
ich habe folgendes Problem bezüglich der amorisierten Laufzeitanalyse.
Und zwar:
Man arbeitet mit einem Array-basierten Stack der länge m.
Sollte dieser Stack irgendwann per push() -Methode voll sein, so wird der Stack auf Länge 2m vergrößert, indem man einen neuen Stack der größe 2m erstellt,den alten Stack rüberkopiert und dann den alten mit dem neuen Stack ersetzt.

Ich soll nun folgendes machen:
a) Wort-Case Laufzeit einer Push()-Operation bestimmen und begründen.

b) Zeigen Sie, dass das Einfügen von n Elementen per push() höchsten Zeit O(n) beansprucht. Sie können davon ausgehen, dass n= 2^k eine Zweierpotenz ist. Die intiale Kapazität betragt m=1.



Meine Ideen:
a) Normalerweise würde ich hier sagen, dass die Laufzeit m beträgt, da im schlimmsten Fall das Array voll ist und rüberkopiert werden. Hier wird dann per Schleife m mal das jeweilige Element rüberkopiert => O(m)
Push() selber hat ja eine Laufzeit von O(1),wenn das Array nicht voll ist.


b) Hier weiß ich leider nicht so ganz weiter. Der Tipp mit der Zweiterpotenz hilft jetzt auch nicht so sehr. Außer ,dass ich weiß dass das Array halt für alle nächsten Zweierpotenzen vergrößert werden muss.

Oder hat das hier etwas mit der Amortisierten Analyse zu tun?
Für 2^k Elemente muss ich mein Array k mal vergrößern.
Heißt doch soviel, dass ich k mal eine Laufzeit von jeweils O(m) wobei m hier immer die aktuelle Größe ist und sich damit verändert.
Vor dem Einfügen des letzten Elementes ist das Array irgendwann auf die größe 2^k angewachsen. Heißt es, dass die Laufzeit damit O(k*2^k) = O(k*n) = O(n) beträgt?