Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

tree problem - tj zaobilazenje rekurzije

[es] :: Baze podataka :: tree problem - tj zaobilazenje rekurzije

[ Pregleda: 4037 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon tree problem - tj zaobilazenje rekurzije26.03.2004. u 22:45 - pre 244 meseci
zna li neko "elegantno" resenje za drvo tj simulaciju direktorijuma ako vam je lakse da shavtite sta mi treba. Prosto resenje je rekurzivni upit :) medjutim ja koliko znam to cudo ima samo oracle i DB2 ostatak sveta je tu "supalj". Ima li nekoga sa laganim pristupm koji bi bio brz kasnije za pretragu tj ako navedem jedan element pa da u pretrazi budu ukljuceni i svi njegovi podelementi.
 
Odgovor na temu

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1431
*.dialup.sezampro.yu.

ICQ: 101830817


+314 Profil

icon Re: tree problem - tj zaobilazenje rekurzije26.03.2004. u 23:19 - pre 244 meseci
http://www.elitesecurity.org/tema/46435
"Hmmm", rekao je, "...suprostavlja se nadrealizmu prikrivene metafore..." Razmišljao je tome na trenutak, a onda je zatvorio beležnicu s mrkim osmehom.
"I smrt je za njih suviše dobra"
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.verat.net



+3 Profil

icon Re: tree problem - tj zaobilazenje rekurzije27.03.2004. u 14:17 - pre 244 meseci
Elegantnije resenje se zove nested tree model.



Owl
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.InfoSky.Net

Sajt: localhost


+5 Profil

icon Re: tree problem - tj zaobilazenje rekurzije27.03.2004. u 14:40 - pre 244 meseci
lozanović: (valjda sam sada pogodio prezime.. ;)

ako ti ova linkovana tema nije dovoljna, iznesi detaljnije uslove koji su ti važni, pa da smišljamo najbolje rešenje..

moje iskustvo je slično tamo predloženom, samo što sam ja imao i direktorijume i fajlove (oni koji ne mogu da imaju decu, a imaju više osobina od direktorijuma), tj i grane i listove.

rešenje koje se meni pokazalo najpraktičnije je bilo da imam dve tabele, jednu za direktorijume, drugu za fajlove. fajlovi su preko dir_id-a bili vezani za dirove (znači NE preko celog path-a, već su imali samo ime), a dirovi su imali kolonu parent_id i kompletan path, ali se ispostavilo da mi kolona parent_id nije zatrebala ni jedared, već sam sve radio upoređivanjem (delova) path-a.

naravno, tada pod obavezno ide index na polje dir.path. a ja ti predlažem da ipak održavaš i polje parent_id, možda ti nekad zatreba u budućnosti..

 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: tree problem - tj zaobilazenje rekurzije27.03.2004. u 21:03 - pre 244 meseci
Ne znam kako je iko uspeo da odradi ovo. Ovaj drugi model je bas bez veze, jer gde ste videli root direktorijum sa samo deset foldera !!

Ovo je interesantno resenje recimo ako se krene sa dvocifrenim brojevima na pocetku, recimo, mada i to je opet malo... ali interesantno resenje.

Inace i sam sam radio malo na ovome, zato sto mi je trebalo, ali nisam uspeo nikako da dodjem do rekurzije, jer je algoritam ima oblik strele beskonacne duzine:


]]]]]]
]]]]]]]]]]
]]]]]]]]]]]]]
]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]
sta ovde treba? (ja sam stao kod 5)
]]]]]]
]]]]]]]]]]
]]]]]]]]]]]]]
]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]

Ovo resenje je slicno kao ono sa parentID i sa LevelID (ustvari struktura je ista). Ali je fora kada treba da prikazes sve foldere (ne mora foldere) odjednom.

Sve u svemu problem se svodi na pravljenje fajl sistema pa neko moze da zaviri u Linux Source posto interesuje i mene.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: tree problem - tj zaobilazenje rekurzije28.03.2004. u 00:27 - pre 244 meseci
Smislio sam model koji mi najvise odgovara :) , tj posto mi je mnogo vazno brzo citanje tj tabela nije mnogo velika pa mogu da si priustim luksuz da je tabela sa relacijom malo komplikovanija.

