我试图学习计算搜索中的评估数量
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算法简介
答案 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)。