[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Potrzebny algorytm, funkcja rekurencyjna, struktura drzewiasta

Sowiecki_Agent

4/30/2007 3:40:00 PM

Witam!
Otoz przechowuje w bazie pewe elemmenty, struktura wyglada tak:

id|id_parent|id|child|ilosc (w id_parent, id_child trzymam elemnty z
talicy elementy)

drzewo moze mec kilk arozgalezien, nieokrsloan liczbe poziomow.
No i musze dysponujac tylko id_Parent uzyskac id_childy (wszystkie znajdujace
sie na samym dole) przy czym ilosc po kazdym kroku schodzenia w dol musi byc
przemnozona . np,

jezlei drzewo wygalda tak

X
| |
Y(2) Z(3)
| |
C(2) f(8)

musze otrzymac wynik (podajac id X-a)

c (4), f (16), z(3)

nie mam pomyslu jak to zrelizowac, nie potrafie myslec rekurencyjnie, a nie
wydaje mi sie zeby inaczej mozna bylo to osiagnac. Mysalem n apoczatkunad
procedura rekurencyjna w bazie ale zrobie ja na poziomie programu, prosze o
pomoc, w jakimkolwiek jezyku , przerobie sobie (no byle by nie byl to asm :) )

pozdrawiam

--
Wys3ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta....
1 Answer

Artur

4/30/2007 10:11:00 PM

0


"Sowiecki_Agent" <przemyslaw.rokicki.WYTNIJ@gazeta.pl> wrote in message
news:f152ji$6ab$1@inews.gazeta.pl...
> Witam!
> Otoz przechowuje w bazie pewe elemmenty, struktura wyglada tak:
>
> id|id_parent|id|child|ilosc (w id_parent, id_child trzymam elemnty z
> talicy elementy)
>
> drzewo moze mec kilk arozgalezien, nieokrsloan liczbe poziomow.
> No i musze dysponujac tylko id_Parent uzyskac id_childy (wszystkie
> znajdujace
> sie na samym dole) przy czym ilosc po kazdym kroku schodzenia w dol musi
> byc
> przemnozona . np,
>
> jezlei drzewo wygalda tak
>
> X
> | |
> Y(2) Z(3)
> | |
> C(2) f(8)
>
> musze otrzymac wynik (podajac id X-a)
>
> c (4), f (16), z(3)
>

zakladajac ze masz zbudowane juz drzewo gdzie kazdy wezel jest klasy Node:

class Node
{
int id;
public int ilosc;
public Node[] Children;
}

i jezeli masz zadeklarowana globalnie jakas strukture gdzie bedziesz
przechowywal li¶cie (znaczy wezly nie majace dzieci), np. zwyklego stringa

string wynik="";

Jesli nastepujaca metode wywolasz tak
Mnoz(korzenDrzewa, 1);
to w stringu "wynik" bedzie ciag par (id liscia, liczba)

void Mnoz(Node n, int mnoznik)
{
if (n.Children.Length == 0) /
{
// natrafilem na lisc (wezel znajdujacy sie na samym dole)
wynik += "("+ n.id +","+n.ilosc*mnoznik+")"; //zapamietuje go
}

foreach (Node child in n.Children)
{
Mnoz(child, mnoznik * n.ilosc);
}
}

Jest to zwykle przchodzenie drzewa "w glab" z tym ze w parametrze "mnoznik"
pamietasz iloczyn wszystkich pol "ilosc" z wezlow od korzania az do danego
liscia.

Pozdrawiam, A.B.