pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>-6ren">
gpt4 book ai didi

Java算法到 "multiply"两个列表列表((A),(B))*((C,C),(D,D))==((A,C,C),(A,D,D), (B,C,C),(B,D,D))

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:44 26 4
gpt4 key购买 nike

我有两个列表列表,子列表代表路径。我想找到所有路径。

List<List<E>> pathList1
List<List<E>> pathList2

当然是天真的解决方案:

List<List<E>> result = new ArrayList<List<E>>();

for(List<E> p1 : pathList1) {
for(List<E> p2: pathList2) {
List<E> newList = new ArrayList<E>(p1.size()+p2.size());
newList.addAll(p1);
newList.addAll(p2);
result.add(newList);
}
}

不相关的理论问题

我最近了解了时间复杂度。所以这是一个 self 检查,我希望有人能评论我是否正确。

让 N = num lists in pathList1

设 M = pathList2 中的 num 个列表

令 X = pathList1 中路径的平均长度

令 Y = pathList2 中路径的平均长度

所以如果问“这个函数的复杂度是多少?”我愿意给

~O(NM(X + Y))

我想知道是否有更快的方法来做到这一点?

也许是更好的数据结构?

同时进行?

创造某种“ future ”并返回它? (完全披露,我 97% 对 future 一无所知)。

我乐于接受巧妙的技巧和独特的解决方案,或者纯粹实用的解决方案。

谢谢。

最佳答案

可以看看guava特别是 Sets#cartesianProduct

即你可以做这样的事情:

Sets.cartesianProduct(ImmutableList.of(
ImmutableSet.of(Sets.newHashSet(pathList1)),
ImmutableSet.of(Sets.newHashSet(pathList2)))

关于Java算法到 "multiply"两个列表列表((A),(B))*((C,C),(D,D))==((A,C,C),(A,D,D), (B,C,C),(B,D,D)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com