找到平均时间复杂度

时间:2013-06-07 12:48:15

标签: time-complexity

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

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

我的问题是 - 如何在这里找到平均时间复杂度?

据我所知,我有两种可能的情况 - 元素可以在数组中找到,而元素不在那里。但下一步是什么?我是否需要计算一些概率?或者只是说A(n)= n / 2?第二种情况怎么样?

2 个答案:

答案 0 :(得分:1)

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

A(n) = n / 2

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

A(n) = n

如果元素在数组中的概率为0 <= p <= 1, 那么你的平均案例复杂性是:

A(n) = p * (n / 2) + (1 - p) * n

答案 1 :(得分:1)

此提示要求您使用Big-O表示法的机会非常高(您可以自己查看)。

当元素在数组中或不在数组中时,渐近平均大小写复杂度仍为O(n),因为/ 2是从Big-O表示法中抽象出来的“常数因子”。

我的猜想进一步得到证实,因为你没有被告知增加索引或比较两个元素需要多少时间。你已经假设有几个东西是“可接受的常量”,所以a / 2在这里或那里都不会改变你所关注的渐近时间复杂度。