Algorithm 跳转搜索算法:伪代码错误
我正在读一本关于数据结构和算法的书,目前我正在读一本关于跳转搜索算法的书。我认为书中的伪代码有错误(请检查下面打印的代码)。在步骤3期间不执行跳转,因此,下面的算法的运行时间为O(n)(并且正确实现的跳转搜索算法的运行时间为O(sqrt(n)) 总而言之,我认为跳转搜索算法中有一个错误,但是我可能错了,我将感谢任何帮助/评论。谢谢Algorithm 跳转搜索算法:伪代码错误,algorithm,search,Algorithm,Search,我正在读一本关于数据结构和算法的书,目前我正在读一本关于跳转搜索算法的书。我认为书中的伪代码有错误(请检查下面打印的代码)。在步骤3期间不执行跳转,因此,下面的算法的运行时间为O(n)(并且正确实现的跳转搜索算法的运行时间为O(sqrt(n)) 总而言之,我认为跳转搜索算法中有一个错误,但是我可能错了,我将感谢任何帮助/评论。谢谢 **JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)** Step 1: [INITIALIZE] SET STE
**JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)**
Step 1: [INITIALIZE] SET STEP = sqrt(N), I = 0, LOW = lower_bound, HIGH = upper_bound, POS = –1
Step 2: Repeat Step 3 while I < STEP
Step 3:
IF VAL < A[STEP]
SET HIGH = STEP – 1
ELSE
SET LOW = STEP + 1
[END OF IF]
SET I = I + 1
[END OF LOOP]
Step 4: SET I = LOW
Step 5: Repeat Step 6 while I <= HIGH
Step 6:
IF A[I] = Val
POS = I
PRINT POS
Go to Step 8
[END OF IF]
SET I = I + 1
[END OF LOOP]
Step 7: IF POS = –1
PRINT "VALUE IS NOT PRESENT IN THE ARRAY"
[END OF IF]
Step 8: EXIT
**跳转搜索(A、下限、上限、VAL、N)**
步骤1:[初始化]设置步骤=sqrt(N),I=0,低=下限,高=上限,位置=–1
步骤2:重复步骤3,同时I<步骤
步骤3:
如果VAL步骤5:重复步骤6,而我你完全正确。伪代码有很多问题:
步骤3总是进行相同的比较,因为步骤
未在循环中修改。因此,这意味着在此循环中,要么设置了高
,要么设置了低
,但决不设置两者。如果设置了低
,则搜索仍将采用O(n)正如您正确指出的,A
的索引应该在该循环中更改,并进行“跳跃”
当在该循环中设置了HIGH
时,循环应立即退出
>P>当代码>低被设置时,<代码> + 1 < /代码>也是错误的,因为它不认为前面的元素可能是被查找的值。
尽管有一个特定下限的参数
,但该变量仅在开始时用于初始化下限
,但在实际访问a
时,它从未使用过
奇怪的是,N
是一个参数,因为逻辑上N=上限-下限+1
。因此这只会导致进一步的不一致性
结论:此伪代码中的错误太多,无法提供帮助。代码的棘手之处在于,它给出了正确的答案,但其性能是O(n),而不是O(sqrt(n))。(正确实现的跳转搜索算法的性能应该是O(sqrt(n))。)它并不总是给出正确的答案。如果正在搜索的值是唯一的,并且位于[STEP],那么它将不会被检测到,因为第(3)点。其次,如果lower_bound>STEP,并且搜索的值低于lower_bound,那么它可能会在那里被找到,而它不应该在那里被找到。与higher_bound类似的问题。当然,正确的O(sqrt(n))算法(伪代码)在上可用