我想开发一种有效的算法,它将对元组列表进行分组,如下所示:
public class Tuple<T, R> {
private final T left;
private final R right;
public Tuple(T left, R right) {
this.left = left;
this.right = right;
}
public T getLeft() {
return left;
}
public R getRight() {
return right;
}
}
并根据“左”和“等”的平等将它们归为一组。字段或&#39;右边&#39;领域。输出可以是以下指定的组列表:
public class Group<L, R> extends Tuple<List<L>, List<R>> {
public Group(List<L> left, List<R> right) {
super(left, right);
}
}
我该如何有效地做到这一点?有没有办法使用一些中间并发数据结构来并行化这种算法?
示例输入:Tuple(4,C),Tuple(1,A),Tuple(2,B),Tuple(3,B),Tuple(3,A), Tuple(5,C), Tuple(6,D)
预期输出:Group((1,2,3),(A,B)), Group((4,5),(C)), Group((6),(D))
非常感谢您的帮助。任何伪代码都将受到赞赏。
答案 0 :(得分:0)
您似乎正在尝试构建graph with strongly connected components。 该图表可以通过以下方式表示:
由于您的图表为Undirected Graph,因此每个组都会被表示为一个强关联的组件,要找到这些组,您只需运行BFS Algorithm。