Primer stabla(direktorijuma)
Code:

/mnt
   | hardc
         | mp3 
   | cdrom
   | floppy
 /home
     | dejan
           |.kde

tablea dir ima (ID, ime), i tabela relacija ima (roditelj,dete,dubina)
Code:

dir
ID |  Ime
------------
1   | mnt
2   | hardc
3   |  mp3
4   | cdrom
5   |  floppy
6   |  home
7   |  dejan
8   | .kde


tablea relacija

Code:

idR | idD | dubina
------------------------
1    |  1     |   0
2    |   2    |  0
...
8    |   8     | 0
1    |   2     |  1
1     |   3    |  2
2     |   3    | 1
1     |   4    | 1
1     |  5     | 1
6     |  7     | 1
6     |  8     | 2
7     |  8     | 1

Problem je samo sto se za svaki direktorijum unosi n slogova gde je n njegova dubina. Ali lako dobijate primera radi direktorijume koji su podirektorijumi ili koji su nad direktorijumi datog direktorijuma itd... Vrednosti sa dubinom 0 i nisu morali da se unose ali ovako ubrzavaju stvari jos malo, ne morate sami explicitno da dodajete i taj direktorijum koji trazite ako vam treba.

 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: tree problem - tj zaobilazenje rekurzije28.03.2004. u 00:36 - pre 244 meseci
Citat:
byTer:
Ne znam kako je iko uspeo da odradi ovo. Ovaj drugi model je bas bez veze, jer gde ste videli root direktorijum sa samo deset foldera !!


U sustini moze to da se resi uvodjenjem separatora npr "."
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
195.178.35.*

ICQ: 47761626


Profil

icon Re: tree problem - tj zaobilazenje rekurzije28.03.2004. u 03:35 - pre 244 meseci
Citat:
Dejan Lozanovic:
Citat:
byTer:
Ne znam kako je iko uspeo da odradi ovo. Ovaj drugi model je bas bez veze, jer gde ste videli root direktorijum sa samo deset foldera !!


U sustini moze to da se resi uvodjenjem separatora npr "."


Shvatam. Hvala, bas mi je ovo trebalo.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: tree problem - tj zaobilazenje rekurzije28.03.2004. u 11:36 - pre 244 meseci
pa malo je komplikovanije da dobijes rezultate ako nemas rekurziju, nazalost ja koliko sam upcen samo oracle i db2 imaju mogucnost rekurzivnog upita. Kod ostalih moras da se snalazis kako znas i umes ;)) ukoliko imas potrebu da radis mnogo unosa u samu tabelu onda ces primeniti jedan od gore navedenih primera, a ako pak trebas da radis brzo citanje onda je ovaj moj primer ipak pogodniji(upisujes relaciju svako sa svakim gde god su povezani elementi) to opet jeste malo komplikovano za unos i update ali ces dobiti brze rezultate za pretragu.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: tree problem - tj zaobilazenje rekurzije28.03.2004. u 14:49 - pre 244 meseci
Ja sam ucitavao po nivoima u jedan niz recordseta pa sam iteracijom svaki sa svakim pokusavao da ih povezem po CihldID vezi. A na ovakav nacin nisam mogao da dodjem do rekurzije (ili ne znam).
 
Odgovor na temu

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1431
*.dialup.sezampro.yu.

ICQ: 101830817


+314 Profil

icon Re: tree problem - tj zaobilazenje rekurzije30.03.2004. u 23:35 - pre 244 meseci
pitanje koje mi je palo na pamet kad sam resavao ovo jeste: Da li mi zbilja treba da korisnici posle jednog iscitavanja vide celo stablo???
resenje sa tablom za direktorijume i tabele za fajlove mi se cini veoma jednostavno i efikasno
"Hmmm", rekao je, "...suprostavlja se nadrealizmu prikrivene metafore..." Razmišljao je tome na trenutak, a onda je zatvorio beležnicu s mrkim osmehom.
"I smrt je za njih suviše dobra"
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: tree problem - tj zaobilazenje rekurzije30.03.2004. u 23:46 - pre 244 meseci
Na sta ciljas?
Citat:
Da li mi zbilja treba da korisnici posle jednog iscitavanja vide celo stablo???
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: tree problem - tj zaobilazenje rekurzije31.03.2004. u 14:01 - pre 244 meseci
Citat:
byTer:
Ja sam ucitavao po nivoima u jedan niz recordseta pa sam iteracijom svaki sa svakim pokusavao da ih povezem po CihldID vezi. A na ovakav nacin nisam mogao da dodjem do rekurzije (ili ne znam).

