一种有效的算法,用于对元组列表进行分组

时间:2018-02-24 14:58:43

标签: java algorithm

我想开发一种有效的算法,它将对元组列表进行分组,如下所示:

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

非常感谢您的帮助。任何伪代码都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试构建graph with strongly connected components。 该图表可以通过以下方式表示:

  1. 节点:每个tupple的每个值(左或右)都是一个节点。在您的情况下,您将拥有以下节点:1,2,3,4,5,6,A,B,C,D
  2. 边缘:tupples本身。在您的情况下,您将具有以下边缘:(1,A),(2,B),(3,A),(3,B),(4,C),(5,C),(6,D )。
  3. 由于您的图表为Undirected Graph,因此每个组都会被表示为一个强关联的组件,要找到这些组,您只需运行BFS Algorithm