Java knihovna pro práci se stromy

Raskal

Java knihovna pro práci se stromy
« kdy: 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
« Poslední změna: 02. 06. 2015, 14:08:36 od Petr Krčmář »


zfvfsadfasdfas

Re:Java knihovna pro práci se stromy
« Odpověď #1 kdy: 02. 06. 2015, 14:49:04 »
DOM

Sten

Re:Java knihovna pro práci se stromy
« Odpověď #2 kdy: 02. 06. 2015, 15:10:17 »
Google Guava

Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #3 kdy: 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

technomaniak



Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #5 kdy: 02. 06. 2015, 16:19:44 »
@technomaniak To je prave ta GUI komponenta, kterou nepotrebuji. Potrebuji spravovat stromovou datovou strukturu, ne GUI.

perceptron

Re:Java knihovna pro práci se stromy
« Odpověď #6 kdy: 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

Ivan

Re:Java knihovna pro práci se stromy
« Odpověď #7 kdy: 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.

Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #8 kdy: 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.

Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #9 kdy: 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.

andy

Re:Java knihovna pro práci se stromy
« Odpověď #10 kdy: 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.

Filip Jirsák nepřihlášený

Re:Java knihovna pro práci se stromy
« Odpověď #11 kdy: 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.

Ivan

Re:Java knihovna pro práci se stromy
« Odpověď #12 kdy: 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.
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.


Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #13 kdy: 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.

Raskal

Re:Java knihovna pro práci se stromy
« Odpověď #14 kdy: 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.