查找数组中许多元素之一的复杂性

时间:2014-08-09 17:58:47

标签: arrays algorithm search big-o time-complexity

问题几乎就是标题所说的内容,略有不同。如果我没记错的话,在大小为'n'的数组中找到一个条目的平均情况就是复杂度O(n)。

我假设如果向量中有固定数量的元素,我们也想找到一个元素。

但是,如果我们仍然只试图找到一个条目的数量在某种程度上与向量的大小相关,即以某种方式与它一起增长,那该怎么办呢? 我手头有这样的情况,但我不知道数组大小和搜索条目数之间的确切关系。可能是线性的,可能是对数的..平均情况是否仍为O(n)?

我会很感激任何见解。

编辑:示例

数组大小:100

数组内容:在每个位置,1-10个数,完全随机哪一个。

我们寻求的东西:第一次出现“1”

从一个幼稚的角度来看,我们平均应该在任何类型的线性搜索中找到10个查找后的条目(我们必须这样做,因为内容没有排序。)

因为big-O中通常省略因子,这是否意味着我们仍然需要及时O(n),即使它应该是O(n)

3 个答案:

答案 0 :(得分:2)

无论如何都是O(n)。

考虑在这里找到1

[9,9,9,9,9,1]

答案 1 :(得分:1)

如果您正在对数组进行线性搜索,那么在使用M元素的数组中查找N个元素之一的平均时间复杂度将为O(I)其中{{ 1}}是第一个被搜索元素的平均索引。如果数组是随机排序的,那么I平均为I,因此时间复杂度平均为O(N/M),最差情况下为O(N/M)。< / p>

答案 2 :(得分:1)

我对这个问题有两个想法。

首先,如果你考虑一个未排序的数组(在这里就是这种情况),平均情况的渐近复杂度肯定是O(n)。

让我们举个例子。 我们在数组中有n个元素,或者更好地说Vector。现在,平均情况将按节点到节点以线性方式进行搜索。一般来说,平均值为n / 2,平均情况为O(n)。看看,如果添加元素,那么复杂性的性质不会发生变化,但效果很明显,它的平均值是sn / 2比较---直接是1/2(一半) )n。现在插入数组后m元素的效果将是O(n-m),或者相比之下,(n-m)/2比较作为结果添加到Vector中的元素!

所以,我们发现随着阵列大小的增加或更好地说Vector - 复杂性的本质不会因为没有而改变。所需的比较会更多,因为它在平均情况下等于n / 2.

第二,如果对数组或向量进行排序,则执行二进制搜索将具有最差情况下的顺序日志(n + 1)---再次依赖于n。此外,平均情况将以对数方式增加比较,但复杂度顺序O(log n)不会发生变化!