如何测试Set是否包含另一个集合中的至少一个值

时间:2015-12-04 22:29:35

标签: scala set

给定 a Set a,大小为

a Set b,大小为b

如果b在。

中包含至少一个值,那么测试最高效的解决方案是什么

解决方案1:交叉的复杂性是什么?

def containsAtLeastOne[A](a:Set[A], b: Set[A]) = a.intersect(b).nonEmpty

解决方案2:最坏情况下的O(a)

def containsAtLeastOne[A](a:Set[A], b: Set[A]) = a.exists(b.contains(_))

解决方案3:最坏情况下的O(b)

def containsAtLeastOne[A](a:Set[A], b: Set[A]) = b.exists(a.contains(_))

1 个答案:

答案 0 :(得分:1)

与第一种解决方案相比,解决方案2和3更快。

但是哪种解决方案2和解决方案3更快?

这取决于每个集合包含的数据。 例如,假设setA有100个元素,setB有3个元素,setA中的最后一个元素只是这两个集合中的公共元素。在这种情况下,第三种解决方案更快所以这不仅取决于设置大小,而且还包含设置的数据。

无论如何你应该总是喜欢第二和第三解决方案,如果需要更优化,你可以在较小的集合上调用exists方法,在大多数情况下应该更快。