Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Raskal 02. 06. 2015, 13:51:22

Název: Java knihovna pro práci se stromy
Přispěvatel: Raskal 02. 06. 2015, 13:51:22
Zdravim vsechny. Doporucite mi prosim nejakou knihovnu (implementaci potrebuji v Jave), ktera by implementovala praci se stromovymi strukturami?
Pozadavky - staci in memory, umoznujici vytvoreni stromove struktury, jeji prochazeni, manipulaci, pripadne transformace a pohledy... jeste se doplnim, ze jeji pouziti planuji pro webove aplikace - z toho plyne rozumne mala a pokud mozno velmi rychla implementace.

Vse, co jsem nasel, bylo bud prilis primitivni a nebo to resilo GUI komponentu.
Dekuji
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: zfvfsadfasdfas 02. 06. 2015, 14:49:04
DOM
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Sten 02. 06. 2015, 15:10:17
Google Guava
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 02. 06. 2015, 15:41:03
Guava neobsahuje pozadovanou funkcionalitu. Mozna jen spatne hledam - mas prosim konkretni odkaz, kde je ukazano, jak se v Guave pracuje se stromovou strukturou?

DOM neni vhodny pro manipulaci se stromovou strukturou, mozna ani v pripade, kdy se jedna o XML. A je to divny, ze...  :o
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: technomaniak 02. 06. 2015, 16:00:24
a co tree od gwt pro web?

http://collectionofdemos.appspot.com/demo/com.google.gwt.demos.fasttree.FastTreeDemo/FastTreeDemo.html
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 02. 06. 2015, 16:19:44
@technomaniak To je prave ta GUI komponenta, kterou nepotrebuji. Potrebuji spravovat stromovou datovou strukturu, ne GUI.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: perceptron 02. 06. 2015, 16:36:26
strela do luftu: MutableTreeNode?

neviem presne co vam treba: ale hacknut nejaku xml libku napr spomenuty dom a pouzivat setUserData: mate k dispozicii xpath, xslt akurat performance sux

alebo nejaku grafovu kniznicu
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Ivan 02. 06. 2015, 17:01:55
Co presne stema stromama chces delat? Grafovy algoritmy, planarni kresleni, ..? Nebyla by na to lepsi scala? Co si tak pamatuju, tak se v Lispu se stromeckama pracovalo docela dobre.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 02. 06. 2015, 23:01:09
@Ivan

Nevim, zda formulace potreby jina od te obecne, kterou jsem jiz popsal, prispeje k lepsimu.

Potrebuji stromy konstruovat, cist je a prochazet (sestav strom z techto zaznamu, dej mi 5. potomka, dej mi nasledujiciho sourozence, jaky je tvuj level zanoreni, ...), manipulovat s nima (pridat uzel, odebrat uzel, presunout uzel, ...), potrebuji je pouzit jako obalku nad daty (napriklad nad existujicimi zaznamy v DB, ze kterych se strom konstuuje), potrebuji se na ne divat z jine perspektivy (filtrace nodu, skladani stromu jako by to byl jeden strom, jine transformace, ...), potrebuji obecneji pracovat s datovymi typy tech dat, ktere uzel stromu reprezentuje (genericky uzel, uzel vi, jak cist informace o sobe z konstrukcnich dat, ...). Strom by mel byt po kazde dokoncene zmene konzistentni. Tomto zpusobem chci zajistit logiku pro stromove datove struktury v backendu webove aplikace.

Takoveto aplikacni vybaveni by melo byt jiz napsane a pripravene k pouziti ve forme knihovny, protoze je dostatecne obecne a domnivam se, ze i poptavka by po nem mela byt - preci si kazdy nebudeme bastlit svou vlastni implementaci stromu.

Ja jiz nejakou svoji implementaci mam, ale nedomnivam se, ze bych v tom mel pokracovat. Kladu si otazku, proc po takove knihovne neni dostatecna poptavka, protoze to vypada, ze nic takoveho, co by se siroce pouzivalo, jeste neexistuje. A nebo jen spatne hledam nebo jinde delam chybu.