Pa rekurzija i iteracija su ekvivalentne u teoriskom smislu sada dali ces ti to staviti u neku for petlju ili ces tu petlju zameniti pozivom iste funkcije identicna je stvar. Meni je "skupo" da pozivam 10-15 puta select da bi dobio koji su mi sve pod direktorijumi u igri. Pa sam smislio onu foru da napravim relaciju svako sa svakim i na taj nacin rasteretim pozive ka bazi podataka. tj da jednim elegantnim select pozivom dobijem sve sto mi treba jer imacu mnogo vise citanja tih tabela a vrlo retko unos ili izmenu istih.
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.drenik.net



+3 Profil

icon Re: tree problem - tj zaobilazenje rekurzije31.03.2004. u 14:23 - pre 244 meseci
Citat:

Pa rekurzija i iteracija su ekvivalentne u teoriskom smislu sada dali ces ti to staviti u neku for petlju ili ces tu petlju zameniti pozivom iste funkcije identicna je stvar.

Samo su njihovi rezultati ekvivalentni, sve ostalo je bitno drugacije.

Owl
 
Odgovor na temu

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1431
*.dialup.sezampro.yu.

ICQ: 101830817


+314 Profil

icon Re: tree problem - tj zaobilazenje rekurzije31.03.2004. u 20:50 - pre 244 meseci
Citat:
byTer:
Na sta ciljas?
Citat:
Da li mi zbilja treba da korisnici posle jednog iscitavanja vide celo stablo???

ja sam pokusavao nesto slicno, sa malo vecim stablom. na kraju mi je ispalo da je najjednostavnije i najbrze da dam korisniku deo po deo stabla kad zatrazi to. naime kad klikne na neki cvor, ja mu dajem sadrzaj stavki unutar tog cvora. (fazon windows explorera)
"Hmmm", rekao je, "...suprostavlja se nadrealizmu prikrivene metafore..." Razmišljao je tome na trenutak, a onda je zatvorio beležnicu s mrkim osmehom.
"I smrt je za njih suviše dobra"
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: tree problem - tj zaobilazenje rekurzije01.04.2004. u 23:47 - pre 244 meseci
Hm. Ja nameravam da napavim nesto kao on line knjigu gde mi je sadrzaj naravno u obliku stabla i jedan od zahteva je da se vidi ceo sadrzaj ili njegov deo ali kao stablo (izabrana stavka i sve stavke po dubini).

Nisma jos poceo da se konkretno bavim ovim poblemom nego ga premecem po glavi, ali sa radoznaloscu pratim diskusiju.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
195.178.35.*

ICQ: 47761626


Profil

icon Re: tree problem - tj zaobilazenje rekurzije02.04.2004. u 01:27 - pre 244 meseci
Citat:
Dejan Lozanovic:
Citat:
byTer:
Ja sam ucitavao po nivoima u jedan niz recordseta pa sam iteracijom svaki sa svakim pokusavao da ih povezem po CihldID vezi. A na ovakav nacin nisam mogao da dodjem do rekurzije (ili ne znam).

Pa rekurzija i iteracija su ekvivalentne u teoriskom smislu sada dali ces ti to staviti u neku for petlju ili ces tu petlju zameniti pozivom iste funkcije identicna je stvar. Meni je "skupo" da pozivam 10-15 puta select da bi dobio koji su mi sve pod direktorijumi u igri. Pa sam smislio onu foru da napravim relaciju svako sa svakim i na taj nacin rasteretim pozive ka bazi podataka. tj da jednim elegantnim select pozivom dobijem sve sto mi treba jer imacu mnogo vise citanja tih tabela a vrlo retko unos ili izmenu istih.


