考虑个值集(表示为无重复且具有已知大小的排序数组(即,大小可以在O(1)中获得)。可以在O(1)时间内测试值的相等性。以获得中至少不同集合中存在的一组值。ķ Ñ
显而易见的算法是遍历所有集合,对每个值的出现次数进行计数,然后返回计数值大于。但是,在某些情况下,您可以做得更好:例如,当且一个集合比另一个集合小得多时,查看所有项并执行二进制搜索会更有效。对于每个对象:二进制搜索方法的成本为而朴素的方法的成本为,当时更糟。n = k = 2 S 1 S 2 S 1 S 2 O (| S 1 | log (| S 2 |))O (| S 1 | + | S 2 |)| S 1 | < < | S 2 |
考虑到这一点,在哪些情况下我们可以比朴素的算法做得更好?(如果这是一个众所周知的问题,我很高兴知道它的通常名称并提供参考。)