@perceptron - pouziti XML jako abstrakce dostatecne obecnych stromovych datovych struktur se mi jevi jako nestastny napad.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 02. 06. 2015, 23:04:52
@Ivan - urcite Java resp. to, co muzu z Javy volat a neni treba nic vedeckeho, jedna se o webove aplikace.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: andy 02. 06. 2015, 23:37:01
Nenajdes nic take, lebo existuju kniznice pre vseobecnejsie struktury a to su grafy. Napr jgrapht. Okrem toho si pozri neo4j ked uz potrebujes taketo veci riesit, mozno objavujes teplu vodu.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Filip Jirsák nepřihlášený 03. 06. 2015, 10:36:11
@perceptron - pouziti XML jako abstrakce dostatecne obecnych stromovych datovych struktur se mi jevi jako nestastny napad.
Všechno to, co popisujete, DOM nad XML splňuje. Takže zřejmě máte ještě nějaké další požadavky, které jste nepopsal – těžko ale hádat, jaké. A bez toho sice můžeme dávat další a další nápady, ale málokdo asi bude mít chuť vám něco navrhovat, abyste to pak vy zamítl s tím, že to neodpovídá vašim požadavkům. Takže by bylo dobré buď ty požadavky popsat všechny, a nebo napsat, co konkrétně řešíte, když to neumíte správně zevšeobecnit.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Ivan 04. 06. 2015, 11:24:47
Pokud jde o ulohy odlisne od tech co se davaji na pisemkach na VS, tak vy se ti mohlo hodit JAXB od Eclipse http://www.eclipse.org/eclipselink/documentation/2.4/moxy/runtime008.htm (http://www.eclipse.org/eclipselink/documentation/2.4/moxy/runtime008.htm).
Tahle implementace JAXB umoznuje "Querying Objects by XPath". Driv jsem z toho byl nadsenej. Umoznuje v Jave "prasit" jako v Perlu.
Tzn. misto toho abych napsal specialni tridu, ktera bude iterovat stromem nejakym zpusobem, tak proste pouziju "one-line" XPATH vyraz presne tam kde ho potrebuju. Pak moje nadseni trochu opadlo, protoze to tehdy nebylo uplne 100% funkcni.

Dalsi co by se ti mohlo hodit je ANTR/StringTemplate. To je ale vyssi uroven a vyzaduje to hodne uceni. ANTLR umi (mimo jine) TreeParser. Deklarativne popises gramatiku stromu o ono to udela "pattern-match" nad celym stromem (nemusi to byt nutne AST). Je to takovy obecnejsi Visitor design pattern.

Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 04. 06. 2015, 11:42:37
@andy

Dekuji za tip na jgrapht, rozsirim si obzory  :).

> vseobecnejsie struktury a to su grafy
Stromova struktura si jako specializace obecneho grafu zaslouzi i specializaci v navrhu API a jeho implementaci.

neo4j nepouziji, budu se drzet mainstramu a to kvuli zakaznikum, kteri to pozaduji a je to pro ne dobra volba.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 04. 06. 2015, 12:23:26
@Filip Jirsák

Potrebuji relativne nizkourovnove API pro konstrukci, manipulaci a cteni stromovych datovych struktur.

Citace
Potrebuji stromy konstruovat, cist je a prochazet (sestav strom z techto zaznamu, dej mi 5. potomka, dej mi nasledujiciho sourozence, jaky je tvuj level zanoreni, ...), manipulovat s nima (pridat uzel, odebrat uzel, presunout uzel, ...), potrebuji je pouzit jako obalku nad daty (napriklad nad existujicimi zaznamy v DB, ze kterych se strom konstuuje), potrebuji se na ne divat z jine perspektivy (filtrace nodu, skladani stromu jako by to byl jeden strom, jine transformace, ...), potrebuji obecneji pracovat s datovymi typy tech dat, ktere uzel stromu reprezentuje (genericky uzel, uzel vi, jak cist informace o sobe z konstrukcnich dat, ...). Strom by mel byt po kazde dokoncene zmene konzistentni. Tomto zpusobem chci zajistit logiku pro stromove datove struktury v backendu webove aplikace

