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