java - 对等价类的元素进行分组的数据结构

标签 java algorithm language-agnostic data-structures equivalent

我必须实现一个数据结构来对等价类的元素进行分组。

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]]

我正在寻找一个最多可处理约 1000 万个条目的实现。应该对其进行优化以填充它并获得一次等价类。

最佳答案

看看Union-Find .并集(“相同”)可以在 O(log N) 中轻松完成,并且可以通过一些优化在 O(1) 中有效地完成。 “equivalenceClasses”是 O(N),这是无论如何访问所有内容的成本。

关于java - 对等价类的元素进行分组的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400527/

相关文章:

language-agnostic - 现代语言 “Automated”的编程概念

language-agnostic - Grand Central 与并行扩展

language-agnostic - 如何向非技术人员解释 API?

java - java+python+ruby的持续构建框架?

java - 在数组中查找多对(两对和/或葫芦)

java - 我如何检查 @PreAuthorize 正在查看哪些角色?

algorithm - 如何从if语句中选择重复的代码?

Java 检查空对象意外行为

regex - 反向应用的正则表达式会产生相同的匹配吗?

c++ - 找到具有 3 个变量的丢番图方程的一个特定解和解的数量的有效算法