Istnichtschlimm Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Also ich möchte mit Hilfe eines einfachen FIFO Stacks die Tiefe einer Verschachtelung (bsp Klammern) ermitteln.Die Tiefe steht jeweils bei der schließenden Klammer: Bsp: ( ( ) ) Führt zu ( ( 1) 2) Das heißt die innere Klammer hat eine Tiefe von 1 (eben nur sich selbst) und die äußere Klammer eine Tiefe von 2. Hat jmd eine Idee wie man sowas mit einem Stack realisieren kann ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 mit Hilfe eines einfachen FIFO StacksWas soll ein FIFO-Stack sein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 Ups ich meinte LIFO Stack... Ein Stack ist "Stapel" auf den man Werte legen kann. Also man hat die folgenden Aktionen zur Auswahl: push = legt etwas auf die Sptize des Stapels pop = hol den obersten Wert vom Stapel und liefert den Wert peek = liefert den Wert auf der Spitze des Stapels ohne diesen zu entfernen Bsp. push(1),push(2) liefert 2 1 Wenn ich jetzt pop ausführe erhalte ich den obersten Wert also 2. Deshalb die Bezeichnung LIFO (Last in First Out) d.h. was man zuletzt oben drauf gelegt hat bekommt man als erstes wieder zurück... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Ups ich meinte LIFO Stack... Dachte ich mir Ich würde einfach bei "Klammer auf" die neue Tiefe auf den Stack legen, und bei "Klammer zu" die Tiefe wieder vom Stack holen und ausgeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 Naja ich glaube so leicht ist es nicht. Nehmen wir z.b. ({}[()]) dann ergibt sich folgender Baum: http://img228.imageshack.us/img228/2711/unbenanntdcx.jpg D.h. der oberste Knoten bzw das äußerste Klammerpaar () hat eine Tiefe von 3 (sich selbst + 2 Klammerpaare). Weil man das maximum der beiden Unterbäume wählt ist das ganze komlizierter oder nicht ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der_Lampe Geschrieben 19. November 2010 Teilen Geschrieben 19. November 2010 und wo ist jetzt dein problem? bin ich nur zu müde oder funktioniert klotzkopp's methode auch bei deinem beispiel?! :schlaf: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 19. November 2010 Teilen Geschrieben 19. November 2010 Ich hatte das falsch verstanden. Ich dachte, bei der Eingabe ({}[()]) soll ({2}[(3)2]1) herauskommen. Es soll aber wohl ({1}[(1)2]3) sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der_Lampe Geschrieben 19. November 2010 Teilen Geschrieben 19. November 2010 achso also soll praktisch angezeigt werden wie viel klammernpaare sich in dem momentanen klammerpaar befinden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 19. November 2010 Autor Teilen Geschrieben 19. November 2010 achso also soll praktisch angezeigt werden wie viel klammernpaare sich in dem momentanen klammerpaar befinden? Ja....und ich hab immer noch keine Idee wie das gehen soll :upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 20. November 2010 Teilen Geschrieben 20. November 2010 Wie wäre es mit folgendem Schnellschuss: Du hast eine Funktion: ermittleKlammernpaare(). Und statt eines dummen Stacks, benutzt Du eine verkettete Liste. ermittleKlammernpaare:=selbst+ermittleKlammernpaare(next); Und selbst ist bei jedem Element eben 1. E.g. 3 Elemente: Selbst+Selbst+Selbst=3 Suchst Du dann die Tiefe von Element 2, so führst Du eben ermittleKlammernpaare() auf dem zweiten Element aus. Du brauchst dann nur einen Iterator, der durch die Liste an Klammernpaaren wandert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 20. November 2010 Autor Teilen Geschrieben 20. November 2010 Das würde bei meinem Beispiel auch wieder Fehlschlagen^^ Also ich bin jetzt an dem Punkt angelangt wo ich auch auf andere Datenstrukturen als einen Stack zurückgreifen würde... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 20. November 2010 Teilen Geschrieben 20. November 2010 Warum? ( ( ( ) ) ) 3 2 1 War doch das, worauf Du hinauswolltest, oder etwa nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 20. November 2010 Autor Teilen Geschrieben 20. November 2010 Hm also wenn ich dich richtig verstanden habe dann würde ich für die äußerste Klammer von ({}[()]) eine Tiefe von 4 erhalten weil selbst + 3 Klammerpaare = 4 Dabei hat die äußerste Klammer hier eine Tiefe von 3! Sieht man wenn man sich das als Baum vorstellt: http://img228.imageshack.us/img228/2...benanntdcx.jpg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 20. November 2010 Teilen Geschrieben 20. November 2010 (bearbeitet) Das kommt auf Deine Implementation an... Dann hast Du eine Liste, die Listen als Elemente hat. Wenn Du ({}[()]) zerlegst, hast Du in der Äußeren Klammer {1} und (3), in der {1}, in der [2] und der letzten (1). Dann erfolgt die Berechnung mit leicht modifiziertem Algorithmus: 1. Ermittle alle Klammernpaare aller Nachfolgeelemente aller Unterlisten. 2. Gib den höchsten Wert zurück oder, wenn kein Nachfolger da, gib "Selbst" zurück. Statt einer Liste benötigst Du eben einen Baum(Liste mit Listen als Unterelement quasi). Und die Berechnungsfunktion läßt sich prima rekursiv implementieren. Voilà ! Bearbeitet 20. November 2010 von lilith2k3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Istnichtschlimm Geschrieben 20. November 2010 Autor Teilen Geschrieben 20. November 2010 Sorry ich komm grad nicht ganz mit.... Kannst du das ganze als Pseudocode (oder evtl sogar in Java ) schreiben ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 20. November 2010 Teilen Geschrieben 20. November 2010 public class TreeNode { ArrayList<TreeNode> SubNodes = new ArrayList<TreeNode>(); public void AddNode(TreeNode node) { if (node != this) SubNodes.add(node); } public int CalculateLevel() { int Level=1; int MaxSubLevel = 0; int TempLevel=0; if (SubNodes.size()>0){ for(TreeNode item: SubNodes) { TempLevel=item.CalculateLevel(); if (TempLevel > MaxSubLevel) MaxSubLevel=TempLevel; } } else return Level; return Level+MaxSubLevel; } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.