为什么线性搜索未排序数组O(n)的最佳和最差情况?

时间:2017-07-17 01:41:50

标签: arrays search

对最好的情况和最糟糕的未排序数组有疑问。

假设未排序的数组中没有重复的元素。

根据我大学的讲师,

未排序数组的最佳情况是O(n),而最坏情况也是O(n)。我明白为什么未排序数组的最坏情况是O(n),因为如果元素在数组的最后一个索引中,算法必须搜索所有元素。但是,未排序数组O(n)的最佳情况如何?

假设用户输入了一个可以在未排序数组的第一个索引中找到的数字,为什么最好的情况仍然被认为是O(n)?

找到元素后,它返回true,并退出算法,因此最好的情况应该是O(1)。

基于此link,它表示尽管找到了元素,算法仍将继续搜索,最好的情况是O(n)。

各种答案是给出的链接并不能完全解释为什么是O(n)。

1 个答案:

答案 0 :(得分:2)

此问题实际上已在另一个StackExchange site中介绍。该链接的问题和答案将解释如何计算Big-O表示法。

要总结该网站,Big-O会计算算法的 worst case复杂度。是的,对于该算法的任何给定特定执行将存在边缘情况,其为O(1),但是平均而言,用于搜索无序数组的算法是依次遍历每个元素,直到找到它。

通常,这是使用for循环类型构造实现的:

for element in list:
    if element == thing_to_match:
        return True
return False

该算法在O(n)时间运行,因为for循环的构造意味着,在最坏的情况下,你必须查看每个可能的元素。