c# - 查找两个列表交集的高效数据结构

标签 c# algorithm data-structures

我有两个非常大的 List<List<int>> A 和 B。我需要在这些列表的每个元素之间找到交集。

A[0] = { 1, 2, 3};
B[0] = {2, 3, 4};

Intersection = { 2, 3 };

我的实现:

List<int> intersection = A[0].Intersection(B[0]).ToList();

此解决方案需要很长时间才能执行。我想知道是否有更好的方法来执行此操作以及我可以使用更有效的数据结构来在更短的时间内执行此操作。

谢谢!

最佳答案

为此,您应该在 C# 中使用哈希集 HashSet<T> .哈希集中的查找是 O(1)(如果使用合适的哈希函数并在下面使用数组),而不是列表的 O(n)。

在 C# 中使用 Linq 你基本上得到这个“内置”: Intersect() 如果使用两个列表,将在内部使用哈希集来计算 O(n) 而不是 O(n^2) 的交集。

var intersection = a.Intersect(b).ToList();

关于c# - 查找两个列表交集的高效数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14825131/

相关文章:

c# - 如何在 csv 列中使用逗号

perl - 有这种类型的名称吗?

Python Dictionary DataStructure 哪个方法 d[] 或 d.get()?

java - 如何改进该算法以优化运行时间(分段查找点)

c++ - 我一直在尝试实现和 AVL 树,但我不断收到这 2 个错误 C2954 和 C2955,并且不知道如何解决它们

c++ - 用于多层数据组织的结构与数组

C# 将文本文件保存到 Excel

c# - C# 中的增量 JSON 解析

c# - 使用 C# 停止 Unity3d 中的线程

algorithm - 多少点是中点?