F#Set.union参数顺序性能

时间:2011-10-07 19:42:32

标签: f#

如果我知道两个集合中的一个会比另一个集合更大,是否有任何推荐的方法来调用Set.union?

Set.union large small

Set.union small large

由于

3 个答案:

答案 0 :(得分:6)

在内部,集合表示为平行树(您可以check the source online)。在计算集合的并集时,算法将较小的集合(树)基于来自较大集合(树)的根的值分成一组较小的元素和一组较大的元素。拆分总是在较小的集合上执行,以减少工作量。然后它递归地联合两个左右子集并执行一些重新平衡。

摘要,算法并不真正取决于哪个集合是第一个集合,哪个集合是第二个参数。它总是会选择更好的选项,具体取决于set的大小(存储为数据结构的一部分)。

答案 1 :(得分:1)

通过利用此函数实现的未记录功能,使用Set.union时,您的问题背后的意图似乎可以提高性能。但Set.union将您从实现复杂性中抽象出来,只留下 union 操作的集合论意义,该操作对于参数属性是不可知。实际上突破这个抽象层会对代码的复杂性和可维护性产生不利影响,应该避免使用。

虽然有时您别无选择,只能处理leaky abstractions,但Set.union绝对不是这样。 hear from Tomas Set.union实现没有漏洞的抽象缺陷是很好的。

答案 2 :(得分:0)

做你想做的事。您也可以small + largelarge - small获取差异(当然还有small - large)。