有序数组中线性搜索的复杂度分析
Posted
技术标签:
【中文标题】有序数组中线性搜索的复杂度分析【英文标题】:complexity analysis of linear search in sorted array 【发布时间】:2020-02-28 03:58:14 【问题描述】:谁能告诉我线性搜索应用于排序数组时的平均时间复杂度是多少? 我知道最坏的情况是 O(n),最好的情况是 O(1),但我不知道排序数组中的平均情况。
【问题讨论】:
请看我的回答。 cs.stackexchange.com/questions/71547/… 【参考方案1】:假设我们在一个数组中有 n 个元素。然后我们知道平均情况总是适用于概率论,即我们假设在每个位置搜索或找到一个元素的概率是相同的,那么在这种情况下,因为我们有 n 个元素,所以概率是 1/n...
现在,为了成功搜索:
我们可能需要执行 1 次比较或 2 或 3 或 4 次等等..
因此complexity(successful search)
= 1(1/n) + 2(1/n) + 3(1/n) ..... n(1/n) = (n+1)/2
同时考虑不成功的搜索:
complexity(unsuccessful search)
= n(因为我们会在将其视为不成功之前查看所有数组)。
现在, 如果 q 是成功概率,1-q 将是不成功的概率。
因此,平均复杂度 = q*(n+1)/2 + (1-q)*n
这里,q=1/2
平均复杂度 = (3n + 1/4) ~ O(n)
【讨论】:
以上是关于有序数组中线性搜索的复杂度分析的主要内容,如果未能解决你的问题,请参考以下文章
设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)