MergeSort iterativ mit Hilfe von Stack

Status
Nicht offen für weitere Antworten.
F

From T to tha INA

Gast
Ich soll MergeSort mit hilfe eines Stack, Stapel, Keller (wie auch immer ihr es nennt) implementieren, indem ich zur verwaltung der rekursion diesen stack benutze. aber ich weiß nicht so recht wie das geht...
 
S

SlaterB

Gast
also was ein Stack und MErgeSort an sich sind weiß du hoffentlich,


hmm, spontan überlegt wie man den Stack irgendwie bei der Rekursion verwenden könnte:
Beispiel mit 8 Zahlen, am Anfang liegen die alle unsortiert übereinander im Stack

Code:
Stufe 1 beginnt, soll 8 Zahlen sortieren,
ruft erstmal Stufe 2 auf mit Paramter 4

  Stufe 2 beginnt, soll 4 Zahlen sortieren,
  ruft erstmal Stufe 3 auf mit Paramter 2

    Stufe 3 beginnt, soll 2 Zahlen sortieren,
    nimmt die beiden Zahlen von Stack runter und legt sie in der richtigen Reihenfolge zurück

  Stufe 2 wieder, Hälfte der 4 Zahlen sind sortiert,
  nimmt alle 4 runter, legt die beiden sortierten wieder drauf, die beiden noch unsortieren ganz oben drauf
  und ruft wieder Stufe 3

    Stufe 3 beginnt, soll 2 Zahlen sortieren,
    nimmt die beiden Zahlen von Stack runter und legt sie in der richtigen Reihenfolge zurück

  Stufe 2 wieder, nimmt die 4 vom Stack (die ersten beiden sortiert, die hinteren beiden auch)
  sortiert nun alle 4 und legt sie in der richtigen Reihenfolge in den Stack

Stufe 1 beginnt, die 4 oberen Zahlen im Stack sind sortiert, die unteren 4 nicht,
alle 8 runternehmen, die 4 sortierten nach unten, die 4 unsortierten oben drauf
und Stufe 2 darf wieder genau das gleiche tun..

am Ende alle 8 runter, zusammenmergen und fertig

beliebig erweiterbar auf n Stufen, bei ungerader (Teil-) Anzahl muss man wohl ein bisschen aufpassen
 
F

From T to tha INA

Gast
ich hab vergessen zu erwähnen, dass ich ein iteratives mergesort implementieren soll.

Auszug aus der Aufgabenstellung:
"Man kann eine rekursive FUnktion in eine iterative FUnktion umwandeln, indem man zur Verwaltung der Rekursion einen Keller benutzt. Implementieren SIe ein iteratives Merge-SOrt unter Verwendung einer eigenen Implementierung des ADT Keller"
(Keller hab ich schon implementiert)
 
S

SlaterB

Gast
ja, 'iterativ' lese ich jetzt auch gerade in der Überschrift,
also den Parameter wieviel Zahlen jede Stufe sortieren soll kann man noch oben auf den Stack drauftun,
aber nach rekursiven Aufruf einer Operation siehts immer noch ein bisschen aus,

falls das nicht erlaubt ist muss dann eben eine while-Schleife herhalten und mehr Info über den Bearbeitungsszustand jeder Stufe auf den Stack,

das käme dann bald einer normalen Implementation eines beleibigen Programmes nahe
bisschen langweilig und wenig spezifisch für Mergesort, jedes Programm der Welt funktioniert nach dem Prinzip:
einfach alle lokalen Informationen über die eigene Operation auf den Stack, Trennzeichen und dann die Parameter für die nächste Operation
und nächste Operation aufrufen, in diesem Fall einfach die nächste Runde in einer while-Schleife,
wenn der Kontrollfluß sehr viel später zum Aufrufer zurückgekehrt ist stehen an Stelle der Parameter die Ergebnisse des Ausrufs
(und dahinter im Stack ja die lokalen Daten der Operation die auch benötigt werden)
 
F

From T to tha INA

