Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一种高效的元组分组算法_Java_Algorithm - Fatal编程技术网

Java 一种高效的元组分组算法

Java 一种高效的元组分组算法,java,algorithm,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

我想开发一种高效算法,将元组列表分组,如下所示:

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;
    }
}
公共类元组{
列兵最后离开;
私权;
公共元组(左T,右R){
this.left=左;
这个。右=右;
}
公共T getLeft(){
左转;
}
公共权利{
返还权;
}
}
并根据“左”字段或“右”字段的相等性将它们分组返回。输出可以是以下指定的组列表:

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)
预期产出:
组((1,2,3),(A,B)),组((4,5),(C)),组((6),(D))


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

看起来您正在尝试构建一个虚拟代码。 图表可以用以下方式表示:

  • 节点:每个元组中的每个值(左或右)都是一个节点。在本例中,您将拥有以下节点:1、2、3、4、5、6、A、B、C、D
  • 边缘:元组本身。在你的例子中,你将有以下几条边:(1,A),(2,B),(3,A),(3,B),(4,C),(5,C),(6,D)

  • 因为您的图形是,所以每个组都将表示为一个强连接的组件,您只需运行即可找到这些组。

    所以您自己没有尝试过任何操作吗?我们必须自己设置测试数据,每个人一遍又一遍?请。我建议使用
    集合
    ,而不是
    列表