Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组中查找多个元素之一的复杂性_Arrays_Algorithm_Search_Big O_Time Complexity - Fatal编程技术网

Arrays 在数组中查找多个元素之一的复杂性

Arrays 在数组中查找多个元素之一的复杂性,arrays,algorithm,search,big-o,time-complexity,Arrays,Algorithm,Search,Big O,Time Complexity,问题与标题所说的差不多,只是略有不同。如果我没记错的话,在大小为“n”的数组中查找条目的平均情况是复杂度O(n) 如果向量中有固定数量的元素,我假设情况也是如此,我们想要找到其中一个 但是,如果条目的数量(我们仍然只试图找到一个条目)在某种程度上与向量的大小有关,即以某种方式增长,那又如何呢? 我手头有这样一个例子,但我不知道数组大小和搜索条目数之间的确切关系。可能是线性的,也可能是对数的。。平均情况仍然是O(n) 如有任何见解,我将不胜感激 编辑:一个例子 阵列大小:100 数组内容:在每个位

问题与标题所说的差不多,只是略有不同。如果我没记错的话,在大小为“n”的数组中查找条目的平均情况是复杂度O(n)

如果向量中有固定数量的元素,我假设情况也是如此,我们想要找到其中一个

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

如有任何见解,我将不胜感激

编辑:一个例子

阵列大小:100

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

我们追求的:第一次出现“1”

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


由于因子在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%。在这种情况下,问题根本不取决于向量的大小,因为我们可以平均(这就是我想知道的)期望在两次查找后找到一个解决方案。我想强调的是,
概率影响是基于样本空间的数量计算的,如果你同意的话!所以,无论如何,它必须依赖于元素的数量——因此,它会受到向量增长的影响!