所以我有一些对象,每个对象都有一个整数字段组号。我想在最有效的时间找到所有对象是否属于同一组。这可以在C ++中少于O(n)的时间内完成吗?
答案 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) 你需要检查所有元素。