查找所有对象是否属于同一组的最有效方法?

时间:2014-04-22 08:06:11

标签: c++ algorithm

所以我有一些对象,每个对象都有一个整数字段组号。我想在最有效的时间找到所有对象是否属于同一组。这可以在C ++中少于O(n)的时间内完成吗?

1 个答案:

答案 0 :(得分:2)

不,如果不在功能之外进行一些预处理,则不能比使用O(N)更好地执行此操作,例如在O(1)。

要确定所有元素是否属于同一个组,您将(至少在最坏的情况下)需要查看所有元素一次,以确定它们的组立即使其成为O(N)。

最简单的算法看起来像这样(Python伪代码):

def all_same_group(elements):
  group0 = elements[0].group  # group of first element

  # iterate over remaining elements
  for element in elements[1:]:
    if element.group != group0:
       return False  # element has different group, not all same
  return True        # we didn't return in the loop, so all same

假设只有两组,这将是最好的情况(第一和第一组) 第二个元素有不同的组)在O(1)中执行。假设平等 这两组的概率和元素的随机排序 需要检查O(log(N))元素。在最坏的情况下,它仍然是O(N) 你需要检查所有元素。