Arrays 在数组中查找多个元素之一的复杂性
问题与标题所说的差不多,只是略有不同。如果我没记错的话,在大小为“n”的数组中查找条目的平均情况是复杂度O(n) 如果向量中有固定数量的元素,我假设情况也是如此,我们想要找到其中一个 但是,如果条目的数量(我们仍然只试图找到一个条目)在某种程度上与向量的大小有关,即以某种方式增长,那又如何呢? 我手头有这样一个例子,但我不知道数组大小和搜索条目数之间的确切关系。可能是线性的,也可能是对数的。。平均情况仍然是O(n) 如有任何见解,我将不胜感激 编辑:一个例子 阵列大小:100 数组内容:在每个位置,数字为1-10,完全随机哪一个 我们追求的:第一次出现“1” 从天真的角度来看,在任何类型的线性搜索中,我们平均应该在10次查找后找到一个条目(我们必须这样做,因为内容没有排序)Arrays 在数组中查找多个元素之一的复杂性,arrays,algorithm,search,big-o,time-complexity,Arrays,Algorithm,Search,Big O,Time Complexity,问题与标题所说的差不多,只是略有不同。如果我没记错的话,在大小为“n”的数组中查找条目的平均情况是复杂度O(n) 如果向量中有固定数量的元素,我假设情况也是如此,我们想要找到其中一个 但是,如果条目的数量(我们仍然只试图找到一个条目)在某种程度上与向量的大小有关,即以某种方式增长,那又如何呢? 我手头有这样一个例子,但我不知道数组大小和搜索条目数之间的确切关系。可能是线性的,也可能是对数的。。平均情况仍然是O(n) 如有任何见解,我将不胜感激 编辑:一个例子 阵列大小:100 数组内容:在每个位
由于因子在big-O中通常被省略,这是否意味着我们仍然需要O(n)在时间上,即使它应该是O(n)如果你在数组中进行线性搜索,那么在具有
n
元素的数组中找到M
元素之一的平均时间复杂度将是O(I)
其中I
是第一个搜索元素的平均索引。如果数组是随机排序的,那么I
将平均为O(N/M)
,因此时间复杂度也将平均为O(N/M)
,在最坏的情况下为O(N-M)
<强>第一< /强>,如果你考虑一个未排序的数组(此例在此看来),平均情况下的渐近复杂度肯定是O(n)。 让我们举个例子。 数组中有n个元素,更确切地说是向量。现在,平均案例将以线性方式逐节点搜索。平均值一般为n/2,平均值为O(n)。看,如果添加了元素,那么复杂性的性质不会改变,但是,效果很明显,这是n/2的平均值比较——直接是n的1/2(一半)。在数组中插入元素后,现在m个元素的效果将是O(n-m),或者在比较方面,
(n-m)/2
比较作为向量中元素添加的结果添加
所以,我们发现,随着数组大小的增加,或者更确切地说是向量,复杂度的性质不会改变,尽管所需的比较次数会更多,因为在平均情况下,它等于n/2
秒,如果数组或向量已排序,则执行二进制搜索的最坏情况将是顺序log(n+1)--同样取决于n。此外,平均情况将以对数方式增加比较,但复杂性顺序O(logn)不会改变 反正是O(n)
考虑在此处查找1
:
[9,9,9,9,9,1]
如果数组已排序,则在最坏情况下,通过执行
二进制搜索在数组或向量中找到元素时,关系将变为O(logn)
!我认为一个具体的例子会使问题更清楚。O(n)是最坏的情况,O(n/2)是平均值,不是吗?(假设一个未排序的数组)不是O(n/2)=O(n)@错误,或者我遗漏了什么!啊,是的,我相信你是对的。那么,如果m=log_2(n),它真的会被写成O(n/log_2(n))吗?毫无疑问,你是对的,但他也在问随着向量中元素数量的增加对时间复杂度的影响。请看我的答案。OP也在询问平均复杂度,而不仅仅是最坏的情况。@EmilLundberg它没有足够的数据来估计平均复杂度。例如,输入集中出现“1”的概率。如果“1”在其他数字中只出现一次,则为O(n)。如果分布是线性的,那么平均值是O(n/C)/2,它仍然是O(n),因为C和2是常数。@C-smile所以在一个无限大的向量中,并且有99%的几率遇到正确的解,我们仍然有O(n)->平均无限时间要求?这有点像我预期的,但仍然违反直觉。@ArneRecknagel是的,最坏的情况是无限时间。如果我们有找到解决方案的概率的信息呢?比如说,找到解决方案的概率是50%。在这种情况下,问题根本不取决于向量的大小,因为我们可以平均(这就是我想知道的)期望在两次查找后找到一个解决方案。我想强调的是,概率影响是基于样本空间的数量计算的,如果你同意的话!所以,无论如何,它必须依赖于元素的数量——因此,它会受到向量增长的影响!