AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortiertet Baum in Java

Ein Thema von MaToBe · begonnen am 30. Apr 2011 · letzter Beitrag vom 30. Apr 2011
Antwort Antwort
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Sortiertet Baum in Java

  Alt 30. Apr 2011, 17:16
Hallo,

vorweg: ich weiß, dass es hier verpönt ist, Aufgaben / Übungen zu posten und dann auf Lösungen zu hoffen, jedoch komme ich bei dieser Übung echt nicht weiter (liegt auch zum Teil daran, dass unser Prof denkt, dass wir deutlich mehr Programmierkenntnisse in Java haben, als wir vom Java-Prof bisher vermittelt bekommen haben.)
Ich fände es nett, wenn mir jemand bei der Lösung helfen könnte, oder mir vielleicht eine Art "Pseudo-Code" geben könnte.
Wenn hingegen mein Topic garnicht wilkommen ist, bitte ich um Entschuldigung und um Löschung..

Aufgabe: Vervollständigen Sie die gegebene Methode insert(key, value) der Klasse SortedTreeNode. (Klassen des Programms und "Erklärungsbild" sind im Anhang).
Miniaturansicht angehängter Grafiken
unbenannt.png  
Angehängte Dateien
Dateityp: zip Aufgabe.zip (10,3 KB, 1x aufgerufen)