Nevim jak jeste lepe bych to mel popsat, tak to zkusim jeste jinak: Mam nejaka data (konkretne uvedu treba zaznamy z DB, ale obecne data), ve kterych je zakodovana stromova struktura. Nad nimi si potrebuji zkonstruovat strom (opet nerikam konkretne jak, to je urceno znalosti tech dat) a vyuzit sluzeb nad stromy, ktere mam diky te knihovne k dispozici. Modifikace toho stromu mi zaroven modifikuji ta data a na konci ta pripadne modifikovana data ulozim (nebo jinak pouziji). Vse potrebuji resit v case v radu ms pro kazdy jeden pozadavek od klienta.

Proc to chci takto resit - snazim se o vydestilovani stromy z aplikacni logiky.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 04. 06. 2015, 12:45:37
@Ivan

Citace
Pokud jde o ulohy odlisne od tech co se davaji na pisemkach

Ano, jsem jiz ponekud dal :-).

Citace
...se ti mohlo hodit JAXB

JAXB pouzivam a obcas se hodi, kdyz clovek netrva na bezpecnem refaktoringu kodu. Hodi se treba ve fazi prototypovani obsluhy slozitych datovych struktur.

Citace
Dalsi co by se ti mohlo hodit je ANTR/StringTemplate. To je ale vyssi uroven a vyzaduje to hodne uceni. ANTLR umi (mimo jine) TreeParser. Deklarativne popises gramatiku stromu o ono to udela "pattern-match" nad celym stromem (nemusi to byt nutne AST). Je to takovy obecnejsi Visitor design pattern.

Diky za tip, podivam se na to. Trochu mam obavu, ze zavislost na konkretnim resenem problemu bude vyssi, nez aby to slo separatne pouzivat.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: F. 04. 06. 2015, 12:46:09
Neo4j neni zadna hipster databaze, ale odladenej tool s historii pres 10 let (ze maji posledni dobou hype je jen bonus..).

Po precteni toho co chces delat by pro me neo4j byla jasna volba. Umi to bezet embedded a pripadne i in-memory (to se teda pouziva pro testy..). Vezme si to par desitek MB pameti, ale to se v java webovce ztrati.

>filtrace nodu, skladani stromu jako by to byl jeden strom, jine transformace, ...

Cypher (dotazovaci jazyk neo4j) je specialne tvoreny na manipulace/prochazeni/transformace/agregace grafu (coz strom je) - idealni nastroj.

Jinak pokud chces fakt "knihovnu na stromy" tak co toto? https://code.google.com/p/concurrent-trees/


Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Ivan 04. 06. 2015, 13:12:24
Citace
...se ti mohlo hodit JAXB
JAXB pouzivam a obcas se hodi, kdyz clovek netrva na bezpecnem refaktoringu kodu. Hodi se treba ve fazi prototypovani obsluhy slozitych datovych struktur.

JAXB je v tomhle pripade "nutne zlo". Tim benefitem je deklarativni XPATH vyraz, ktery vytvori iterator na stromovou strukturou objektu.
Název: Re:Java knihovna pro práci se stromy
Přispěvatel: Raskal 04. 06. 2015, 13:43:48
Neo4j neni zadna hipster databaze, ale odladenej tool s historii pres 10 let (ze maji posledni dobou hype je jen bonus..).

Po precteni toho co chces delat by pro me neo4j byla jasna volba. Umi to bezet embedded a pripadne i in-memory (to se teda pouziva pro testy..). Vezme si to par desitek MB pameti, ale to se v java webovce ztrati.

>filtrace nodu, skladani stromu jako by to byl jeden strom, jine transformace, ...

Cypher (dotazovaci jazyk neo4j) je specialne tvoreny na manipulace/prochazeni/transformace/agregace grafu (coz strom je) - idealni nastroj.

Jinak pokud chces fakt "knihovnu na stromy" tak co toto? https://code.google.com/p/concurrent-trees/

Diky za tip. Radix a Postfix stromy jsou sice specializaci prace se stromy, ale i tak to bude jiste inspirativni.