AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Algorithmenproblem: Baum in Liste speichern -> Vater finden?
Thema durchsuchen
Ansicht
Themen-Optionen

Algorithmenproblem: Baum in Liste speichern -> Vater finden?

Ein Thema von JasonDX · begonnen am 18. Feb 2005 · letzter Beitrag vom 18. Feb 2005
Antwort Antwort
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#1

Algorithmenproblem: Baum in Liste speichern -> Vater find

  Alt 18. Feb 2005, 17:51
Ich habe einen Baum mit Tiefe N und jedes element kann beliebig viele Kinder haben
den baum speichere ich mir ganz einfach in einem array
nachdem es nur um den aufbau des Baumes geht, und nicht um den Inhalt der Einzelnen Baumelemente, speichere ich ihn folgendermaßen ab:

den Baum
Code:
0       0
_     /   \
1    1     2
_   / \   / \
2   3 4  5   6
_         \
3          7
speichere ich so ab:
2,2,0,0,2,1,0,0
0,1,3,4,2,5,7,6
Nun die Erklärung:
Im der oberen liste ist das, was ich speichere
in der unteren bloß die indexe der elemente des baumes

ich speichere also bloß die Anzahl der Kinder
(Element 0 hat 2 kinder, als 2 bei liste hinzufügen
dann das selbe für die einzelnen kinder, von links nach rechts)


Und nun das Problem
eine funktion, die mir sagt, ob es sich um einen gültigen baum handelt, und wieviel kinder ein element hat, hab ich
bloß den Vater eines Elementes finde ich nicht.
soweit bin ich schon mal
(das ganze ist, wie man unschwer erkennen kann, in C programmiert)
Code:
int Data[Used]; //da steht dann der baum als liste drinnen

int FindFather(int Index)
{
  int c = 0;
  for (int i = Index - 1; i; i--)
    if (!(c = c - Data[i] + 1))
      return i;
}
Funktionieren tut das ganze dann so, dass ich von links nach rechts laufe, bis ich denke, meinen vater gefunden zu haben.
Den meine ich gefunden zu haben, wenn alle Kinder (Elemente mit 0) vor mir ihren Vater gefunden haben
Wieviele Kinder ihren Vater noch finden müssen, speichere ich in c
Bloß funktioniert die Funktion nicht immer so, wie ich es möchte.
Kann mir hier jemand weiterhelfen?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Algorithmenproblem: Baum in Liste speichern -> Vater

  Alt 18. Feb 2005, 18:24
Um den Vater rausfinden zu können musst Du die Kinder nicht durchzählen sondern nummerieren

0
1 2
3 4 5 6
7 11 14


bei 3 nach rechts folgend wäre dann 8 usw...

(Falls das jetzt mit deiner Problemstellung keinen Sinn macht tuts mir leid...
Habs halt so verstanden)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Algorithmenproblem: Baum in Liste speichern -> Vater

  Alt 18. Feb 2005, 18:40
Ein Baum ist eine Rekursive DatenStruktur. In deinem Beispiel, jedes Element hat ein eigenes Wert und noch 3 , 2 Kinder und 1 Eltern (Nur nuch UrEltern )
Ich wurde ein Element so Deklatieren :
Zitat:
struct tnode {
int Wert ; //beispeil
int Count;
struct tnode *Vater;
struct tnode *Links;
struct tnode *Rechts;
};
Ein Element hinzufühgen:

Zitat:
struct tnode *talloc(void)
{
return (struct tnode*)malloc(sizeof(struct tnode));
}

struct tnode *addtree(struct tnode *p,int w,struct tnode *Vater_)
{
if (p==NULL)
{
p = talloc();
p->Wert = w;
p->Count = 1;
p->Links = p->Rechts = NULL;
p->Vater = Vater_;
}
else
if (w=p->Wert) p->Count++;
else
if (w<p->Wert) p->Left = addtree(p->left, w, p);
else p->Rechts = addtree(p->Rechts,w, p);

return p;
}
Ein element Finden:
Zitat:
BOOL findnode(struct tnode *gefundene,struct tnode *anfangsnode, int w)
{
if (anfangsnode = NULL)
return FALSE;
if (anfangsnode->Wert == w)
/*GEFUNDEN*/
{
gefundene = anfangsnode;
return TRUE;
}
else
if (anfangsnode->Wert < w)
return findnode(gefundene, anfangsnode->Links,w);
else return findnode(gefundene, anfangsnode->Rechts,w);
}
So kannst du einfach zuerst finden was du willst und dann liest einfach wer Vater und Kinder sind.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Algorithmenproblem: Baum in Liste speichern -> Vater

  Alt 18. Feb 2005, 20:29
@atreju2oo0: Nach welchen Regeln sollte ich die durchzählen? Wenn ich sie nach den Indexen wie beim Ursprungsbaum numeriere, versteh ich noch nicht, wie mir das weiterhelfen könnte

@sniper_w: Der Baum mit der ähnlichen Struktur, wie du ihn hast, war meine Ausgangssituation.
Ich bin dann zur Liste gegangen, weil 1. mir die Rekursion zu langsam war und 2. der Speicherbedarf bei größeren bäumen relativ hoch ist im vergleich zur liste


PS: Was ich vergessen hab zu sagen: Es handelt sich NICHT um einen binären baum, sondern beliebig viele Kinder sind pro Element möglich
Mike
Passion is no replacement for reason
  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 08:58 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