You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环中合并关联数组且避免全遍历?求低计算耗时方案

问题需求

给定数组:

n = [[1,2],[2,3],[4,5],[1,6],[4,7],[8,9],[6,8]]

需要合并所有至少包含一个共同元素的子数组,最终得到结果:

[[1,2,3,6,8,9],[4,5,7]]

实际处理的数据集有约4百万个子数组,每个子数组的元素数量在0到1000之间,希望避免多次遍历这4百万个子数组,找到最快的实现方法。

现有思路与瓶颈

我的思路是:遍历数组n,检查相邻子数组是否存在共同元素,若有则合并为集合;遇到无共同元素的子数组时,创建新集合重复操作。后续如果遇到和已有集合有共同元素的子数组,直接将其加入对应集合,不用重新遍历整个原数组。

目前写的代码如下:

final_list = []
for i in range(0, len(n)-1):
    inter_list = list(set(inter_list))
    if (n[i].ravel()[:,None] == n[i+1].ravel()).any():
        inter_list.append(np.concatenate((DF_list[i], DF_list[i+1]), axis=0))
    final_list.append(inter_list)

现在卡在了:不知道怎么用已经生成的final_list去检查后续的子数组,避免重新遍历原数组。

其他问题
  • 是否有其他方法可以降低这个问题的计算复杂度?试过Dask库,但没法把复杂度降到O(n²)以下。
  • 如果无法降低复杂度,有没有并行化的方案来提升处理速度?
  • 补充:已经尝试过相关线程里的方法,但速度还是不够理想;而且用NetworkX的方法和数组循环的方法得到的结果不一致,前者第一个合并结果的长度大概是1400,后者大概是1250。

内容的提问来源于stack exchange,提问作者Kevin Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:50:22