Gast
ich weiß nicht ganz genau was du damit meinst... irgendwie verstehe ich nicht in wiefern der stack hier eingesetzt werden soll. kannst du mir vielleicht irgendwie ein pseudocode-fragment erstellen...
 
S

SlaterB

Gast
was meinst du denn, meine erste Idee die schon extrem Pseudo ist oder die zweite?
die zweite wär auch nicht viel anders

Code:
Stufe 1 beginnt, soll 8 Zahlen sortieren,
ruft erstmal Stufe 2 auf mit Paramter 4 (speichere alle lokalen Daten, etwa die 8 Zahlen, dass die Stufe 1 
genau 8  Zahlen bearbeteit, dass bisher noch keine sortiert sind usw. in den Stack, dahinter die 4 Zahlen 
für die nächste Stufe + die Info dass es genau vier Zahlen sind falls man das nicht direkt aus dem Stack 
erkennen kann (z.B. ein festes Trennsymbol nach den 4 Zahlen))

  Stufe 2 beginnt, soll 4 Zahlen sortieren (dass muss aus dem Stack irgendwie ersichtlich sein),
  ruft erstmal Stufe 3 auf mit Paramter 2 (alle lokalen Daten speichern)

    Stufe 3 beginnt, soll 2 Zahlen sortieren,
    nimmt die beiden Zahlen von Stack runter und legt sie in der richtigen Reihenfolge zurück

  Stufe 2 wieder, (muss jetzt erstmal die lokalen Daten auslesen um zu erkennen ob diese Stufe gerade
  erst gerufen wurde oder bereits in der Mitte der Bearbeitung steht, ob also bereits ein oder zweimal 
  Stufe 3 ausgeführt wurde oder nicht)
  Hälfte der 4 Zahlen sind sortiert, 
  nimmt alle 4 runter, legt die beiden sortierten wieder drauf, die beiden noch unsortieren ganz oben drauf 
  (voher die lokalen Daten)
  und ruft wieder Stufe 3

    Stufe 3 beginnt, soll 2 Zahlen sortieren,
    nimmt die beiden Zahlen von Stack runter und legt sie in der richtigen Reihenfolge zurück

  Stufe 2 wieder, nimmt die 4 vom Stack (die ersten beiden sortiert, die hinteren beiden auch)
  (außerdem die lokalen Daten einlesen, daraus erkennt diese Stufe, dass diese 4 Zahlen bereits sortiert sind!)
  sortiert nun alle 4 und legt sie in der richtigen Reihenfolge in den Stack

Stufe 1 beginnt, (lokale Daten lesen usw.) die 4 oberen Zahlen im Stack sind sortiert, die unteren 4 nicht,
alle 8 runternehmen, die 4 sortierten nach unten, die 4 unsortierten oben drauf
und Stufe 2 darf wieder genau das gleiche tun..

am Ende alle 8 runter, zusammenmergen und fertig 

----------------

umgesetzt wäre das etwa so eine while-Schleife:

while (!fertig) {
    1. lese Daten vom Stack, erkenne welche Stufe gerade läuft, welche Zahlen, ob es nur Parameterzahlen sind
    oder auch lokale Daten, also ob diese Stufe gerade beginnt oder schon zwischendurch andere aufgerufen hat
    
    2. entscheide was als nächstes zu tun ist und diese Aktion vorbereiten (mögliche Aktionen u.a.: rufe entweder 
    direkt nächste Stufe, oder sortiere direkt die beiden Zahlen im Stack oder tausche die sortierte mit der 
    unsortierten Hälfte und rufe zum 2. Mal die nächste Stufe oder merge die beiden sortieren Teilisten zusammen),

    am Ende jeweils die lokalen Daten + Parameter für den Aufruf einer höheren Stufe ODER den Rückgabewert 
    an eine niedrigere Stufe in den Stack schreiben und zur nächsten Runde in der while-Schleife übergehen,
    da beginnt dann die nächste Runde
    (Spezialfall: falls Ende von Stufe 0 erkannt: Variable fertig auf true setzen)
}

