Time complexity 求平均时间复杂度

Time complexity 求平均时间复杂度,time-complexity,Time Complexity,我有一个整数数组和一些x整数值。如果当前数组值等于x,我需要在数组上循环比较。如果是这样,循环将中断 最坏情况下的时间复杂度为W(n)=n(搜索的元素位于数组末尾) 最佳情况下的时间复杂度为B(n)=1(搜索的元素位于数组的开头) 我的问题是-我如何在这里找到平均案例时间复杂性 据我所知,我有两种可能的情况-元素可以在数组中找到,而元素不在数组中。但是接下来呢?我需要计算一些可能性吗?或者干脆说A(n)=n/2?第二种情况如何?元素位于数组中时的平均情况复杂度: A(n) = n / 2 A(

我有一个整数数组和一些x整数值。如果当前数组值等于x,我需要在数组上循环比较。如果是这样,循环将中断

最坏情况下的时间复杂度为W(n)=n(搜索的元素位于数组末尾)
最佳情况下的时间复杂度为B(n)=1(搜索的元素位于数组的开头)

我的问题是-我如何在这里找到平均案例时间复杂性


据我所知,我有两种可能的情况-元素可以在数组中找到,而元素不在数组中。但是接下来呢?我需要计算一些可能性吗?或者干脆说A(n)=n/2?第二种情况如何?

元素位于数组中时的平均情况复杂度:

A(n) = n / 2
A(n) = n

元素不在数组中时的平均大小写复杂度:

A(n) = n / 2
A(n) = n

如果元素在数组中的概率为
0,则此提示符希望您使用Big-O表示法的可能性非常高(您可以自己查找)

当元素是否在数组中时,渐近平均情况复杂度仍然是O(n),因为/2是从Big-O符号中抽象出来的“常数因子”


我的猜测更为可信,因为你没有被告知增加一个索引或比较两个元素需要多少时间。你已经假设有几个东西是“可接受常数”,所以这里或那里的a/2根本不会改变你所关心的渐近时间复杂度。

你能解释一下你是如何得到最后一个公式的吗?如果你有一个项目在数组中的概率p=0.4,你会发现它是0.4(40%)的时间和1-0.4(60%)的时间它不会被找到。如果你能找到它,平均来说你会找到一半,如果你没有找到它,你需要迭代整个数组才能知道。40%的一半时间和60%的时间完全导致平均搜索0.4*(n/2)+0.6*n个元素。@Enigma更多的是关于平均案例处理时间,而不是复杂性。复杂度问题更像是“如果我当前的算法,给定大小为N的数据,平均时间为x,那么如果我给它2*N的数据,预期的平均时间是多少?是2*x(即O(N)),还是x^2或10^x或…?”如果你写
A(N)=n/2
您假设
x
可以以相同的概率位于任何位置
1/n
(或者不在数组中)。如果您不知道数组来自何处,这可能是一个安全的假设。