如何计算线性搜索中的比较次数

时间:2018-03-12 18:20:44

标签: algorithm search

我试图学习计算搜索中的评估数量

    for ex Liner search(A,v)  (assume length[A]>0)

    i<-1
    while i<=length[A] and A[i]!=v
{
       do i <- i+1
}
    if i>length[A]
{
     then return NIL
}{

     else return i
}

我该如何计算?

i<=length[A]应该进行N次比较,也可能是A[i]!=v

如果i>length[A]计算为1?

有点困惑,希望你能帮我解决:D

自学习CLRS算法简介

3 个答案:

答案 0 :(得分:0)

你显然知道比较是什么;好的开始。我们无法分辨你应该计算哪些比较;这是教科书中描述的一部分。一般来说,我们不担心所有比较;相反,我们担心我们执行了多少循环。在这种情况下,是的,失败的情况(v未找到)涉及N循环(其中N是len(A)),列表中的每个值都有一个。

如果列表中的v ,则循环计数是列表中v的序号位置。如果(N+1)/2值均匀分布,则平均值为v,但您没有向我们提供有关分布的任何信息。

这会让你感动吗?

答案 1 :(得分:0)

假设imports: [ BrowserModule, BrowserAnimationsModule, <-- as a replacment AppRoutingModule, FlexLayoutModule, MyOwnCustomMaterialModule ], 位于v位置。

然后,比较次数为p < N,最后为2 * p + 1检查添加了1

注意更常见的是计算i > length[A]值的比较,并忽略索引比较。这是因为比较值可能要贵得多,例如,因为A的类型是字符串。在这种情况下,您可以进行精确的A比较。

答案 2 :(得分:0)

对于此类问题,通常会考虑密钥比较的数量,而其余的则被视为可忽略的开销。

理由是键可以是各种类型,可能具有较高的比较成本,我们不想担心确切的时间,只需要足够的数量。

不同地说,开销大致与第一类操作成比例,我们不太担心比例常数,导致渐近符号O(f(N))。

对于此线性搜索,运行时间为O(M),其中M是数组中键的位置(如果不存在,则为N)。