Pa da ali sa jednim prolazenjem desava se da se ponavljaju nizi nivoi vise puta, evo mog algoritma u VBu, mada jos nisam probao ovaj sa separatorom, za koji mislim da ce biti ono krajnje.
Code:

    Set MaxLevel = conn.execute("SELECT Max(Levl) AS MaxL, Min(Levl) AS MinL FROM Categories WHERE Class="&Categ("CatID"))
    MaxLvl = MaxLevel("MaxL")
    If MaxLvl > 0 Then
      Redim Child(MaxLvl)
    End If
    i = 1
    While i <= MaxLvl
      Set Child(i) = server.CreateObject("ADODB.RecordSet")
      Child(i).LockType = 1
      Child(i).CursorType = 3
      Child(i).ActiveConnection = conn
      Child(i).Source = "SELECT * FROM categories WHERE class = "&Categ("CatID")&" AND Levl = " &i& " ORDER BY class, levl, childID"
      Child(i).Open
      i = i + 1
    Wend
    
      
        Do Until Child(1).EOF
           WriteChild(1)
              If MaxLvl >= 2 Then
              Do Until Child(2).EOF
                 If Child(2)("ChildID") = Child(1)("CatID") Then
                    WriteChild(2)
                       If maxLvl >= 3 Then
                       Do Until Child(3).EOF
                       If Child(3)("ChildID") = Child(2)("CatId") Then
                          WriteChild(3)
                          If maxLvl >= 4 Then
                          Do Until Child(4).EOF
                             If Child(4)("ChildID") = Child(3)("CatId") Then
                                WriteChild(4)
                                If maxLvl >= 5 Then
                                   Do Until Child(5).EOF
                                      If Child(5)("ChildID") = Child(4)("CatId") Then
                                         WriteChild(5)
                                      End If
                                   Child(5).MoveNext
                                   Loop
                                End If
                             End If       
                          Child(4).MoveNext
                          Loop
                          End If
                       End If
                       Child(3).MoveNext
                       Loop
                       Child(3).MoveFirst
                       End If
                 End If    
              Child(2).MoveNext
              Loop
              Child(2).MoveFirst
              End If
        Child(1).MoveNext
        Loop
'''''''''''''''''''''''''''''''
    Categ.MoveNext
    Loop

 
Odgovor na temu

mbabuskov
Milan Babuškov
Subotica

Član broj: 4718
Poruke: 217
*.suoffice.EUnet.yu

Sajt: www.comp.rs/izradasajta


+6 Profil

icon Re: tree problem - tj zaobilazenje rekurzije02.04.2004. u 16:04 - pre 244 meseci
Citat:
Dejan Lozanovic:
pa malo je komplikovanije da dobijes rezultate ako nemas rekurziju, nazalost ja koliko sam upcen samo oracle i db2 imaju mogucnost rekurzivnog upita. Kod ostalih moras da se snalazis kako znas i umes ;)).


MSSQL, Interbase i Firebird imaju rekurzivne stored procedure koje mogu da obave istu stvar.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.vdial.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: tree problem - tj zaobilazenje rekurzije02.04.2004. u 18:39 - pre 244 meseci
pa DB2 i oracle imaju rekurziju unutar samog select poziva bez ugnjezdjenih procedura. Primer DB2 select-a
Code:

with
D(DEO,sadrzi,kol) AS(
VALUES(1,2,7),(1,5,13),(1,4,25),(2,5,14),(2,6,18),(3,6,26),(4,7,21),(6,8,7)
),
potomak(sadrzi,kol) as (
select sadrzi,kol from d where deo=1
union all
select d.sadrzi,d.kol*p.kol from potomak p,d
where p.sadrzi=d.deo
)

select sadrzi,sum(kol) as kol
from potomak
group by sadrzi;



 
Odgovor na temu

[es] :: Baze podataka :: tree problem - tj zaobilazenje rekurzije

[ Pregleda: 4037 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.