Hey Leute!
Folgendes Problem:
-ich habe eine Collection mit irgendwelchen (teilweise "gleichartigen" d.h. x.equals(y)==true) Elementen
-Es gibt eine Operation die zwei elemente dieser Collection zu einem kombinieren (Summation)
-Es gibt eine Ordnung (durch Comparator gegeben)
Frage: wie bekomme ich eine sortierte Menge von zu jeweils einem element kombinierten Äquivalenzklassen?
Anschaulich: ich will sowas wie "2ab+7c+8ab" schnell zu "10ab+7c" zusammenrechnen können.
Meine bisherigen Ideen:
1) Alle elemente zu sortieren, und dann nochmal über die liste drübergehen, und dann nacheinanderfolgende gleichwertige elemente aufaddieren. Wäre ein aufwand von O(n log(n) + n) wobei mich das "+n" sehr nervt, weil's eigentlich umsonst ist, und der vergleich auch nicht grade atomar & primitiv ist.
2) TreeSet irgendwie so umfunktionieren, dass er mir zumindest mal die äquivalenzklassen rausspuckt.
Problem: das ist ein Set, der wird doppelt vorkommende Elemente aussortieren
3) Irgendsowas Tree-Set ähnliches schreiben, das für dieses Kombinieren zuständig ist. Sollte schneller als in O(nlog(n)) laufen, allerdings habe ich grad wenig Lust so ein Tree-Set zu implementieren.
Falls jemand bessere Vorschläge hat, bitte melden.
Da ich nicht daran glaube, dass jemals etwas passiert, was konkret mir alleine das Leben einfacher macht, fange ich schonmal mit der 3. Variante an :autsch: ^^
greetz, Andrey
Folgendes Problem:
-ich habe eine Collection mit irgendwelchen (teilweise "gleichartigen" d.h. x.equals(y)==true) Elementen
-Es gibt eine Operation die zwei elemente dieser Collection zu einem kombinieren (Summation)
-Es gibt eine Ordnung (durch Comparator gegeben)
Frage: wie bekomme ich eine sortierte Menge von zu jeweils einem element kombinierten Äquivalenzklassen?
Anschaulich: ich will sowas wie "2ab+7c+8ab" schnell zu "10ab+7c" zusammenrechnen können.
Meine bisherigen Ideen:
1) Alle elemente zu sortieren, und dann nochmal über die liste drübergehen, und dann nacheinanderfolgende gleichwertige elemente aufaddieren. Wäre ein aufwand von O(n log(n) + n) wobei mich das "+n" sehr nervt, weil's eigentlich umsonst ist, und der vergleich auch nicht grade atomar & primitiv ist.
2) TreeSet irgendwie so umfunktionieren, dass er mir zumindest mal die äquivalenzklassen rausspuckt.
Problem: das ist ein Set, der wird doppelt vorkommende Elemente aussortieren
3) Irgendsowas Tree-Set ähnliches schreiben, das für dieses Kombinieren zuständig ist. Sollte schneller als in O(nlog(n)) laufen, allerdings habe ich grad wenig Lust so ein Tree-Set zu implementieren.
Falls jemand bessere Vorschläge hat, bitte melden.
Da ich nicht daran glaube, dass jemals etwas passiert, was konkret mir alleine das Leben einfacher macht, fange ich schonmal mit der 3. Variante an :autsch: ^^
greetz, Andrey