0

假设我们有两组s1s2

我需要基于这两个集合的三个不同的集合:

  1. 中存在s1但不存在的元素集s2
  2. 中存在s2但不存在的元素集s1
  3. 存在于s1和中的元素集s2

这些可以很容易地计算如下:

s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}

o1 = s1 - s2
o2 = s2 - s1
o3 = s1 & s2

有没有办法更有效地计算这些集合?我想不同的集合操作有多个共同的内部处理步骤,因此可能存在冗余。

4

1 回答 1

0

鉴于这些操作是在 C 语言的核心部分中实现的,我认为您几乎无法在自定义编写的代码中加速这些操作。

但...

由于s1 - s2与 相同s1 - (s1 & s2),您可以o3先计算并在差分运算中使用这个较小的集合:

s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}

o3 = s1 & s2
o1 = s1 - o3
o2 = s2 - o3

我怀疑它会产生很大的不同,因为集合查找和插入是 O(1),但可以想象,对较小集合的操作仍然稍微快一些。

于 2021-12-21T14:12:13.187 回答