给定 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(_))
答案 0 :(得分:1)
与第一种解决方案相比,解决方案2和3更快。
但是哪种解决方案2和解决方案3更快?
这取决于每个集合包含的数据。 例如,假设setA有100个元素,setB有3个元素,setA中的最后一个元素只是这两个集合中的公共元素。在这种情况下,第三种解决方案更快所以这不仅取决于设置大小,而且还包含设置的数据。
无论如何你应该总是喜欢第二和第三解决方案,如果需要更优化,你可以在较小的集合上调用exists方法,在大多数情况下应该更快。