Tom: Philosophieproblem zum Thema "Verschieben"

Beitrag lesen

Hello Matthias,

Wenn man jetzt einen ganzen Baum verschieben wollte unter einen anderen Punkt, wie müsste man dann vorgehen?

Angenommen, ich wollte jetzt den Punkt 1.2.4 nebst ggf. vorhandener Unterpunkte komplett verschieben wollen nach 4.2, wie würdet Ihr das machen?

Das kommt ja darauf an, wie du das bisher umgesetzt hast.

Wenn jeder Punkt seine eigene ID hätte und die Nummerierung automatisch erfolgt, wäre jeder Punkt eindeutig zugeordnet durch Elternelement und die Angabe, das wievielte Kind seiner Eltern er ist.

Also bisher

ID 1    (Punkt 1), Elter: 0, Position: 1
ID 17   (Punkt 4), Elter: 0, Position: 4
ID 42   (Punkt 1.2), Elter: 1, Position: 2
ID 4242 (Punkt 1.2.4), Elter: 42, Postion: 4

neu
ID 4242 Elter: 17, Position: 2

Wenn du für die Position reelle Zahlen nähmest, könntest du beim Dazwischenschieben einfach das arithmetische Mittel der Nachbarn nehmen.

Ja, das wäre eine Idee.

Ich habe jetzt hier mal die Variante "Unterordnung" skizziert.

  
  
Verschiebe komplett 1.2.4 nach 4.2  
vorher:  
  
1  
1\.1  
1\.2  
1\.2.4    >--------+  
1\.2.4.3  >------+ |  
????     >----+ | |  
2             | | |  
2\.2.7.8       | | |  
4\.2           | | |  
4\.2.3         | | |  
4\.13.10.1     | | |  
4\.14          | | |  
4\.14.1.2      | | |  
4\.14.2        | | |  
              | | |  
              | | |  
nachher:      | | |  
              | | |  
1             | | |  
1\.1           | | |  
1\.2           | | |  
2             | | |  
2\.2.7.8       | | |  
4\.2.1    <----|-|-+  
4\.2.1.3  <----|-+  
????     <----+  
4\.2.3  
4\.13.10.1  
4\.14  
4\.14.1.2  
4\.14.2  
  

Die hat die Lücke genutzt...

Um 1.2.4 ff auf 4.2 einzufügen postuliere ich mal. Bitte auf logische Fehler prüfen.

Dazu muss man dann wohl auf die Lücke hoffen.
Anderenfalls müsste der vorher dort befindliche Teilbaum auch verschoben werden.

Dazu müssten alle Elemente des Teilbaums um (mindestens) 1 hochgeschoben werden.

Wenn also 4.2 schon belegt ist, müsste aus

4.2.x -> 4.3.x werden
4.3.x -> 4.4.x usw.

solange 4.x.x vorhanden sind.

Ich versuche, diese Funktionen alle als Stored Routines/Procedures abzubilden.

Das Index-Feld ist in Wirklichkeit ein Binärer Index (2 Bytes pro Stufe), daher leicht sortierbar. Die "gepunktete Dezimaldarstellung" dient hier nur unserem Verständnis.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
Die ultimative Seite für Selbermacher