eigentlich ist ja sowas zu erkennen die Aufgabe..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I MergeSort iterativ mit Stacks Java Basics - Anfänger-Themen 13
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
H Mergesort aufwand berechen Java Basics - Anfänger-Themen 5
L Methoden Mergesort methode Java Basics - Anfänger-Themen 4
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
A Rekursion (anhand von Mergesort) nachvollziehen Java Basics - Anfänger-Themen 4
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Mergesort Probleme Java Basics - Anfänger-Themen 4
I Mergesort mit ArrayList Java Basics - Anfänger-Themen 4
C Mergesort Java Basics - Anfänger-Themen 4
H MergeSort (für Anfänger ) Java Basics - Anfänger-Themen 9
N MergeSort Java Basics - Anfänger-Themen 8
M MergeSort - Zahlen verschwinden Java Basics - Anfänger-Themen 2
P MergeSort mit Liste Java Basics - Anfänger-Themen 4
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
B Methoden Natural Mergesort Java Basics - Anfänger-Themen 2
P Mergesort || 2 SetLists mischen Java Basics - Anfänger-Themen 2
P Mergesort (zyklische Liste) Java Basics - Anfänger-Themen 2
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
N MergeSort mit Liste Java Basics - Anfänger-Themen 8
P Probleme bei codierung von MergeSort Java Basics - Anfänger-Themen 4
M MergeSort - Threads in Anwendung bremsen alles! Java Basics - Anfänger-Themen 4
Houly Mergesort Java Basics - Anfänger-Themen 4
M Mergesort Java Basics - Anfänger-Themen 11
C MergeSort Problem Java Basics - Anfänger-Themen 5
B mergesort/rekursion Java Basics - Anfänger-Themen 9
wuerg Türme von Hanoi Iterativ Java Basics - Anfänger-Themen 8
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
T Methoden Fibunacci Iterativ Java Basics - Anfänger-Themen 6
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
H Suchbaum iterativ absteigen? Java Basics - Anfänger-Themen 3
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
P QuickSort iterativ Java Basics - Anfänger-Themen 5
M Rekursion Iterativ ausdrücken Java Basics - Anfänger-Themen 3
B Begriff Iterativ Java Basics - Anfänger-Themen 2
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
X Türme von Hanoi - Iterativ Java Basics - Anfänger-Themen 8
T funktion iterativ Java Basics - Anfänger-Themen 4
I Iterativ <-> Rekursiv in Java Java Basics - Anfänger-Themen 11
B von rekursiv zu iterativ Java Basics - Anfänger-Themen 6
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
H pdf stempel - Hilfe erbeten Java Basics - Anfänger-Themen 6
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
F RegEx Hilfe Java Basics - Anfänger-Themen 5
S Hilfe bei Endlosschleife Java Basics - Anfänger-Themen 2
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
U Ich bräuchte Hilfe Java Basics - Anfänger-Themen 1
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
aero043 Hilfe bei BlueJ Hausübung Java Basics - Anfänger-Themen 27
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
P Hilfe gesucht Java Basics - Anfänger-Themen 11
D Hilfe bei Calculator Test Java Basics - Anfänger-Themen 15
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Zentriks Hilfe zu Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 5
R Java Bücher hilfe Java Basics - Anfänger-Themen 9
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
I Scheduling: "Quartz" verwenden, Hilfe bei Umstellung Java Basics - Anfänger-Themen 3
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
SpiritsHuner Hilfe!! Java Basics - Anfänger-Themen 16
Lacotto Java Kurs Aufgaben Hilfe Java Basics - Anfänger-Themen 14
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
Neuling47 Denkfehler? Hilfe Java Basics - Anfänger-Themen 11
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Bitte um Hilfe muss es schnellstmöglich erledigen Java Basics - Anfänger-Themen 15
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Neuling47 bräuchte dringend hilfe Java Basics - Anfänger-Themen 6
D Bräuchte Hilfe im Bezug zum printarray() Java Basics - Anfänger-Themen 4
M Bitte um Hilfe bei 2DArrays Java Basics - Anfänger-Themen 8
HeiTim Array hilfe Java Basics - Anfänger-Themen 14
M LCD-Ziffern-Hilfe Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben