[ sigma**2 @ 04.09.2008. 10:42 ] @
Moze i teoretsko objasnjenje, ali meni treba java implementacija.
Evo o cemu se radi
Imam mnogo objekata klase koja npr. izgleda ovako

Code:

class Klasa{
int donji;
int gornji;
.
.
.
}


Ako mi objekti imaju za donji-gornji vrednosti npr. (3-5) i (6-10) zelim da ta dva objekta spojim u jedan sa vrednostima 3-10.
Ako nusi sukcesivni po ovom principu, onda nista, ostaju dve instance.

Problem je lako resiv da radi, ali meni treba da bude efikasan. Naime kada imam ukupno preko 10000 takvih objekata (pazi, nema preklapanja, samo mozda ima "rupa" u intervalima) radi mi mnogo sporo.

Naime, moja logika da ih sortiram pa da uporedjujem prvi sa sledecim i tako dalje, mi pravi problem jer sam sve objekte stavio u Vector, a nakon poredjenja, ako uradim spajanje (prvo objektu stavim vrednost gornji iz drugog objekta),
tada mi brisanje drugog objekta iz Vectora smeta (brisanje ne valja ni sa Enumeration ni sa Iterator).

U tom slucaju krecem ispocetka, i zato mi je sve uzasno sporo.
Moze li neko da me posavetuje ?


** greska u naslovu teme treba da pise sukcesivnih **











[ zmau @ 04.09.2008. 15:26 ] @
Zanimljiv problem. Šteta što nemam lufta da ga ozbiljnije proučim.
A na brzaka :
Citat:
Naime, moja logika da ih sortiram pa da uporedjujem prvi sa sledecim

Ako bi uporedo sortirao i poredio, verovatno bi uštedeo na vremenu. Znači, pre nego što umetneš item na odgovarajuće mesto, ti mu ponudiš spajanje sa prethodnim i sledećim.
Inače, da li se dešava da se intervali preklapaju međusobno ? To može da ti oteža sortiranje.

Citat:
sam sve objekte stavio u Vector

Možda bi trebao da isprobaš neku malko moderniju klasu. LinkedList mi zvuči baš kao da je njen kum hteo da naglasi da brzo radi brisanje i umetanje.
[ river @ 04.09.2008. 16:32 ] @
Pronadji u literaturi union-find algoritam. Problem lici na klasican
network connectiviti problem.
[ Java Beograd @ 05.09.2008. 08:42 ] @
Neka modernija kolekcija je svakako ok.
Ali evo par smernica:
1. Kako sortiraš ? U attachment-u dajem klasu koja radi voma brzi sort po quick sort algoritmu. Ja sam samo malo to doterao i prilagodio sebi. Sve što je potrebno je da tvoja klasa implementira priloženi interfejs ISortable. Snaći ćeš se već. Ako se ne snađeš, pitaj.

2. Brisanje iz vektora je do jaja "skupa" operacija. Zato, kad klasu obradiš, (ma šta to značilo) lepo je smesti u novi vektor, i na kraju stari vektor prepustiš đubretarcu. To je znano efikasnije nego brisanje elementa u vektoru.
[ Java Beograd @ 05.09.2008. 11:54 ] @
Uostalom, zašto krećeš iz početka vektora posle svake izmene ? Nastavi dalje, pa kad stigneš do kraja, onda od početka. Postavi neki flag na početku, koji ćeš da promeniš ako je bilo spajanja objekata, a ako je flag nepromenjen - posao je gotov.
[ sigma**2 @ 06.09.2008. 11:13 ] @
Hvala svima na trudu.
Sto se tice sortiranja koristim java interface Comparable i Collections.sort(), pretpostavljam da im je algoritam dovoljno dobar, da bi bilo pretenciozno da pravim neki svoj bolji.
Posto je inicijalno moj vector vec "skoro" sortiran bojim se da u tim slucajevima quick sort ne pokazuje svoju prednost u odnosu na ostale algoritme (cak mislim da je shell-sort tada bolji, ali ovo nije tema).

Slazem se sa JavaBeograd da je brisanje objekta iz Vector-a sporo.
Sve predloge sam jos ranije isprobavao, pre nego sto sam postovao problem, pa sam i radio sa novim vektorima, pa sam cak i objekte "flegovao" da li su jos u upotrebi ili ne, ali nikako da dodjem do zadovoljavajuce brzine.
Sada surfujem i trazim "union-find" algoritam, kako mi je predlozeno, mozda cu tu naci ono sto mi treba.
U svakom slucaju, hvala.
[ Java Beograd @ 08.09.2008. 08:16 ] @
Ajde okači neki fajl sa nekim vrednostima od kojih bi se generisao inicijalni skup objekata. Dakle negde oko 10.000 vrednosti koji bi se kasnije procesirali. Baš sam se nešto naložio da probam. Nešto gotivim takve problemčiće, tipa optimizacija i slično.