Geändert von MaToBe (30. Apr 2011 um 17:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 17:29
Hi,

wo hängt es denn konkret?


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 17:33
Habe mir das gerade mal angesehen, aber paar Worte deinerseits damit man sich nicht in alles reindenken muss wäre hilfreich.

Code:
public void insert(Integer key, String value){
      if(key<this.key)
         this.key = key;
      
      int index = this.search(key);
      
      if(isLeafLevel){
         //insert into leaf
         //TODO: complete code
         insert(index, new SortedTreeLeaf(key, value));
      }
      else{
         //insert into node
         //TODO: complete code
         SortedTreeNode node = new SortedTreeNode(this.isLeafLevel);
         node.key = key;
          //// hier noch irgendwie Value setzten ???
         insert(index, node); //// eigentlich erst prüfen ob voll ? 
         //split if needed
         if(node.isFull()){
            //TODO: complete code
         }
      }
   }
Sebastian

Geändert von geskill (30. Apr 2011 um 17:40 Uhr)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#4

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 18:06
Code:
 if(isLeafLevel){
         //insert into leaf
         //TODO: complete code
         insert(index, new SortedTreeLeaf(key, value));
      }
Damit wird ein neues Blatt mit Key und Value erstellt und an dem Index eingefügt. Aber welche insert-Methode rufst du hier auf? Die 2te Methode verlangt doch einen SortedTree und kein SortedTreeLeaf oder?

Code:
insert(index, node);
Das selbe hier, wo ist den die Insert-Methode, der ich eine node mitgeben kann?
Keine Kritik, ich verstehs nur nicht.

Des weiteren habe ich dies noch in der Aufgabe gefunden, denke das ist für das Splitten wichtig:
Zitat:
Knoten verweisen auf Kind‐Knoten/Blätter in einem bestimmten Wertebereich und haben einen maximalen Füllgrad (Anzahl Kind-Knoten)
Mein Vorschlag sieht so aus:
Code:
public void insert(Integer key, String value){
      if(key<this.key)
         this.key = key;
      
      int index = this.search(key);
      
      if(isLeafLevel){
         //insert into leaf
         //TODO: complete code
         insert(index, new SortedTreeLeaf(key, value));
      }
      else{
         //insert into node
         //TODO: complete code
         SortedTreeNode node = new SortedTreeNode(this.isLeafLevel);
         node.key = key;
         index = this.search(node.key);
         insert(index, new SortedTreeLeaf(key, value);
         //split if needed
         if(node.isFull()){
            //TODO: complete code
         }
      }
   }

Geändert von MaToBe (30. Apr 2011 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 18:32
Hi,
es gibt 2 insert-Methoden (die andere steht über der, die ergänzt werden muss). Wir müssen also nicht wirklich was neues hinzufügen, sondern nur eine Vorauswahl treffen, sprich müssen schauen, ist es nun ein Blatt oder ist es ein Knoten (und bei zu vielen Knoten irgendwie teilen ???).

Die Klasse SortedTreeLeaf (innerhalb SortedTreeLeaf.java) erbt von SortedTree, deshalb kann man auch Objekte davon nutzen (genauso wie SortedTreeNode). Außerdem ist SortedTree nur eine abstrakte Klasse, wird schwer davon ein Objekt zu erzeugen

Wenn es kein Knoten ist braucht man eigentlich auch nicht den Value Wert, sprich man kann SortedTreeNode benutzen. Also mein Ansatz scheint in die richtige Richtung zu weisen. Letztendlich fehlt noch die Sache mit dem Split, also ich hab den Teil noch nicht so durchdrungen...

PS: Dein Ansatz macht für mich kein Sinn, im Teil, wo es um die Knoten geht wird erst ein SortedTreeNode erstellt und dann noch ein SortedTreeLeaf welcher dann hinzugefügt wird. Also mit dem erzeugten SortedTreeNode wird nichts gemacht. Sieht für mich so aus als hättest du in der Vorlesung mehr geschlafen als zugehört

Grüße
Sebastian

Geändert von geskill (30. Apr 2011 um 18:36 Uhr)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#6

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 18:46
Ja, soweit ist es klar. Ich habe die Aufgabe aber so verstanden, dass in den Knoten nur die "key"s stehen (also keine Daten, richtig) und diese dann wiederherum auf die Blätter verweisen, die die Daten enthalten.

Also müsste man doch bei dem else-Fall erst einen Knoten erstellen, diesen an den Baum hängen und dann für diesen Knoten noch ein Blatt erstellen.

Code:
SortedTreeNode node = new SortedTreeNode(this.isLeafLevel);
         node.key = key;
         //hänge Knoten hier irgendwie an Baum, Code fehlt hier noch?!
         index = this.search(node.key);
         //hier wird dann das Blatt erstellt mit den Daten am neu erstellten Knoten
         insert(index, new SortedTreeLeaf(key, value);
Denkfehler?
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 18:55
Code:
//hänge Knoten hier irgendwie an Baum, Code fehlt hier noch?!
index = this.search(node.key);
Das wird doch oben schon gemacht.

Code:
//hier wird dann das Blatt erstellt mit den Daten am neu erstellten Knoten
insert(index, new SortedTreeLeaf(key, value);
Ja ein Blatt, aber wir wollen doch hier Knoten erstellen ^^ ... sprich Blätter sind fertig!


Bevor wir jetzt aber mit "insert" einen Knoten hinzufügen, müssen wir doch prüfen ob es schon voll ist oder erst danach ?
Sebastian
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#8

AW: Sortiertet Baum in Java

  Alt 30. Apr 2011, 19:30
Ersteres stimmt ja.

Code:
//hier wird dann das Blatt erstellt mit den Daten am neu erstellten Knoten
insert(index, new SortedTreeLeaf(key, value);
Ja ein Blatt, aber wir wollen doch hier Knoten erstellen ^^ ... sprich Blätter sind fertig!
Knoten erstellen klar, aber wir müssen doch auch noch irgendwo die Daten berücksichtigen. Wo sind die Blätter fertig? Wenn wir bei der if-Anweisung ins else gehen, dann erstellen wir nur einen Knoten, keine Blätter und keine Daten somit ?!

Bevor wir jetzt aber mit "insert" einen Knoten hinzufügen, müssen wir doch prüfen ob es schon voll ist oder erst danach ?
Laut Übung, soll nach dem Einfügen auf "full" getestet werden, sprich man fügt zu 3 Knoten einen 4ten an, prüft dann und merkt das die
Code:
public static int MAX_SIZE = 3;
3 beträgt und splittet nachträglich Knoten [1,2,3,4] in [1,2] und [3,4]. So zeigt es jedenfalls das Schaubild.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz