Мне нужно реализовать структуру данных, которая группирует элементы классов эквивалентности.
API:
interface Grouper<T>{
void same(T l, T r);
Set<EquivalenceClass<T>> equivalenceClasses();
}
interface EquivalenceClass<T>{
Set<T> members();
}
Например, группировка ведет себя так:
Grouper g;
g.same(a, b);
g.equivalenceClasses() -> [[a,b]]
g.same(b, a);
g.equivalenceClasses() -> [[a,b]]
g.same(b, c);
g.equivalenceClasses() -> [[a,b,c]]
g.same(d, e);
g.equivalenceClasses() -> [[a,b,c], [d,e]]
g.same(c, d);
g.equivalenceClasses() -> [[a,b,c,d]]
Я ищу реализацию, которая работает до ~ 10 миллионов записей.Он должен быть оптимизирован, чтобы заполнить его и получить классы эквивалентности один раз.