给定未排序的数组A,检查A [i] = i是否有效存在

时间:2016-12-17 12:45:10

标签: algorithm computer-science

给定数组A,检查A [i] = i是否存在任何i。

我应该比线性时间更快地解决这个问题,这对我来说似乎是不可能的。我想出的解决方案是首先在n * log(n)时间内对数组进行排序,然后您可以轻松地检查比线性时间更快的数据。但是,由于数组未分类,我看不到“有效”的解决方案?

2 个答案:

答案 0 :(得分:6)

对于任意(未排序)数组,不能一个复杂度高于O(N)的正确算法。

假设您的解决方案优于O(N)。这意味着算法必须省略数组的某些项,因为扫描所有项目是O(N)

构建A,使所有A[i] != i i然后运行算法。 设A[k]为已省略的项目。将k分配给A[k], 再次运行算法 - 当预期no such items时,它将返回k

答案 1 :(得分:1)

你将获得带有并行算法的O(log n)(你没有限制它)。只需以ld(N)步骤启动N个处理器,然后让它们并行检查数组项。